| // 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}} | |
| } |