brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 7ab8720 Raw
128 lines · cpp
1// RUN: %clang_analyze_cc1 -std=c++20 -analyzer-checker=core,debug.ExprInspection -analyzer-config inline-lambdas=true -verify %s2 3#include "Inputs/system-header-simulator-cxx.h"4void clang_analyzer_warnIfReached();5void clang_analyzer_eval(int);6 7void capture_structured_binding_to_array_byref() {8  int arr[] {5};9  auto& [i] = arr;10  [i]() mutable {11    if (i != 5)12      clang_analyzer_warnIfReached();13    ++i;14  }();15  [&i] {16    if (i != 5)17      clang_analyzer_warnIfReached();18  }();19  [&i] {20    if (i != 5)21      clang_analyzer_warnIfReached();22    i++;23  }();24  clang_analyzer_eval(i == 6); // expected-warning{{TRUE}}25}26 27void capture_structured_binding_to_array_byvalue() {28  int arr[] {5};29  auto [i] = arr;30  [i]() mutable {31    if (i != 5)32      clang_analyzer_warnIfReached();33    ++i;34  }();35  [&i] {36    if (i != 5)37      clang_analyzer_warnIfReached();38  }();39  [&i] {40    if (i != 5)41      clang_analyzer_warnIfReached();42    i++;43  }();44  clang_analyzer_eval(i == 6); // expected-warning{{TRUE}}45}46 47void capture_structured_binding_to_tuple_like_byref() {48  std::pair<int, int> p {5, 6};49  auto& [i, _] = p;50  [i]() mutable {51    if (i != 5)52      clang_analyzer_warnIfReached();53    ++i;54  }();55  [&i] {56    if (i != 5)57      clang_analyzer_warnIfReached();58  }();59  [&i] {60    if (i != 5)61      clang_analyzer_warnIfReached();62    i++;63  }();64  clang_analyzer_eval(i == 6); // expected-warning{{TRUE}}65}66 67void capture_structured_binding_to_tuple_like_byvalue() {68  std::pair<int, int> p {5, 6};69  auto [i, _] = p;70  [i]() mutable {71    if (i != 5)72      clang_analyzer_warnIfReached();73    ++i;74  }();75  [&i] {76    if (i != 5)77      clang_analyzer_warnIfReached();78  }();79  [&i] {80    if (i != 5)81      clang_analyzer_warnIfReached();82    i++;83  }();84  clang_analyzer_eval(i == 6); // expected-warning{{TRUE}}85}86 87struct S { int x; };88 89void capture_structured_binding_to_data_member_byref() {90  S s{5};91  auto& [i] = s;92  [i]() mutable {93    if (i != 5)94      clang_analyzer_warnIfReached();95    ++i;96  }();97  [&i] {98    if (i != 5)99      clang_analyzer_warnIfReached();100  }();101  [&i] {102    if (i != 5)103      clang_analyzer_warnIfReached();104    i++;105  }();106  clang_analyzer_eval(i == 6); // expected-warning{{TRUE}}107}108 109void capture_structured_binding_to_data_member_byvalue() {110  S s{5};111  auto [i] = s;112  [i]() mutable {113    if (i != 5)114      clang_analyzer_warnIfReached();115    ++i;116  }();117  [&i] {118    if (i != 5)119      clang_analyzer_warnIfReached();120  }();121  [&i] {122    if (i != 5)123      clang_analyzer_warnIfReached();124    i++;125  }();126  clang_analyzer_eval(i == 6); // expected-warning{{TRUE}}127}128