Author: charusso Date: Wed May 29 13:34:29 2019 New Revision: 362027 URL: http://llvm.org/viewvc/llvm-project?rev=362027&view=rev Log: [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 Modified: cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp cfe/trunk/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist cfe/trunk/test/Analysis/diagnostics/no-store-func-path-notes.cpp cfe/trunk/test/Analysis/inner-pointer.cpp cfe/trunk/test/Analysis/use-after-move.cpp Modified: cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp?rev=362027&r1=362026&r2=362027&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp Wed May 29 13:34:29 2019 @@ -2323,10 +2323,17 @@ bool ConditionBRVisitor::printValue(cons if (!IsAssuming) IntValue = getConcreteIntegerValue(CondVarExpr, N); - if (IsAssuming || !IntValue.hasValue()) - Out << (TookTrue ? "not equal to 0" : "0"); - else - Out << *IntValue.getValue(); + if (IsAssuming || !IntValue.hasValue()) { + if (Ty->isBooleanType()) + Out << (TookTrue ? "true" : "false"); + else + Out << (TookTrue ? "not equal to 0" : "0"); + } else { + if (Ty->isBooleanType()) + Out << (IntValue.getValue()->getBoolValue() ? "true" : "false"); + else + Out << *IntValue.getValue(); + } return true; } Modified: cfe/trunk/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist?rev=362027&r1=362026&r2=362027&view=diff ============================================================================== --- cfe/trunk/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist (original) +++ cfe/trunk/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist Wed May 29 13:34:29 2019 @@ -829,9 +829,9 @@ </array> </array> <key>extended_message</key> - <string>'fail' is 1</string> + <string>'fail' is true</string> <key>message</key> - <string>'fail' is 1</string> + <string>'fail' is true</string> </dict> <dict> <key>kind</key><string>control</string> Modified: cfe/trunk/test/Analysis/diagnostics/no-store-func-path-notes.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/diagnostics/no-store-func-path-notes.cpp?rev=362027&r1=362026&r2=362027&view=diff ============================================================================== --- cfe/trunk/test/Analysis/diagnostics/no-store-func-path-notes.cpp (original) +++ cfe/trunk/test/Analysis/diagnostics/no-store-func-path-notes.cpp Wed May 29 13:34:29 2019 @@ -102,7 +102,7 @@ struct C { C(int pX, int pY, bool Flag) { 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}} return; // expected-note{{Returning without writing to 'this->y'}} y = pY; Modified: cfe/trunk/test/Analysis/inner-pointer.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/inner-pointer.cpp?rev=362027&r1=362026&r2=362027&view=diff ============================================================================== --- cfe/trunk/test/Analysis/inner-pointer.cpp (original) +++ cfe/trunk/test/Analysis/inner-pointer.cpp Wed May 29 13:34:29 2019 @@ -38,9 +38,9 @@ void deref_after_scope_char(bool cond) { std::string s; const char *c2 = s.c_str(); 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@-3 {{Assuming 'cond' is 0}} + // expected-note@-3 {{Assuming 'cond' is false}} // expected-note@-4 {{Taking false branch}} consume(c); // expected-warning {{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; const wchar_t *c2 = s.c_str(); 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@-3 {{Assuming 'cond' is 0}} + // expected-note@-3 {{Assuming 'cond' is false}} // expected-note@-4 {{Taking false branch}} consume(c); // expected-warning {{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; const char *c2 = s2.c_str(); 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@-3 {{Assuming 'cond' is 0}} + // expected-note@-3 {{Assuming 'cond' is false}} // expected-note@-4 {{Taking false branch}} consume(c1); // expected-warning {{Inner pointer of container used after re/deallocation}} // expected-note@-1 {{Inner pointer of container used after re/deallocation}} Modified: cfe/trunk/test/Analysis/use-after-move.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/use-after-move.cpp?rev=362027&r1=362026&r2=362027&view=diff ============================================================================== --- cfe/trunk/test/Analysis/use-after-move.cpp (original) +++ cfe/trunk/test/Analysis/use-after-move.cpp Wed May 29 13:34:29 2019 @@ -395,7 +395,7 @@ void uniqueTest(bool cond) { A b; 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}} a.foo(); // peaceful-warning {{Method called on moved-from object 'a'}} // peaceful-note@-1 {{Method called on moved-from object 'a'}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits