Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] [FIXED] 75532 [Scanner] Wrong compare if the two declarations are in other number system


Here's a patch for the following:

[FIXED] 75532 [Scanner] Wrong compare if the two declarations are in other number system

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


Index: parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java,v
retrieving revision 1.9
diff -u -r1.9 ExpressionEvaluator.java
--- parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java	6 Oct 2004 20:15:10 -0000	1.9
+++ parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java	7 Oct 2004 17:14:25 -0000
@@ -459,11 +459,11 @@
 								continue;
 							} else if (isHex) {
 								if (c >= 'a' && c <= 'f') {
-									tokenValue *= 16;
+									tokenValue = (tokenValue == 0 ? 10 : (tokenValue * 16) + 10);
 									tokenValue += c - 'a';
 									continue;
 								} else if (c >= 'A' && c <= 'F') {
-									tokenValue *= 16;
+									tokenValue = (tokenValue == 0 ? 10 : (tokenValue * 16) + 10);
 									tokenValue += c - 'A';
 									continue;
 								}
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.127
diff -u -r1.127 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	5 Oct 2004 18:16:04 -0000	1.127
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	7 Oct 2004 17:12:44 -0000
@@ -14,6 +14,7 @@
 import java.io.Writer;
 import java.util.Iterator;
 
+import org.eclipse.cdt.core.parser.IProblem;
 import org.eclipse.cdt.core.parser.ParserLanguage;
 import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
 import org.eclipse.cdt.core.parser.ast.ASTClassKind;
@@ -2240,6 +2241,27 @@
     	assertTrue( typeIds.hasNext() );
     	IASTTypeId typeId = (IASTTypeId) typeIds.next();
     	assertEquals( typeId.getTypeOrClassName(), "Thrown" );
+	}
+    
+    public void testBug75532() throws Exception
+	{
+    	try {
+        	Writer writer = new StringWriter();
+        	writer.write( "#if 2147483647 == 0x7fffffff\n");
+        	writer.write( "#error This was equal, but not for the eclipse.\n");
+        	writer.write( "#endif\n");
+        	parse( writer.toString() );
+
+        	assertTrue(false);
+    	} catch (ParserException pe) {
+    		// expected IProblem
+    	} finally {
+        	assertTrue( callback.getProblems().hasNext() );
+        	Object ipo = callback.getProblems().next();
+        	assertTrue( ipo instanceof IProblem );
+        	IProblem ip = (IProblem)callback.getProblems().next();
+        	assertTrue(ip.getArguments().indexOf("This was equal, but not for the eclipse") > 0);
+    	}
 	}
 }
 

Back to the top