diff options
Diffstat (limited to 'clang/test/Analysis/invalidated-iterator.cpp')
-rw-r--r-- | clang/test/Analysis/invalidated-iterator.cpp | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/clang/test/Analysis/invalidated-iterator.cpp b/clang/test/Analysis/invalidated-iterator.cpp index 0beb272ce54..1151838bb84 100644 --- a/clang/test/Analysis/invalidated-iterator.cpp +++ b/clang/test/Analysis/invalidated-iterator.cpp @@ -31,6 +31,56 @@ void bad_copy_assign_operator_forward_list1(std::forward_list<int> &FL1, *i0; // expected-warning{{Invalidated iterator accessed}} } +void bad_assign_list1(std::list<int> &L, int n) { + auto i0 = L.cbegin(); + L.assign(10, n); + *i0; // expected-warning{{Invalidated iterator accessed}} +} + +void bad_assign_vector1(std::vector<int> &V, int n) { + auto i0 = V.cbegin(); + V.assign(10, n); + *i0; // expected-warning{{Invalidated iterator accessed}} +} + +void bad_assign_deque1(std::deque<int> &D, int n) { + auto i0 = D.cbegin(); + D.assign(10, n); + *i0; // expected-warning{{Invalidated iterator accessed}} +} + +void bad_assign_forward_list1(std::forward_list<int> &FL, int n) { + auto i0 = FL.cbegin(); + FL.assign(10, n); + *i0; // expected-warning{{Invalidated iterator accessed}} +} + +void good_clear_list1(std::list<int> &L) { + auto i0 = L.cend(); + L.clear(); + --i0; // no-warning +} + +void bad_clear_list1(std::list<int> &L) { + auto i0 = L.cbegin(), i1 = L.cend(); + L.clear(); + *i0; // expected-warning{{Invalidated iterator accessed}} +} + +void bad_clear_vector1(std::vector<int> &V) { + auto i0 = V.cbegin(), i1 = V.cend(); + V.clear(); + *i0; // expected-warning{{Invalidated iterator accessed}} + --i1; // expected-warning{{Invalidated iterator accessed}} +} + +void bad_clear_deque1(std::deque<int> &D) { + auto i0 = D.cbegin(), i1 = D.cend(); + D.clear(); + *i0; // expected-warning{{Invalidated iterator accessed}} + --i1; // expected-warning{{Invalidated iterator accessed}} +} + void good_push_back_list1(std::list<int> &L, int n) { auto i0 = L.cbegin(), i1 = L.cend(); L.push_back(n); @@ -197,3 +247,153 @@ void bad_pop_front_forward_list1(std::forward_list<int> &FL, int n) { FL.pop_front(); *i0; // expected-warning{{Invalidated iterator accessed}} } + +void good_insert_list1(std::list<int> &L, int n) { + auto i1 = L.cbegin(), i0 = i1++; + L.insert(i1, n); + *i0; // no-warning + *i1; // no-warning +} + +void good_insert_vector1(std::vector<int> &V, int n) { + auto i1 = V.cbegin(), i0 = i1++; + V.insert(i1, n); + *i0; // no-warning +} + +void bad_insert_vector1(std::vector<int> &V, int n) { + auto i1 = V.cbegin(), i0 = i1++; + V.insert(i1, n); + *i1; // expected-warning{{Invalidated iterator accessed}} +} + +void bad_insert_deque1(std::deque<int> &D, int n) { + auto i1 = D.cbegin(), i0 = i1++; + D.insert(i1, n); + *i0; // expected-warning{{Invalidated iterator accessed}} + *i1; // expected-warning{{Invalidated iterator accessed}} +} + +void good_emplace_list1(std::list<int> &L, int n) { + auto i1 = L.cbegin(), i0 = i1++; + L.emplace(i1, n); + *i0; // no-warning + *i1; // no-warning +} + +void good_emplace_vector1(std::vector<int> &V, int n) { + auto i1 = V.cbegin(), i0 = i1++; + V.emplace(i1, n); + *i0; // no-warning +} + +void bad_emplace_vector1(std::vector<int> &V, int n) { + auto i1 = V.cbegin(), i0 = i1++; + V.emplace(i1, n); + *i1; // expected-warning{{Invalidated iterator accessed}} +} + +void bad_emplace_deque1(std::deque<int> &D, int n) { + auto i1 = D.cbegin(), i0 = i1++; + D.emplace(i1, n); + *i0; // expected-warning{{Invalidated iterator accessed}} + *i1; // expected-warning{{Invalidated iterator accessed}} +} + +void good_erase_list1(std::list<int> &L) { + auto i2 = L.cbegin(), i0 = i2++, i1 = i2++; + L.erase(i1); + *i0; // no-warning + *i2; // no-warning +} + +void bad_erase_list1(std::list<int> &L) { + auto i0 = L.cbegin(); + L.erase(i0); + *i0; // expected-warning{{Invalidated iterator accessed}} +} + +void good_erase_vector1(std::vector<int> &V) { + auto i2 = V.cbegin(), i0 = i2++, i1 = i2++; + V.erase(i1); + *i0; // no-warning +} + +void bad_erase_vector1(std::vector<int> &V) { + auto i1 = V.cbegin(), i0 = i1++; + V.erase(i0); + *i0; // expected-warning{{Invalidated iterator accessed}} + *i1; // expected-warning{{Invalidated iterator accessed}} +} + +void bad_erase_deque1(std::deque<int> &D) { + auto i2 = D.cbegin(), i0 = i2++, i1 = i2++; + D.erase(i1); + *i0; // expected-warning{{Invalidated iterator accessed}} + *i1; // expected-warning{{Invalidated iterator accessed}} + *i2; // expected-warning{{Invalidated iterator accessed}} +} + +void good_erase_list2(std::list<int> &L) { + auto i3 = L.cbegin(), i0 = i3++, i1 = i3++, i2 = i3++; + L.erase(i1, i3); + *i0; // no-warning + *i3; // no-warning +} + +void bad_erase_list2(std::list<int> &L) { + auto i2 = L.cbegin(), i0 = i2++, i1 = i2++; + L.erase(i0, i2); + *i0; // expected-warning{{Invalidated iterator accessed}} + *i1; // expected-warning{{Invalidated iterator accessed}} +} + +void good_erase_vector2(std::vector<int> &V) { + auto i3 = V.cbegin(), i0 = i3++, i1 = i3++, i2 = i3++;; + V.erase(i1, i3); + *i0; // no-warning +} + +void bad_erase_vector2(std::vector<int> &V) { + auto i2 = V.cbegin(), i0 = i2++, i1 = i2++; + V.erase(i0, i2); + *i0; // expected-warning{{Invalidated iterator accessed}} + *i1; // expected-warning{{Invalidated iterator accessed}} + *i2; // expected-warning{{Invalidated iterator accessed}} +} + +void bad_erase_deque2(std::deque<int> &D) { + auto i3 = D.cbegin(), i0 = i3++, i1 = i3++, i2 = i3++; + D.erase(i1, i3); + *i0; // expected-warning{{Invalidated iterator accessed}} + *i1; // expected-warning{{Invalidated iterator accessed}} + *i2; // expected-warning{{Invalidated iterator accessed}} + *i3; // expected-warning{{Invalidated iterator accessed}} +} + +void good_erase_after_forward_list1(std::forward_list<int> &FL) { + auto i2 = FL.cbegin(), i0 = i2++, i1 = i2++; + FL.erase_after(i0); + *i0; // no-warning + *i2; // no-warning +} + +void bad_erase_after_forward_list1(std::forward_list<int> &FL) { + auto i1 = FL.cbegin(), i0 = i1++; + FL.erase_after(i0); + *i1; // expected-warning{{Invalidated iterator accessed}} +} + +void good_erase_after_forward_list2(std::forward_list<int> &FL) { + auto i3 = FL.cbegin(), i0 = i3++, i1 = i3++, i2 = i3++; + FL.erase_after(i0, i3); + *i0; // no-warning + *i3; // no-warning +} + +void bad_erase_after_forward_list2(std::forward_list<int> &FL) { + auto i3 = FL.cbegin(), i0 = i3++, i1 = i3++, i2 = i3++; + FL.erase_after(i0, i3); + *i1; // expected-warning{{Invalidated iterator accessed}} + *i2; // expected-warning{{Invalidated iterator accessed}} +} |