summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/smart-ptr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/Analysis/smart-ptr.cpp')
-rw-r--r--clang/test/Analysis/smart-ptr.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/clang/test/Analysis/smart-ptr.cpp b/clang/test/Analysis/smart-ptr.cpp
new file mode 100644
index 00000000000..3f1782480b4
--- /dev/null
+++ b/clang/test/Analysis/smart-ptr.cpp
@@ -0,0 +1,18 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection\
+// RUN: -analyzer-checker cplusplus.Move,cplusplus.SmartPtr\
+// RUN: -std=c++11 -verify %s
+
+#include "Inputs/system-header-simulator-cxx.h"
+
+void clang_analyzer_warnIfReached();
+
+void derefAfterMove(std::unique_ptr<int> P) {
+ std::unique_ptr<int> Q = std::move(P);
+ if (Q)
+ clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}
+ *Q.get() = 1; // no-warning
+ if (P)
+ clang_analyzer_warnIfReached(); // no-warning
+ // TODO: Report a null dereference (instead).
+ *P.get() = 1; // expected-warning {{Method called on moved-from object 'P'}}
+}
OpenPOWER on IntegriCloud