forked from OSchip/llvm-project
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. llvm-svn: 372454
This commit is contained in:
parent
4c05de8c1d
commit
77297f0761
|
@ -3983,7 +3983,8 @@ bool Expr::isSameComparisonOperand(const Expr* E1, const Expr* E2) {
|
|||
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))
|
||||
|
|
|
@ -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}}
|
||||
|
|
Loading…
Reference in New Issue