// RUN: %clang_cc1 -Wno-unused-value -Wunsafe-buffer-usage -fsafe-buffer-usage-suggestions -std=c++20 -verify=expected %s namespace std { inline namespace __1 { template class unique_ptr { public: T &operator[](long long i) const; }; } // namespace __1 } // namespace std int get_index() { return 4; } void basic_unique_ptr() { std::unique_ptr p1; int i = 2; const int j = 3; int k = 0; p1[0]; // This is allowed p1[k]; // expected-warning{{direct access using operator[] on std::unique_ptr is unsafe due to lack of bounds checking}} p1[1]; // expected-warning{{direct access using operator[] on std::unique_ptr is unsafe due to lack of bounds checking}} p1[1L]; // expected-warning{{direct access using operator[] on std::unique_ptr is unsafe due to lack of bounds checking}} p1[1LL]; // expected-warning{{direct access using operator[] on std::unique_ptr is unsafe due to lack of bounds checking}} p1[3 * 5]; // expected-warning{{direct access using operator[] on std::unique_ptr is unsafe due to lack of bounds checking}} p1[i]; // expected-warning{{direct access using operator[] on std::unique_ptr is unsafe due to lack of bounds checking}} p1[j]; // expected-warning{{direct access using operator[] on std::unique_ptr is unsafe due to lack of bounds checking}} p1[i + 5]; // expected-warning{{direct access using operator[] on std::unique_ptr is unsafe due to lack of bounds checking}} p1[get_index()]; // expected-warning{{direct access using operator[] on std::unique_ptr is unsafe due to lack of bounds checking}} }