1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-03-28 14:56:28 +01:00

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
This commit is contained in:
Nathan Ridge 2019-10-01 22:10:03 -04:00
parent 5c77776dcd
commit 02789c6a1e
4 changed files with 22 additions and 3 deletions

View file

@ -103,6 +103,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
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 class AST2CPPTests extends AST2CPPTestBase {
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()));
}
}

View file

@ -251,6 +251,6 @@ public final class CStringValue implements IValue {
return false;
}
CStringValue o = (CStringValue) other;
return fFixedValue.equals(o.fFixedValue);
return CharArrayUtils.equals(fFixedValue, o.fFixedValue);
}
}

View file

@ -182,6 +182,6 @@ public final class FloatingPointValue implements IValue {
return false;
}
FloatingPointValue o = (FloatingPointValue) other;
return fFixedValue.equals(o.fFixedValue);
return CharArrayUtils.equals(fFixedValue, o.fFixedValue);
}
}

View file

@ -297,6 +297,6 @@ public class IntegralValue implements IValue {
return false;
}
IntegralValue o = (IntegralValue) other;
return fFixedValue.equals(o.fFixedValue);
return CharArrayUtils.equals(fFixedValue, o.fFixedValue);
}
}