brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · feaf55d Raw
51 lines · cpp
1// RUN: %clang_analyze_cc1 -std=c++14 -analyzer-checker=core,deadcode,debug.ExprInspection -verify %s2 3int clang_analyzer_eval(int);4 5void 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 15void 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 29int addOne(int p) {30 return p + 1;31}32 33void 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 43void 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