Bug 551689 - Fix equivalence computation for simple literals
We were using equals() on char[] array objects which returned false if
the objects were distinct, even if they contained the same characters.
Change-Id: Iff5da52c67a0c17d857d791f57e768aafa7e165d
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
index bb6cb88..d27cea8 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
@@ -103,6 +103,7 @@
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionCallExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition;
@@ -13407,4 +13408,22 @@
public void testClassFromInitList_549036() throws Exception {
parseAndCheckImplicitNameBindings();
}
+
+ // int a = 42, b = 42;
+ // float c = 3.14, d = 3.14;
+ // char e[] = "waldo", f[] = "waldo";
+ public void testLiteralExpressionEquivalence_551689() throws Exception {
+ BindingAssertionHelper helper = getAssertionHelper();
+ ICPPASTExpression a = helper.assertNode("a = 42", "42");
+ ICPPASTExpression b = helper.assertNode("b = 42", "42");
+ assertTrue(a.getEvaluation().isEquivalentTo(b.getEvaluation()));
+
+ ICPPASTExpression c = helper.assertNode("c = 3.14", "3.14");
+ ICPPASTExpression d = helper.assertNode("d = 3.14", "3.14");
+ assertTrue(c.getEvaluation().isEquivalentTo(d.getEvaluation()));
+
+ ICPPASTExpression e = helper.assertNode("e[] = \"waldo\"", "\"waldo\"");
+ ICPPASTExpression f = helper.assertNode("f[] = \"waldo\"", "\"waldo\"");
+ assertTrue(e.getEvaluation().isEquivalentTo(f.getEvaluation()));
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/CStringValue.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/CStringValue.java
index 6aa59fb..a8b5ccf 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/CStringValue.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/CStringValue.java
@@ -251,6 +251,6 @@
return false;
}
CStringValue o = (CStringValue) other;
- return fFixedValue.equals(o.fFixedValue);
+ return CharArrayUtils.equals(fFixedValue, o.fFixedValue);
}
}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/FloatingPointValue.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/FloatingPointValue.java
index a083786..cb23307 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/FloatingPointValue.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/FloatingPointValue.java
@@ -182,6 +182,6 @@
return false;
}
FloatingPointValue o = (FloatingPointValue) other;
- return fFixedValue.equals(o.fFixedValue);
+ return CharArrayUtils.equals(fFixedValue, o.fFixedValue);
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IntegralValue.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IntegralValue.java
index 1cf9d4f..4487599 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IntegralValue.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IntegralValue.java
@@ -297,6 +297,6 @@
return false;
}
IntegralValue o = (IntegralValue) other;
- return fFixedValue.equals(o.fFixedValue);
+ return CharArrayUtils.equals(fFixedValue, o.fFixedValue);
}
}