121583b73SAdam Balogh // RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,alpha.cplusplus.InvalidatedIterator -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=false %s -verify 221583b73SAdam Balogh // RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,alpha.cplusplus.InvalidatedIterator -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=true -DINLINE=1 %s -verify 32cfbe933SAdam Balogh 42cfbe933SAdam Balogh #include "Inputs/system-header-simulator-cxx.h" 52cfbe933SAdam Balogh 62cfbe933SAdam Balogh void bad_copy_assign_operator_list1(std::list<int> &L1, 72cfbe933SAdam Balogh const std::list<int> &L2) { 82cfbe933SAdam Balogh auto i0 = L1.cbegin(); 92cfbe933SAdam Balogh L1 = L2; 102cfbe933SAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 112cfbe933SAdam Balogh } 122cfbe933SAdam Balogh 132cfbe933SAdam Balogh void bad_copy_assign_operator_vector1(std::vector<int> &V1, 142cfbe933SAdam Balogh const std::vector<int> &V2) { 152cfbe933SAdam Balogh auto i0 = V1.cbegin(); 162cfbe933SAdam Balogh V1 = V2; 172cfbe933SAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 182cfbe933SAdam Balogh } 192cfbe933SAdam Balogh 202cfbe933SAdam Balogh void bad_copy_assign_operator_deque1(std::deque<int> &D1, 212cfbe933SAdam Balogh const std::deque<int> &D2) { 222cfbe933SAdam Balogh auto i0 = D1.cbegin(); 232cfbe933SAdam Balogh D1 = D2; 242cfbe933SAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 252cfbe933SAdam Balogh } 262cfbe933SAdam Balogh 272cfbe933SAdam Balogh void bad_copy_assign_operator_forward_list1(std::forward_list<int> &FL1, 282cfbe933SAdam Balogh const std::forward_list<int> &FL2) { 292cfbe933SAdam Balogh auto i0 = FL1.cbegin(); 302cfbe933SAdam Balogh FL1 = FL2; 312cfbe933SAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 322cfbe933SAdam Balogh } 339a48ba6bSAdam Balogh 34*2e7cb34dSAdam Balogh void bad_assign_list1(std::list<int> &L, int n) { 35*2e7cb34dSAdam Balogh auto i0 = L.cbegin(); 36*2e7cb34dSAdam Balogh L.assign(10, n); 37*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 38*2e7cb34dSAdam Balogh } 39*2e7cb34dSAdam Balogh 40*2e7cb34dSAdam Balogh void bad_assign_vector1(std::vector<int> &V, int n) { 41*2e7cb34dSAdam Balogh auto i0 = V.cbegin(); 42*2e7cb34dSAdam Balogh V.assign(10, n); 43*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 44*2e7cb34dSAdam Balogh } 45*2e7cb34dSAdam Balogh 46*2e7cb34dSAdam Balogh void bad_assign_deque1(std::deque<int> &D, int n) { 47*2e7cb34dSAdam Balogh auto i0 = D.cbegin(); 48*2e7cb34dSAdam Balogh D.assign(10, n); 49*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 50*2e7cb34dSAdam Balogh } 51*2e7cb34dSAdam Balogh 52*2e7cb34dSAdam Balogh void bad_assign_forward_list1(std::forward_list<int> &FL, int n) { 53*2e7cb34dSAdam Balogh auto i0 = FL.cbegin(); 54*2e7cb34dSAdam Balogh FL.assign(10, n); 55*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 56*2e7cb34dSAdam Balogh } 57*2e7cb34dSAdam Balogh 58*2e7cb34dSAdam Balogh void good_clear_list1(std::list<int> &L) { 59*2e7cb34dSAdam Balogh auto i0 = L.cend(); 60*2e7cb34dSAdam Balogh L.clear(); 61*2e7cb34dSAdam Balogh --i0; // no-warning 62*2e7cb34dSAdam Balogh } 63*2e7cb34dSAdam Balogh 64*2e7cb34dSAdam Balogh void bad_clear_list1(std::list<int> &L) { 65*2e7cb34dSAdam Balogh auto i0 = L.cbegin(), i1 = L.cend(); 66*2e7cb34dSAdam Balogh L.clear(); 67*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 68*2e7cb34dSAdam Balogh } 69*2e7cb34dSAdam Balogh 70*2e7cb34dSAdam Balogh void bad_clear_vector1(std::vector<int> &V) { 71*2e7cb34dSAdam Balogh auto i0 = V.cbegin(), i1 = V.cend(); 72*2e7cb34dSAdam Balogh V.clear(); 73*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 74*2e7cb34dSAdam Balogh --i1; // expected-warning{{Invalidated iterator accessed}} 75*2e7cb34dSAdam Balogh } 76*2e7cb34dSAdam Balogh 77*2e7cb34dSAdam Balogh void bad_clear_deque1(std::deque<int> &D) { 78*2e7cb34dSAdam Balogh auto i0 = D.cbegin(), i1 = D.cend(); 79*2e7cb34dSAdam Balogh D.clear(); 80*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 81*2e7cb34dSAdam Balogh --i1; // expected-warning{{Invalidated iterator accessed}} 82*2e7cb34dSAdam Balogh } 83*2e7cb34dSAdam Balogh 849a48ba6bSAdam Balogh void good_push_back_list1(std::list<int> &L, int n) { 859a48ba6bSAdam Balogh auto i0 = L.cbegin(), i1 = L.cend(); 869a48ba6bSAdam Balogh L.push_back(n); 879a48ba6bSAdam Balogh *i0; // no-warning 889a48ba6bSAdam Balogh --i1; // no-warning 899a48ba6bSAdam Balogh } 909a48ba6bSAdam Balogh 919a48ba6bSAdam Balogh void good_push_back_vector1(std::vector<int> &V, int n) { 929a48ba6bSAdam Balogh auto i0 = V.cbegin(), i1 = V.cend(); 939a48ba6bSAdam Balogh V.push_back(n); 949a48ba6bSAdam Balogh *i0; // no-warning 959a48ba6bSAdam Balogh } 969a48ba6bSAdam Balogh 979a48ba6bSAdam Balogh void bad_push_back_vector1(std::vector<int> &V, int n) { 989a48ba6bSAdam Balogh auto i0 = V.cbegin(), i1 = V.cend(); 999a48ba6bSAdam Balogh V.push_back(n); 1009a48ba6bSAdam Balogh --i1; // expected-warning{{Invalidated iterator accessed}} 1019a48ba6bSAdam Balogh } 1029a48ba6bSAdam Balogh 1039a48ba6bSAdam Balogh void bad_push_back_deque1(std::deque<int> &D, int n) { 1049a48ba6bSAdam Balogh auto i0 = D.cbegin(), i1 = D.cend(); 1059a48ba6bSAdam Balogh D.push_back(n); 1069a48ba6bSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 1079a48ba6bSAdam Balogh --i1; // expected-warning{{Invalidated iterator accessed}} 1089a48ba6bSAdam Balogh } 1099a48ba6bSAdam Balogh 1109a48ba6bSAdam Balogh void good_emplace_back_list1(std::list<int> &L, int n) { 1119a48ba6bSAdam Balogh auto i0 = L.cbegin(), i1 = L.cend(); 1129a48ba6bSAdam Balogh L.emplace_back(n); 1139a48ba6bSAdam Balogh *i0; // no-warning 1149a48ba6bSAdam Balogh --i1; // no-warning 1159a48ba6bSAdam Balogh } 1169a48ba6bSAdam Balogh 1179a48ba6bSAdam Balogh void good_emplace_back_vector1(std::vector<int> &V, int n) { 1189a48ba6bSAdam Balogh auto i0 = V.cbegin(), i1 = V.cend(); 1199a48ba6bSAdam Balogh V.emplace_back(n); 1209a48ba6bSAdam Balogh *i0; // no-warning 1219a48ba6bSAdam Balogh } 1229a48ba6bSAdam Balogh 1239a48ba6bSAdam Balogh void bad_emplace_back_vector1(std::vector<int> &V, int n) { 1249a48ba6bSAdam Balogh auto i0 = V.cbegin(), i1 = V.cend(); 1259a48ba6bSAdam Balogh V.emplace_back(n); 1269a48ba6bSAdam Balogh --i1; // expected-warning{{Invalidated iterator accessed}} 1279a48ba6bSAdam Balogh } 1289a48ba6bSAdam Balogh 1299a48ba6bSAdam Balogh void bad_emplace_back_deque1(std::deque<int> &D, int n) { 1309a48ba6bSAdam Balogh auto i0 = D.cbegin(), i1 = D.cend(); 1319a48ba6bSAdam Balogh D.emplace_back(n); 1329a48ba6bSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 1339a48ba6bSAdam Balogh --i1; // expected-warning{{Invalidated iterator accessed}} 1349a48ba6bSAdam Balogh } 1359a48ba6bSAdam Balogh 1369a48ba6bSAdam Balogh void good_pop_back_list1(std::list<int> &L, int n) { 1379a48ba6bSAdam Balogh auto i0 = L.cbegin(), i1 = L.cend(), i2 = i1--; 1389a48ba6bSAdam Balogh L.pop_back(); 1399a48ba6bSAdam Balogh *i0; // no-warning 1409a48ba6bSAdam Balogh *i2; // no-warning 1419a48ba6bSAdam Balogh } 1429a48ba6bSAdam Balogh 1439a48ba6bSAdam Balogh void bad_pop_back_list1(std::list<int> &L, int n) { 1449a48ba6bSAdam Balogh auto i0 = L.cbegin(), i1 = L.cend(), i2 = i1--; 1459a48ba6bSAdam Balogh L.pop_back(); 1469a48ba6bSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 1479a48ba6bSAdam Balogh } 1489a48ba6bSAdam Balogh 1499a48ba6bSAdam Balogh void good_pop_back_vector1(std::vector<int> &V, int n) { 1509a48ba6bSAdam Balogh auto i0 = V.cbegin(), i1 = V.cend(), i2 = i1--; 1519a48ba6bSAdam Balogh V.pop_back(); 1529a48ba6bSAdam Balogh *i0; // no-warning 1539a48ba6bSAdam Balogh } 1549a48ba6bSAdam Balogh 1559a48ba6bSAdam Balogh void bad_pop_back_vector1(std::vector<int> &V, int n) { 1569a48ba6bSAdam Balogh auto i0 = V.cbegin(), i1 = V.cend(), i2 = i1--; 1579a48ba6bSAdam Balogh V.pop_back(); 1589a48ba6bSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 1599a48ba6bSAdam Balogh --i2; // expected-warning{{Invalidated iterator accessed}} 1609a48ba6bSAdam Balogh } 1619a48ba6bSAdam Balogh 1629a48ba6bSAdam Balogh void good_pop_back_deque1(std::deque<int> &D, int n) { 1639a48ba6bSAdam Balogh auto i0 = D.cbegin(), i1 = D.cend(), i2 = i1--; 1649a48ba6bSAdam Balogh D.pop_back(); 1659a48ba6bSAdam Balogh *i0; // no-warning 1669a48ba6bSAdam Balogh } 1679a48ba6bSAdam Balogh 1689a48ba6bSAdam Balogh void bad_pop_back_deque1(std::deque<int> &D, int n) { 1699a48ba6bSAdam Balogh auto i0 = D.cbegin(), i1 = D.cend(), i2 = i1--; 1709a48ba6bSAdam Balogh D.pop_back(); 1719a48ba6bSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 1729a48ba6bSAdam Balogh --i2; // expected-warning{{Invalidated iterator accessed}} 1739a48ba6bSAdam Balogh } 1749a48ba6bSAdam Balogh 1759a48ba6bSAdam Balogh void good_push_front_list1(std::list<int> &L, int n) { 1769a48ba6bSAdam Balogh auto i0 = L.cbegin(), i1 = L.cend(); 1779a48ba6bSAdam Balogh L.push_front(n); 1789a48ba6bSAdam Balogh *i0; // no-warning 1799a48ba6bSAdam Balogh --i1; // no-warning 1809a48ba6bSAdam Balogh } 1819a48ba6bSAdam Balogh 1829a48ba6bSAdam Balogh void bad_push_front_deque1(std::deque<int> &D, int n) { 1839a48ba6bSAdam Balogh auto i0 = D.cbegin(), i1 = D.cend(); 1849a48ba6bSAdam Balogh D.push_front(n); 1859a48ba6bSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 1869a48ba6bSAdam Balogh --i1; // expected-warning{{Invalidated iterator accessed}} 1879a48ba6bSAdam Balogh } 1889a48ba6bSAdam Balogh 1899a48ba6bSAdam Balogh void good_push_front_forward_list1(std::forward_list<int> &FL, int n) { 1909a48ba6bSAdam Balogh auto i0 = FL.cbegin(), i1 = FL.cend(); 1919a48ba6bSAdam Balogh FL.push_front(n); 1929a48ba6bSAdam Balogh *i0; // no-warning 1939a48ba6bSAdam Balogh } 1949a48ba6bSAdam Balogh 1959a48ba6bSAdam Balogh void good_emplace_front_list1(std::list<int> &L, int n) { 1969a48ba6bSAdam Balogh auto i0 = L.cbegin(), i1 = L.cend(); 1979a48ba6bSAdam Balogh L.emplace_front(n); 1989a48ba6bSAdam Balogh *i0; // no-warning 1999a48ba6bSAdam Balogh --i1; // no-warning 2009a48ba6bSAdam Balogh } 2019a48ba6bSAdam Balogh 2029a48ba6bSAdam Balogh void bad_emplace_front_deque1(std::deque<int> &D, int n) { 2039a48ba6bSAdam Balogh auto i0 = D.cbegin(), i1 = D.cend(); 2049a48ba6bSAdam Balogh D.emplace_front(n); 2059a48ba6bSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 2069a48ba6bSAdam Balogh --i1; // expected-warning{{Invalidated iterator accessed}} 2079a48ba6bSAdam Balogh } 2089a48ba6bSAdam Balogh 2099a48ba6bSAdam Balogh void good_emplace_front_forward_list1(std::forward_list<int> &FL, int n) { 2109a48ba6bSAdam Balogh auto i0 = FL.cbegin(), i1 = FL.cend(); 2119a48ba6bSAdam Balogh FL.emplace_front(n); 2129a48ba6bSAdam Balogh *i0; // no-warning 2139a48ba6bSAdam Balogh } 2149a48ba6bSAdam Balogh 2159a48ba6bSAdam Balogh void good_pop_front_list1(std::list<int> &L, int n) { 2169a48ba6bSAdam Balogh auto i1 = L.cbegin(), i0 = i1++; 2179a48ba6bSAdam Balogh L.pop_front(); 2189a48ba6bSAdam Balogh *i1; // no-warning 2199a48ba6bSAdam Balogh } 2209a48ba6bSAdam Balogh 2219a48ba6bSAdam Balogh void bad_pop_front_list1(std::list<int> &L, int n) { 2229a48ba6bSAdam Balogh auto i1 = L.cbegin(), i0 = i1++; 2239a48ba6bSAdam Balogh L.pop_front(); 2249a48ba6bSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 2259a48ba6bSAdam Balogh } 2269a48ba6bSAdam Balogh 2279a48ba6bSAdam Balogh void good_pop_front_deque1(std::deque<int> &D, int n) { 2289a48ba6bSAdam Balogh auto i1 = D.cbegin(), i0 = i1++; 2299a48ba6bSAdam Balogh D.pop_front(); 2309a48ba6bSAdam Balogh *i1; // no-warning 2319a48ba6bSAdam Balogh } 2329a48ba6bSAdam Balogh 2339a48ba6bSAdam Balogh void bad_pop_front_deque1(std::deque<int> &D, int n) { 2349a48ba6bSAdam Balogh auto i1 = D.cbegin(), i0 = i1++; 2359a48ba6bSAdam Balogh D.pop_front(); 2369a48ba6bSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 2379a48ba6bSAdam Balogh } 2389a48ba6bSAdam Balogh 2399a48ba6bSAdam Balogh void good_pop_front_forward_list1(std::forward_list<int> &FL, int n) { 2409a48ba6bSAdam Balogh auto i1 = FL.cbegin(), i0 = i1++; 2419a48ba6bSAdam Balogh FL.pop_front(); 2429a48ba6bSAdam Balogh *i1; // no-warning 2439a48ba6bSAdam Balogh } 2449a48ba6bSAdam Balogh 2459a48ba6bSAdam Balogh void bad_pop_front_forward_list1(std::forward_list<int> &FL, int n) { 2469a48ba6bSAdam Balogh auto i1 = FL.cbegin(), i0 = i1++; 2479a48ba6bSAdam Balogh FL.pop_front(); 2489a48ba6bSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 2499a48ba6bSAdam Balogh } 250*2e7cb34dSAdam Balogh 251*2e7cb34dSAdam Balogh void good_insert_list1(std::list<int> &L, int n) { 252*2e7cb34dSAdam Balogh auto i1 = L.cbegin(), i0 = i1++; 253*2e7cb34dSAdam Balogh L.insert(i1, n); 254*2e7cb34dSAdam Balogh *i0; // no-warning 255*2e7cb34dSAdam Balogh *i1; // no-warning 256*2e7cb34dSAdam Balogh } 257*2e7cb34dSAdam Balogh 258*2e7cb34dSAdam Balogh void good_insert_vector1(std::vector<int> &V, int n) { 259*2e7cb34dSAdam Balogh auto i1 = V.cbegin(), i0 = i1++; 260*2e7cb34dSAdam Balogh V.insert(i1, n); 261*2e7cb34dSAdam Balogh *i0; // no-warning 262*2e7cb34dSAdam Balogh } 263*2e7cb34dSAdam Balogh 264*2e7cb34dSAdam Balogh void bad_insert_vector1(std::vector<int> &V, int n) { 265*2e7cb34dSAdam Balogh auto i1 = V.cbegin(), i0 = i1++; 266*2e7cb34dSAdam Balogh V.insert(i1, n); 267*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 268*2e7cb34dSAdam Balogh } 269*2e7cb34dSAdam Balogh 270*2e7cb34dSAdam Balogh void bad_insert_deque1(std::deque<int> &D, int n) { 271*2e7cb34dSAdam Balogh auto i1 = D.cbegin(), i0 = i1++; 272*2e7cb34dSAdam Balogh D.insert(i1, n); 273*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 274*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 275*2e7cb34dSAdam Balogh } 276*2e7cb34dSAdam Balogh 277*2e7cb34dSAdam Balogh void good_emplace_list1(std::list<int> &L, int n) { 278*2e7cb34dSAdam Balogh auto i1 = L.cbegin(), i0 = i1++; 279*2e7cb34dSAdam Balogh L.emplace(i1, n); 280*2e7cb34dSAdam Balogh *i0; // no-warning 281*2e7cb34dSAdam Balogh *i1; // no-warning 282*2e7cb34dSAdam Balogh } 283*2e7cb34dSAdam Balogh 284*2e7cb34dSAdam Balogh void good_emplace_vector1(std::vector<int> &V, int n) { 285*2e7cb34dSAdam Balogh auto i1 = V.cbegin(), i0 = i1++; 286*2e7cb34dSAdam Balogh V.emplace(i1, n); 287*2e7cb34dSAdam Balogh *i0; // no-warning 288*2e7cb34dSAdam Balogh } 289*2e7cb34dSAdam Balogh 290*2e7cb34dSAdam Balogh void bad_emplace_vector1(std::vector<int> &V, int n) { 291*2e7cb34dSAdam Balogh auto i1 = V.cbegin(), i0 = i1++; 292*2e7cb34dSAdam Balogh V.emplace(i1, n); 293*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 294*2e7cb34dSAdam Balogh } 295*2e7cb34dSAdam Balogh 296*2e7cb34dSAdam Balogh void bad_emplace_deque1(std::deque<int> &D, int n) { 297*2e7cb34dSAdam Balogh auto i1 = D.cbegin(), i0 = i1++; 298*2e7cb34dSAdam Balogh D.emplace(i1, n); 299*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 300*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 301*2e7cb34dSAdam Balogh } 302*2e7cb34dSAdam Balogh 303*2e7cb34dSAdam Balogh void good_erase_list1(std::list<int> &L) { 304*2e7cb34dSAdam Balogh auto i2 = L.cbegin(), i0 = i2++, i1 = i2++; 305*2e7cb34dSAdam Balogh L.erase(i1); 306*2e7cb34dSAdam Balogh *i0; // no-warning 307*2e7cb34dSAdam Balogh *i2; // no-warning 308*2e7cb34dSAdam Balogh } 309*2e7cb34dSAdam Balogh 310*2e7cb34dSAdam Balogh void bad_erase_list1(std::list<int> &L) { 311*2e7cb34dSAdam Balogh auto i0 = L.cbegin(); 312*2e7cb34dSAdam Balogh L.erase(i0); 313*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 314*2e7cb34dSAdam Balogh } 315*2e7cb34dSAdam Balogh 316*2e7cb34dSAdam Balogh void good_erase_vector1(std::vector<int> &V) { 317*2e7cb34dSAdam Balogh auto i2 = V.cbegin(), i0 = i2++, i1 = i2++; 318*2e7cb34dSAdam Balogh V.erase(i1); 319*2e7cb34dSAdam Balogh *i0; // no-warning 320*2e7cb34dSAdam Balogh } 321*2e7cb34dSAdam Balogh 322*2e7cb34dSAdam Balogh void bad_erase_vector1(std::vector<int> &V) { 323*2e7cb34dSAdam Balogh auto i1 = V.cbegin(), i0 = i1++; 324*2e7cb34dSAdam Balogh V.erase(i0); 325*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 326*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 327*2e7cb34dSAdam Balogh } 328*2e7cb34dSAdam Balogh 329*2e7cb34dSAdam Balogh void bad_erase_deque1(std::deque<int> &D) { 330*2e7cb34dSAdam Balogh auto i2 = D.cbegin(), i0 = i2++, i1 = i2++; 331*2e7cb34dSAdam Balogh D.erase(i1); 332*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 333*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 334*2e7cb34dSAdam Balogh *i2; // expected-warning{{Invalidated iterator accessed}} 335*2e7cb34dSAdam Balogh } 336*2e7cb34dSAdam Balogh 337*2e7cb34dSAdam Balogh void good_erase_list2(std::list<int> &L) { 338*2e7cb34dSAdam Balogh auto i3 = L.cbegin(), i0 = i3++, i1 = i3++, i2 = i3++; 339*2e7cb34dSAdam Balogh L.erase(i1, i3); 340*2e7cb34dSAdam Balogh *i0; // no-warning 341*2e7cb34dSAdam Balogh *i3; // no-warning 342*2e7cb34dSAdam Balogh } 343*2e7cb34dSAdam Balogh 344*2e7cb34dSAdam Balogh void bad_erase_list2(std::list<int> &L) { 345*2e7cb34dSAdam Balogh auto i2 = L.cbegin(), i0 = i2++, i1 = i2++; 346*2e7cb34dSAdam Balogh L.erase(i0, i2); 347*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 348*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 349*2e7cb34dSAdam Balogh } 350*2e7cb34dSAdam Balogh 351*2e7cb34dSAdam Balogh void good_erase_vector2(std::vector<int> &V) { 352*2e7cb34dSAdam Balogh auto i3 = V.cbegin(), i0 = i3++, i1 = i3++, i2 = i3++;; 353*2e7cb34dSAdam Balogh V.erase(i1, i3); 354*2e7cb34dSAdam Balogh *i0; // no-warning 355*2e7cb34dSAdam Balogh } 356*2e7cb34dSAdam Balogh 357*2e7cb34dSAdam Balogh void bad_erase_vector2(std::vector<int> &V) { 358*2e7cb34dSAdam Balogh auto i2 = V.cbegin(), i0 = i2++, i1 = i2++; 359*2e7cb34dSAdam Balogh V.erase(i0, i2); 360*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 361*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 362*2e7cb34dSAdam Balogh *i2; // expected-warning{{Invalidated iterator accessed}} 363*2e7cb34dSAdam Balogh } 364*2e7cb34dSAdam Balogh 365*2e7cb34dSAdam Balogh void bad_erase_deque2(std::deque<int> &D) { 366*2e7cb34dSAdam Balogh auto i3 = D.cbegin(), i0 = i3++, i1 = i3++, i2 = i3++; 367*2e7cb34dSAdam Balogh D.erase(i1, i3); 368*2e7cb34dSAdam Balogh *i0; // expected-warning{{Invalidated iterator accessed}} 369*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 370*2e7cb34dSAdam Balogh *i2; // expected-warning{{Invalidated iterator accessed}} 371*2e7cb34dSAdam Balogh *i3; // expected-warning{{Invalidated iterator accessed}} 372*2e7cb34dSAdam Balogh } 373*2e7cb34dSAdam Balogh 374*2e7cb34dSAdam Balogh void good_erase_after_forward_list1(std::forward_list<int> &FL) { 375*2e7cb34dSAdam Balogh auto i2 = FL.cbegin(), i0 = i2++, i1 = i2++; 376*2e7cb34dSAdam Balogh FL.erase_after(i0); 377*2e7cb34dSAdam Balogh *i0; // no-warning 378*2e7cb34dSAdam Balogh *i2; // no-warning 379*2e7cb34dSAdam Balogh } 380*2e7cb34dSAdam Balogh 381*2e7cb34dSAdam Balogh void bad_erase_after_forward_list1(std::forward_list<int> &FL) { 382*2e7cb34dSAdam Balogh auto i1 = FL.cbegin(), i0 = i1++; 383*2e7cb34dSAdam Balogh FL.erase_after(i0); 384*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 385*2e7cb34dSAdam Balogh } 386*2e7cb34dSAdam Balogh 387*2e7cb34dSAdam Balogh void good_erase_after_forward_list2(std::forward_list<int> &FL) { 388*2e7cb34dSAdam Balogh auto i3 = FL.cbegin(), i0 = i3++, i1 = i3++, i2 = i3++; 389*2e7cb34dSAdam Balogh FL.erase_after(i0, i3); 390*2e7cb34dSAdam Balogh *i0; // no-warning 391*2e7cb34dSAdam Balogh *i3; // no-warning 392*2e7cb34dSAdam Balogh } 393*2e7cb34dSAdam Balogh 394*2e7cb34dSAdam Balogh void bad_erase_after_forward_list2(std::forward_list<int> &FL) { 395*2e7cb34dSAdam Balogh auto i3 = FL.cbegin(), i0 = i3++, i1 = i3++, i2 = i3++; 396*2e7cb34dSAdam Balogh FL.erase_after(i0, i3); 397*2e7cb34dSAdam Balogh *i1; // expected-warning{{Invalidated iterator accessed}} 398*2e7cb34dSAdam Balogh *i2; // expected-warning{{Invalidated iterator accessed}} 399*2e7cb34dSAdam Balogh } 400