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 edbcfac0746..c3366b0967b 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 @@ -2665,4 +2665,16 @@ public class Scanner2Test extends BaseScanner2Test validateToken( IToken.tRPAREN ); validateChar( "s" ); } + + public void testBug185120() throws Exception { + StringBuffer buffer = new StringBuffer(); + buffer.append("#define TEST_DEFINE 1UL\n"); + buffer.append("#if TEST_DEFINE != 1UL\n"); + buffer.append("-\n"); + buffer.append("#else\n"); + buffer.append("+\n"); + buffer.append("#endif\n"); + initializeScanner( buffer.toString() ); + validateToken( IToken.tPLUS ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java index 0dd6408838e..705574c3cd0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java @@ -618,7 +618,13 @@ public class ExpressionEvaluator { // end of number if (c == 'L' || c == 'l' || c == 'U' || c == 'u') { // eat the long/unsigned - ++bufferPos[bufferStackPos]; + int pos= ++bufferPos[bufferStackPos]; + if (pos < limit) { + c= buffer[pos]; + if (c == 'L' || c == 'l' || c == 'U' || c == 'u') { + ++bufferPos[bufferStackPos]; + } + } } // done