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