diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java index 98c8b7b3bd0..7f01a23b491 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java @@ -2354,4 +2354,14 @@ public class Scanner2Test extends BaseScanner2Test validateEOF(); } + public void testbug84270() throws Exception { + Writer writer = new StringWriter(); + writer.write("#define h g( ~\n"); //$NON-NLS-1$ + writer.write("#define g f\n"); //$NON-NLS-1$ + writer.write("#define f(a) f(x * (a))\n"); //$NON-NLS-1$ + writer.write("h 5) \n"); //$NON-NLS-1$ + initializeScanner( writer.toString() ); + fullyTokenize(); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java index 68f1f2a97a1..9a42a858c9d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java @@ -3979,6 +3979,9 @@ abstract class BaseScanner implements IScanner { while (bufferPos[bufferStackPos] < limit) { skipOverWhiteSpace(); + if( bufferPos[bufferStackPos] + 1 >= limit ) + break; + if (buffer[++bufferPos[bufferStackPos]] == ')') { // end of macro break;