[PATCH] D56042: [analyzer] pr38838, pr39976: Fix a crash on emitting diagnostics before destructor.
Phabricator via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 10 15:48:34 PST 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL350907: [analyzer] pr38838, pr39976: Fix crash on diagnosing before implicit destructor. (authored by dergachev, committed by ).
Herald added a subscriber: llvm-commits.
Changed prior to commit:
https://reviews.llvm.org/D56042?vs=179391&id=181176#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D56042/new/
https://reviews.llvm.org/D56042
Files:
cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
cfe/trunk/test/Analysis/diagnostics/dtors.cpp
Index: cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
===================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
+++ cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
@@ -723,6 +723,8 @@
} else if (Optional<PostInitializer> PIP = P.getAs<PostInitializer>()) {
return PathDiagnosticLocation(PIP->getInitializer()->getSourceLocation(),
SMng);
+ } else if (Optional<PreImplicitCall> PIC = P.getAs<PreImplicitCall>()) {
+ return PathDiagnosticLocation(PIC->getLocation(), SMng);
} else if (Optional<PostImplicitCall> PIE = P.getAs<PostImplicitCall>()) {
return PathDiagnosticLocation(PIE->getLocation(), SMng);
} else if (Optional<CallEnter> CE = P.getAs<CallEnter>()) {
Index: cfe/trunk/test/Analysis/diagnostics/dtors.cpp
===================================================================
--- cfe/trunk/test/Analysis/diagnostics/dtors.cpp
+++ cfe/trunk/test/Analysis/diagnostics/dtors.cpp
@@ -0,0 +1,25 @@
+// RUN: %clang_analyze_cc1 -w -analyzer-checker=core,cplusplus -verify %s
+
+// expected-no-diagnostics
+
+namespace no_crash_on_delete_dtor {
+// We were crashing when producing diagnostics for this code.
+struct S {
+ void foo();
+ ~S();
+};
+
+struct smart_ptr {
+ int x;
+ S *s;
+ smart_ptr(S *);
+ S *get() {
+ return (x || 0) ? nullptr : s;
+ }
+};
+
+void bar(smart_ptr p) {
+ delete p.get();
+ p.get()->foo();
+}
+} // namespace no_crash_on_delete_dtor
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D56042.181176.patch
Type: text/x-patch
Size: 1512 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190110/6ce4cd06/attachment-0001.bin>
More information about the cfe-commits
mailing list