[PATCH] D60899: [analyzer] Unbreak body farms in presence of multiple declarations.
Phabricator via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 22 19:53:55 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL358946: [analyzer] Unbreak body farms in presence of multiple declarations. (authored by dergachev, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Changed prior to commit:
https://reviews.llvm.org/D60899?vs=195852&id=196176#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D60899/new/
https://reviews.llvm.org/D60899
Files:
cfe/trunk/lib/Analysis/BodyFarm.cpp
cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
cfe/trunk/test/Analysis/OSAtomic_mac.c
Index: cfe/trunk/test/Analysis/OSAtomic_mac.c
===================================================================
--- cfe/trunk/test/Analysis/OSAtomic_mac.c
+++ cfe/trunk/test/Analysis/OSAtomic_mac.c
@@ -8,13 +8,20 @@
}
int *invalidSLocOnRedecl() {
- int *b; // expected-note{{'b' declared without an initial value}}
-
+ // Was crashing when trying to throw a report about returning an uninitialized
+ // value to the caller. FIXME: We should probably still throw that report,
+ // something like "The "compare" part of CompareAndSwap depends on an
+ // undefined value".
+ int *b;
OSAtomicCompareAndSwapPtrBarrier(0, 0, &b); // no-crash
- // FIXME: We don't really need these notes.
- // expected-note at -2{{Calling 'OSAtomicCompareAndSwapPtrBarrier'}}
- // expected-note at -3{{Returning from 'OSAtomicCompareAndSwapPtrBarrier'}}
+ return b;
+}
- return b; // expected-warning{{Undefined or garbage value returned to caller}}
- // expected-note at -1{{Undefined or garbage value returned to caller}}
+void testThatItActuallyWorks() {
+ void *x = 0;
+ int res = OSAtomicCompareAndSwapPtrBarrier(0, &x, &x);
+ clang_analyzer_eval(res); // expected-warning{{TRUE}}
+ // expected-note at -1{{TRUE}}
+ clang_analyzer_eval(x == &x); // expected-warning{{TRUE}}
+ // expected-note at -1{{TRUE}}
}
Index: cfe/trunk/lib/Analysis/BodyFarm.cpp
===================================================================
--- cfe/trunk/lib/Analysis/BodyFarm.cpp
+++ cfe/trunk/lib/Analysis/BodyFarm.cpp
@@ -665,8 +665,6 @@
}
Stmt *BodyFarm::getBody(const FunctionDecl *D) {
- D = D->getCanonicalDecl();
-
Optional<Stmt *> &Val = Bodies[D];
if (Val.hasValue())
return Val.getValue();
Index: cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
===================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
+++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
@@ -579,6 +579,9 @@
PathDiagnosticLocation L =
PathDiagnosticLocation::create(N->getLocation(), SM);
+ // For now this shouldn't trigger, but once it does (as we add more
+ // functions to the body farm), we'll need to decide if these reports
+ // are worth suppressing as well.
if (!L.hasValidLocation())
return nullptr;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60899.196176.patch
Type: text/x-patch
Size: 2377 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190423/0a43371e/attachment.bin>
More information about the cfe-commits
mailing list