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);
 	}
 }