summaryrefslogtreecommitdiff
path: root/test/Analysis/dtor.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2013-12-22 00:07:40 +0000
committerDimitry Andric <dim@FreeBSD.org>2013-12-22 00:07:40 +0000
commitbfef399519ca9b8a4b4c6b563253bad7e0eeffe0 (patch)
treedf8df0b0067b381eab470a3b8f28d14a552a6340 /test/Analysis/dtor.cpp
parent6a0372513edbc473b538d2f724efac50405d6fef (diff)
Diffstat (limited to 'test/Analysis/dtor.cpp')
-rw-r--r--test/Analysis/dtor.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/Analysis/dtor.cpp b/test/Analysis/dtor.cpp
index 18cd9853f661..11ce0d57ef4f 100644
--- a/test/Analysis/dtor.cpp
+++ b/test/Analysis/dtor.cpp
@@ -401,3 +401,38 @@ namespace LifetimeExtension {
clang_analyzer_eval(SaveOnVirtualDestruct::lastOutput == 42); // expected-warning{{TRUE}}
}
}
+
+namespace NoReturn {
+ struct NR {
+ ~NR() __attribute__((noreturn));
+ };
+
+ void f(int **x) {
+ NR nr;
+ }
+
+ void g() {
+ int *x;
+ f(&x);
+ *x = 47; // no warning
+ }
+}
+
+namespace PseudoDtor {
+ template <typename T>
+ void destroy(T &obj) {
+ clang_analyzer_checkInlined(true); // expected-warning{{TRUE}}
+ obj.~T();
+ }
+
+ void test() {
+ int i;
+ destroy(i);
+ clang_analyzer_eval(true); // expected-warning{{TRUE}}
+ }
+}
+
+namespace Incomplete {
+ class Foo; // expected-note{{forward declaration}}
+ void f(Foo *foo) { delete foo; } // expected-warning{{deleting pointer to incomplete type}}
+}