forked from OSchip/llvm-project
[analyzer] ConditionBRVisitor: Boolean support
Summary: - Reviewers: NoQ, george.karpenkov Reviewed By: NoQ, george.karpenkov Subscribers: cfe-commits, xazax.hun, baloghadamsoftware, szepet, a.sidorin, mikhail.ramalho, Szelethus, donat.nagy, dkrupp Tags: #clang Differential Revision: https://reviews.llvm.org/D58207 llvm-svn: 362027
This commit is contained in:
parent
d1f0ec3f64
commit
2e896b8b39
|
@ -2323,10 +2323,17 @@ bool ConditionBRVisitor::printValue(const Expr *CondVarExpr, raw_ostream &Out,
|
||||||
if (!IsAssuming)
|
if (!IsAssuming)
|
||||||
IntValue = getConcreteIntegerValue(CondVarExpr, N);
|
IntValue = getConcreteIntegerValue(CondVarExpr, N);
|
||||||
|
|
||||||
if (IsAssuming || !IntValue.hasValue())
|
if (IsAssuming || !IntValue.hasValue()) {
|
||||||
Out << (TookTrue ? "not equal to 0" : "0");
|
if (Ty->isBooleanType())
|
||||||
else
|
Out << (TookTrue ? "true" : "false");
|
||||||
Out << *IntValue.getValue();
|
else
|
||||||
|
Out << (TookTrue ? "not equal to 0" : "0");
|
||||||
|
} else {
|
||||||
|
if (Ty->isBooleanType())
|
||||||
|
Out << (IntValue.getValue()->getBoolValue() ? "true" : "false");
|
||||||
|
else
|
||||||
|
Out << *IntValue.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -829,9 +829,9 @@
|
||||||
</array>
|
</array>
|
||||||
</array>
|
</array>
|
||||||
<key>extended_message</key>
|
<key>extended_message</key>
|
||||||
<string>'fail' is 1</string>
|
<string>'fail' is true</string>
|
||||||
<key>message</key>
|
<key>message</key>
|
||||||
<string>'fail' is 1</string>
|
<string>'fail' is true</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>kind</key><string>control</string>
|
<key>kind</key><string>control</string>
|
||||||
|
|
|
@ -102,7 +102,7 @@ struct C {
|
||||||
|
|
||||||
C(int pX, int pY, bool Flag) {
|
C(int pX, int pY, bool Flag) {
|
||||||
x = pX;
|
x = pX;
|
||||||
if (Flag) // expected-note{{Assuming 'Flag' is not equal to 0}}
|
if (Flag) // expected-note{{Assuming 'Flag' is true}}
|
||||||
// expected-note@-1{{Taking true branch}}
|
// expected-note@-1{{Taking true branch}}
|
||||||
return; // expected-note{{Returning without writing to 'this->y'}}
|
return; // expected-note{{Returning without writing to 'this->y'}}
|
||||||
y = pY;
|
y = pY;
|
||||||
|
|
|
@ -38,9 +38,9 @@ void deref_after_scope_char(bool cond) {
|
||||||
std::string s;
|
std::string s;
|
||||||
const char *c2 = s.c_str();
|
const char *c2 = s.c_str();
|
||||||
if (cond) {
|
if (cond) {
|
||||||
// expected-note@-1 {{Assuming 'cond' is not equal to 0}}
|
// expected-note@-1 {{Assuming 'cond' is true}}
|
||||||
// expected-note@-2 {{Taking true branch}}
|
// expected-note@-2 {{Taking true branch}}
|
||||||
// expected-note@-3 {{Assuming 'cond' is 0}}
|
// expected-note@-3 {{Assuming 'cond' is false}}
|
||||||
// expected-note@-4 {{Taking false branch}}
|
// expected-note@-4 {{Taking false branch}}
|
||||||
consume(c); // expected-warning {{Inner pointer of container used after re/deallocation}}
|
consume(c); // expected-warning {{Inner pointer of container used after re/deallocation}}
|
||||||
// expected-note@-1 {{Inner pointer of container used after re/deallocation}}
|
// expected-note@-1 {{Inner pointer of container used after re/deallocation}}
|
||||||
|
@ -73,9 +73,9 @@ void deref_after_scope_wchar_t(bool cond) {
|
||||||
std::wstring s;
|
std::wstring s;
|
||||||
const wchar_t *c2 = s.c_str();
|
const wchar_t *c2 = s.c_str();
|
||||||
if (cond) {
|
if (cond) {
|
||||||
// expected-note@-1 {{Assuming 'cond' is not equal to 0}}
|
// expected-note@-1 {{Assuming 'cond' is true}}
|
||||||
// expected-note@-2 {{Taking true branch}}
|
// expected-note@-2 {{Taking true branch}}
|
||||||
// expected-note@-3 {{Assuming 'cond' is 0}}
|
// expected-note@-3 {{Assuming 'cond' is false}}
|
||||||
// expected-note@-4 {{Taking false branch}}
|
// expected-note@-4 {{Taking false branch}}
|
||||||
consume(c); // expected-warning {{Inner pointer of container used after re/deallocation}}
|
consume(c); // expected-warning {{Inner pointer of container used after re/deallocation}}
|
||||||
// expected-note@-1 {{Inner pointer of container used after re/deallocation}}
|
// expected-note@-1 {{Inner pointer of container used after re/deallocation}}
|
||||||
|
@ -122,9 +122,9 @@ void multiple_symbols(bool cond) {
|
||||||
std::string s2;
|
std::string s2;
|
||||||
const char *c2 = s2.c_str();
|
const char *c2 = s2.c_str();
|
||||||
if (cond) {
|
if (cond) {
|
||||||
// expected-note@-1 {{Assuming 'cond' is not equal to 0}}
|
// expected-note@-1 {{Assuming 'cond' is true}}
|
||||||
// expected-note@-2 {{Taking true branch}}
|
// expected-note@-2 {{Taking true branch}}
|
||||||
// expected-note@-3 {{Assuming 'cond' is 0}}
|
// expected-note@-3 {{Assuming 'cond' is false}}
|
||||||
// expected-note@-4 {{Taking false branch}}
|
// expected-note@-4 {{Taking false branch}}
|
||||||
consume(c1); // expected-warning {{Inner pointer of container used after re/deallocation}}
|
consume(c1); // expected-warning {{Inner pointer of container used after re/deallocation}}
|
||||||
// expected-note@-1 {{Inner pointer of container used after re/deallocation}}
|
// expected-note@-1 {{Inner pointer of container used after re/deallocation}}
|
||||||
|
|
|
@ -395,7 +395,7 @@ void uniqueTest(bool cond) {
|
||||||
A b;
|
A b;
|
||||||
b = std::move(a); // peaceful-note {{Object 'a' is moved}}
|
b = std::move(a); // peaceful-note {{Object 'a' is moved}}
|
||||||
|
|
||||||
if (cond) { // peaceful-note {{Assuming 'cond' is not equal to 0}}
|
if (cond) { // peaceful-note {{Assuming 'cond' is true}}
|
||||||
// peaceful-note@-1 {{Taking true branch}}
|
// peaceful-note@-1 {{Taking true branch}}
|
||||||
a.foo(); // peaceful-warning {{Method called on moved-from object 'a'}}
|
a.foo(); // peaceful-warning {{Method called on moved-from object 'a'}}
|
||||||
// peaceful-note@-1 {{Method called on moved-from object 'a'}}
|
// peaceful-note@-1 {{Method called on moved-from object 'a'}}
|
||||||
|
|
Loading…
Reference in New Issue