Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] [FIXED][79471][Parser] Syntax Errors: Problems with handling float value in the preprocessor statements


[FIXED][79471][Parser] Syntax Errors: Problems with handling float value in the preprocessor statements

This is a scanner bug and should be applied to 2.1/Head.

Thanks,
Devin Steffler
IBM's Eclipse CDT
Ottawa (Palladium), Ontario, Canada


Index: parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java,v
retrieving revision 1.140
diff -u -r1.140 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	20 Nov 2004 17:48:43 -0000	1.140
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	30 Nov 2004 14:04:13 -0000
@@ -2480,5 +2480,23 @@
     	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());
+    }
 }
 
Index: parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java,v
retrieving revision 1.91
diff -u -r1.91 Scanner2.java
--- parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java	29 Nov 2004 21:00:31 -0000	1.91
+++ parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java	30 Nov 2004 14:03:59 -0000
@@ -1328,7 +1328,7 @@
 					// 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)

Back to the top