Author: rtrieu Date: Fri Sep 20 21:18:54 2019 New Revision: 372454 URL: http://llvm.org/viewvc/llvm-project?rev=372454&view=rev Log: Fix bad APInt compare.
APInt comparison require both to have the same bitwidth. Since only the value is needed, use the compare function APInt::isSameValue instead. Modified: cfe/trunk/lib/AST/Expr.cpp cfe/trunk/test/SemaCXX/self-comparison.cpp Modified: cfe/trunk/lib/AST/Expr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=372454&r1=372453&r2=372454&view=diff ============================================================================== --- cfe/trunk/lib/AST/Expr.cpp (original) +++ cfe/trunk/lib/AST/Expr.cpp Fri Sep 20 21:18:54 2019 @@ -3983,7 +3983,8 @@ bool Expr::isSameComparisonOperand(const const auto Integer1 = dyn_cast<IntegerLiteral>(Idx1); const auto Integer2 = dyn_cast<IntegerLiteral>(Idx2); if (Integer1 && Integer2) { - if (Integer1->getValue() != Integer2->getValue()) + if (!llvm::APInt::isSameValue(Integer1->getValue(), + Integer2->getValue())) return false; } else { if (!isSameComparisonOperand(Idx1, Idx2)) Modified: cfe/trunk/test/SemaCXX/self-comparison.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/self-comparison.cpp?rev=372454&r1=372453&r2=372454&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/self-comparison.cpp (original) +++ cfe/trunk/test/SemaCXX/self-comparison.cpp Fri Sep 20 21:18:54 2019 @@ -86,6 +86,7 @@ int struct_test(S s1, S s2, S *s3, T t) return s3->field == s3->field; // expected-warning {{self-comparison always evaluates to true}} return s3->static_field == S::static_field; // expected-warning {{self-comparison always evaluates to true}} return s1.array[0] == s1.array[0]; // expected-warning {{self-comparison always evaluates to true}} + return s1.array[0] == s1.array[0ull]; // expected-warning {{self-comparison always evaluates to true}} return s1.array[I1] == s1.array[I1]; // expected-warning {{self-comparison always evaluates to true}} return s1.array[s2.array[0]] == s1.array[s2.array[0]]; // expected-warning {{self-comparison always evaluates to true}} return s3->array[t.field] == s3->array[t.field]; // expected-warning {{self-comparison always evaluates to true}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits