blob: 00816c80c6619b454d2f6092c79f327a92a36eb4 [file] [log] [blame]
Adam Balogh0f88cae2019-11-08 08:56:31 +01001// RUN: %clang_analyze_cc1 -std=c++11\
2// RUN: -analyzer-checker=core,cplusplus\
3// RUN: -analyzer-checker=debug.DebugIteratorModeling,debug.ExprInspection\
4// RUN: -analyzer-config aggressive-binary-operation-simplification=true\
5// RUN: -analyzer-config c++-container-inlining=false %s -verify
6
7// RUN: %clang_analyze_cc1 -std=c++11\
8// RUN: -analyzer-checker=core,cplusplus\
9// RUN: -analyzer-checker=debug.DebugIteratorModeling,debug.ExprInspection\
10// RUN: -analyzer-config aggressive-binary-operation-simplification=true\
11// RUN: -analyzer-config c++-container-inlining=true -DINLINE=1 %s -verify
12
13#include "Inputs/system-header-simulator-cxx.h"
14
15template <typename Container>
16long clang_analyzer_container_begin(const Container&);
17template <typename Container>
18long clang_analyzer_container_end(const Container&);
19template <typename Iterator>
20long clang_analyzer_iterator_position(const Iterator&);
21template <typename Iterator>
22void* clang_analyzer_iterator_container(const Iterator&);
23template <typename Iterator>
24bool clang_analyzer_iterator_validity(const Iterator&);
25void clang_analyzer_denote(long, const char*);
26void clang_analyzer_express(long);
27void clang_analyzer_dump(const void*);
28void clang_analyzer_eval(bool);
29
30void iterator_position(const std::vector<int> v0) {
31 auto b0 = v0.begin(), e0 = v0.end();
32
33 clang_analyzer_denote(clang_analyzer_iterator_position(b0), "$b0");
34 clang_analyzer_denote(clang_analyzer_iterator_position(e0), "$e0");
35
36 clang_analyzer_express(clang_analyzer_iterator_position(b0)); // expected-warning{{$b0}}
37 clang_analyzer_express(clang_analyzer_iterator_position(e0)); // expected-warning{{$e0}}
38
39 clang_analyzer_express(clang_analyzer_container_begin(v0)); // expected-warning{{$b0}}
40 clang_analyzer_express(clang_analyzer_container_end(v0)); // expected-warning{{$e0}}
41
42 ++b0;
43
44 clang_analyzer_express(clang_analyzer_iterator_position(b0)); // expected-warning{{$b0 + 1}}
45}
46
47void iterator_container(const std::vector<int> v0) {
48 auto b0 = v0.begin();
49
50 clang_analyzer_dump(&v0); //expected-warning{{&v0}}
51 clang_analyzer_eval(clang_analyzer_iterator_container(b0) == &v0); // expected-warning{{TRUE}}
52}
53
54void iterator_validity(std::vector<int> v0) {
55 auto b0 = v0.begin();
56 clang_analyzer_eval(clang_analyzer_iterator_validity(b0)); //expected-warning{{TRUE}}
57
58 v0.clear();
59
60 clang_analyzer_eval(clang_analyzer_iterator_validity(b0)); //expected-warning{{FALSE}}
61}