xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/readability/qualified-auto-cxx20.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
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*89a1d03eSRichard void 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*89a1d03eSRichard void 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