1*89a1d03eSRichard // RUN: %check_clang_tidy %s readability-qualified-auto %t -- -- -std=c++20 2*89a1d03eSRichard namespace std { 3*89a1d03eSRichard template <typename T> 4*89a1d03eSRichard class vector { // dummy impl 5*89a1d03eSRichard T _data[1]; 6*89a1d03eSRichard 7*89a1d03eSRichard public: begin()8*89a1d03eSRichard T *begin() { return _data; } begin() const9*89a1d03eSRichard const T *begin() const { return _data; } end()10*89a1d03eSRichard T *end() { return &_data[1]; } end() const11*89a1d03eSRichard const T *end() const { return &_data[1]; } size() const12*89a1d03eSRichard unsigned size() const { return 0; } 13*89a1d03eSRichard }; 14*89a1d03eSRichard } // namespace std 15*89a1d03eSRichard 16*89a1d03eSRichard std::vector<int> *getVec(); 17*89a1d03eSRichard const std::vector<int> *getCVec(); foo()18*89a1d03eSRichardvoid foo() { 19*89a1d03eSRichard if (auto X = getVec(); X->size() > 0) { 20*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: 'auto X' can be declared as 'auto *X' 21*89a1d03eSRichard // CHECK-FIXES: {{^}} if (auto *X = getVec(); X->size() > 0) { 22*89a1d03eSRichard } 23*89a1d03eSRichard switch (auto X = getVec(); X->size()) { 24*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: 'auto X' can be declared as 'auto *X' 25*89a1d03eSRichard // CHECK-FIXES: {{^}} switch (auto *X = getVec(); X->size()) { 26*89a1d03eSRichard default: 27*89a1d03eSRichard break; 28*89a1d03eSRichard } 29*89a1d03eSRichard for (auto X = getVec(); auto Xi : *X) { 30*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: 'auto X' can be declared as 'auto *X' 31*89a1d03eSRichard // CHECK-FIXES: {{^}} for (auto *X = getVec(); auto Xi : *X) { 32*89a1d03eSRichard } 33*89a1d03eSRichard } bar()34*89a1d03eSRichardvoid bar() { 35*89a1d03eSRichard if (auto X = getCVec(); X->size() > 0) { 36*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: 'auto X' can be declared as 'const auto *X' 37*89a1d03eSRichard // CHECK-FIXES: {{^}} if (const auto *X = getCVec(); X->size() > 0) { 38*89a1d03eSRichard } 39*89a1d03eSRichard switch (auto X = getCVec(); X->size()) { 40*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: 'auto X' can be declared as 'const auto *X' 41*89a1d03eSRichard // CHECK-FIXES: {{^}} switch (const auto *X = getCVec(); X->size()) { 42*89a1d03eSRichard default: 43*89a1d03eSRichard break; 44*89a1d03eSRichard } 45*89a1d03eSRichard for (auto X = getCVec(); auto Xi : *X) { 46*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: 'auto X' can be declared as 'const auto *X' 47*89a1d03eSRichard // CHECK-FIXES: {{^}} for (const auto *X = getCVec(); auto Xi : *X) { 48*89a1d03eSRichard } 49*89a1d03eSRichard } 50