xref: /llvm-project/clang/test/Analysis/debug-container-modeling.cpp (revision 9a08a3fab9993f9b93167de5c783dfed6dd7efc0)
1*9a08a3faSAdam Balogh // RUN: %clang_analyze_cc1 -std=c++11\
2*9a08a3faSAdam Balogh // RUN: -analyzer-checker=core,cplusplus\
3*9a08a3faSAdam Balogh // RUN: -analyzer-checker=debug.DebugContainerModeling,debug.ExprInspection\
4*9a08a3faSAdam Balogh // RUN: -analyzer-config aggressive-binary-operation-simplification=true\
5*9a08a3faSAdam Balogh // RUN: -analyzer-config c++-container-inlining=false %s -verify
6*9a08a3faSAdam Balogh 
7*9a08a3faSAdam Balogh // RUN: %clang_analyze_cc1 -std=c++11\
8*9a08a3faSAdam Balogh // RUN: -analyzer-checker=core,cplusplus\
9*9a08a3faSAdam Balogh // RUN: -analyzer-checker=debug.DebugContainerModeling,debug.ExprInspection\
10*9a08a3faSAdam Balogh // RUN: -analyzer-config aggressive-binary-operation-simplification=true\
11*9a08a3faSAdam Balogh // RUN: -analyzer-config c++-container-inlining=true -DINLINE=1 %s -verify
12*9a08a3faSAdam Balogh 
13*9a08a3faSAdam Balogh #include "Inputs/system-header-simulator-cxx.h"
14*9a08a3faSAdam Balogh 
15*9a08a3faSAdam Balogh template <typename Container>
16*9a08a3faSAdam Balogh long clang_analyzer_container_begin(const Container&);
17*9a08a3faSAdam Balogh template <typename Container>
18*9a08a3faSAdam Balogh long clang_analyzer_container_end(const Container&);
19*9a08a3faSAdam Balogh void clang_analyzer_denote(long, const char*);
20*9a08a3faSAdam Balogh void clang_analyzer_express(long);
21*9a08a3faSAdam Balogh 
container_begin_end(const std::vector<int> v0)22*9a08a3faSAdam Balogh void container_begin_end(const std::vector<int> v0) {
23*9a08a3faSAdam Balogh   v0.begin();
24*9a08a3faSAdam Balogh   v0.end();
25*9a08a3faSAdam Balogh 
26*9a08a3faSAdam Balogh   clang_analyzer_denote(clang_analyzer_container_begin(v0), "$b0");
27*9a08a3faSAdam Balogh   clang_analyzer_denote(clang_analyzer_container_end(v0), "$e0");
28*9a08a3faSAdam Balogh 
29*9a08a3faSAdam Balogh   clang_analyzer_express(clang_analyzer_container_begin(v0)); // expected-warning{{$b0}}
30*9a08a3faSAdam Balogh   clang_analyzer_express(clang_analyzer_container_end(v0)); // expected-warning{{$e0}}
31*9a08a3faSAdam Balogh }
32