brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 789d8a2 Raw
44 lines · cpp
1// RUN: %clang_cc1 -Wno-unused-value -Wunsafe-buffer-usage -fsafe-buffer-usage-suggestions -std=c++20 -verify=expected %s2 3namespace std {4inline namespace __1 {5template <class T> class unique_ptr {6public:7  T &operator[](long long i) const;8};9} // namespace __110} // namespace std11 12int get_index() {13  return 4;14}15 16void basic_unique_ptr() {17  std::unique_ptr<int[]> p1;18  int i = 2;19  const int j = 3;20  int k = 0;21 22  p1[0];  // This is allowed23 24  p1[k];  // expected-warning{{direct access using operator[] on std::unique_ptr<T[]> is unsafe due to lack of bounds checking}}25 26  p1[1];  // expected-warning{{direct access using operator[] on std::unique_ptr<T[]> is unsafe due to lack of bounds checking}}27 28  p1[1L];  // expected-warning{{direct access using operator[] on std::unique_ptr<T[]> is unsafe due to lack of bounds checking}}29 30  p1[1LL];  // expected-warning{{direct access using operator[] on std::unique_ptr<T[]> is unsafe due to lack of bounds checking}}31 32  p1[3 * 5];  // expected-warning{{direct access using operator[] on std::unique_ptr<T[]> is unsafe due to lack of bounds checking}}33 34  p1[i];  // expected-warning{{direct access using operator[] on std::unique_ptr<T[]> is unsafe due to lack of bounds checking}}35 36  p1[j];  // expected-warning{{direct access using operator[] on std::unique_ptr<T[]> is unsafe due to lack of bounds checking}}37 38  p1[i + 5]; // expected-warning{{direct access using operator[] on std::unique_ptr<T[]> is unsafe due to lack of bounds checking}}39 40  p1[get_index()];  // expected-warning{{direct access using operator[] on std::unique_ptr<T[]> is unsafe due to lack of bounds checking}}41 42}43 44