1 // RUN: %clang_cc1 -std=c++14 -fsyntax-only -analyze -analyzer-checker=core,deadcode,debug.ExprInspection -verify %s 2 3 int clang_analyzer_eval(int); 4 5 void generalizedCapture() { 6 int v = 7; 7 auto lambda = [x=v]() { 8 return x; 9 }; 10 11 int result = lambda(); 12 clang_analyzer_eval(result == 7); // expected-warning {{TRUE}} 13 } 14 15 void sideEffectsInGeneralizedCapture() { 16 int v = 7; 17 auto lambda = [x=v++]() { 18 return x; 19 }; 20 clang_analyzer_eval(v == 8); // expected-warning {{TRUE}} 21 22 int r1 = lambda(); 23 int r2 = lambda(); 24 clang_analyzer_eval(r1 == 7); // expected-warning {{TRUE}} 25 clang_analyzer_eval(r2 == 7); // expected-warning {{TRUE}} 26 clang_analyzer_eval(v == 8); // expected-warning {{TRUE}} 27 } 28 29 int addOne(int p) { 30 return p + 1; 31 } 32 33 void inliningInGeneralizedCapture() { 34 int v = 7; 35 auto lambda = [x=addOne(v)]() { 36 return x; 37 }; 38 39 int result = lambda(); 40 clang_analyzer_eval(result == 8); // expected-warning {{TRUE}} 41 } 42 43 void caseSplitInGeneralizedCapture(bool p) { 44 auto lambda = [x=(p ? 1 : 2)]() { 45 return x; 46 }; 47 48 int result = lambda(); 49 clang_analyzer_eval(result == 1); // expected-warning {{FALSE}} expected-warning {{TRUE}} 50 } 51