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 6886d67b22c..221f87d82de 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 @@ -2414,4 +2414,15 @@ public class Scanner2Test extends BaseScanner2Test initializeScanner(buffer.toString(), ParserLanguage.CPP); fullyTokenize(); } + + public void testBug156137() throws Exception { + StringBuffer buffer = new StringBuffer(); + buffer.append("#if (3 % 2 == 1) \n"); + buffer.append("C \n"); + buffer.append("#endif \n"); + + initializeScanner(buffer.toString()); + validateIdentifier("C"); + validateEOF(); + } } 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 57df2364e45..df8d7f32325 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 @@ -382,7 +382,7 @@ abstract class BaseScanner implements IScanner { private long multiplicativeExpression() throws EvalException { long r1 = unaryExpression(); - for (int t = LA(); t == tMULT || t == tDIV; t = LA()) { + for (int t = LA(); t == tMULT || t == tDIV || t == tMOD; t = LA()) { int position = pos; // for IProblem /0 below, need position // before // consume() @@ -390,9 +390,12 @@ abstract class BaseScanner implements IScanner { long r2 = unaryExpression(); if (t == tMULT) r1 = r1 * r2; - else if (r2 != 0)// t == tDIV; - r1 = r1 / r2; - else { + else if (r2 != 0) { + if (t == tDIV) + r1 = r1 / r2; + else + r1 = r1 % r2; //tMOD + } else { handleProblem(IProblem.SCANNER_DIVIDE_BY_ZERO, position); throw new EvalException("Divide by 0 encountered"); //$NON-NLS-1$ }