--- /dev/null
+// RUN: %clang_analyze_cc1 -std=c++14 -analyzer-checker=core,debug.ExprInspection -analyzer-config inline-lambdas=true -verify %s
+// RUN: %clang_analyze_cc1 -std=c++17 -analyzer-checker=core,debug.ExprInspection -analyzer-config inline-lambdas=true -verify %s
+
+#include "Inputs/system-header-simulator-cxx.h"
+
+void clang_analyzer_warnIfReached();
+void clang_analyzer_eval(int);
+
+// Capture copy elided object.
+struct Elided{
+ int x = 14;
+ Elided(int) {}
+};
+
+void testCopyElidedObjectCaptured(int x) {
+ int r = [e = Elided(x)] {
+ return e.x;
+ }();
+
+ clang_analyzer_eval(r == 14); // expected-warning{{TRUE}}
+}
+
+static auto MakeUniquePtr() { return std::make_unique<std::vector<int>>(); }
+
+void testCopyElidedUniquePtr() {
+ [uniquePtr = MakeUniquePtr()] {}();
+ clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}
+}
clang_analyzer_eval(i == 7); // expected-warning{{TRUE}}
}
-#if __cplusplus >= 201402L
-// Capture copy elided object.
-
-struct Elided{
- int x = 0;
- Elided(int) {}
-};
-
-void testCopyElidedObjectCaptured(int x) {
- [e = Elided(x)] {
- clang_analyzer_eval(e.x == 0); // expected-warning{{TRUE}}
- }();
-}
-
-static auto MakeUniquePtr() { return std::make_unique<std::vector<int>>(); }
-
-void testCopyElidedUniquePtr() {
- [uniquePtr = MakeUniquePtr()] {}();
- clang_analyzer_warnIfReached(); // expected-warning{{TRUE}}
-}
-
-#endif
-
// Test inline defensive checks
int getNum();