diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java index 281a6be4e1f..b5724cb6ec2 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java @@ -2480,5 +2480,23 @@ public class CompleteParseASTTest extends CompleteParseBaseTest IASTVariable pBase = (IASTVariable)i.next(); assertEquals(pBase.getStartingLine(), 19); } + + public void testBug79471() throws Exception { + Writer writer = new StringWriter(); + writer.write("void testFloatAccess(float * fp) {\n"); //$NON-NLS-1$ + writer.write("#define VAL 2.0f\n"); //$NON-NLS-1$ + writer.write("if(*fp > VAL) { /* Syntax error is here */\n}\n}\n"); //$NON-NLS-1$ + parse(writer.toString()); + writer = new StringWriter(); + writer.write("void testFloatAccess(float * fp) {\n"); //$NON-NLS-1$ + writer.write("#define VAL 2.0l\n"); //$NON-NLS-1$ + writer.write("if(*fp > VAL) { /* Syntax error is here */\n}\n}\n"); //$NON-NLS-1$ + parse(writer.toString()); + writer = new StringWriter(); + writer.write("void testFloatAccess(float * fp) {\n"); //$NON-NLS-1$ + writer.write("#define VAL 2.0f\n"); //$NON-NLS-1$ + writer.write("if(VAL > VAL) { /* Syntax error is here */\n}\n}\n"); //$NON-NLS-1$ + parse(writer.toString()); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java index 36e07ee5743..a6d7a93b080 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java @@ -1328,7 +1328,7 @@ public class Scanner2 implements IScanner, IScannerData { // must be float suffix ++bufferPos[bufferStackPos]; - if (buffer[bufferPos[bufferStackPos]] == 'i') + if (bufferPos[bufferStackPos] < buffer.length && buffer[bufferPos[bufferStackPos]] == 'i') continue; // handle GCC extension 5.10 Complex Numbers break; // fix for 77281 (used to be continue)