469 lines · cpp
1// RUN: %check_clang_tidy %s readability-qualified-auto %t \2// RUN: -config='{CheckOptions: { \3// RUN: readability-qualified-auto.AllowedTypes: "[iI]terator$;my::ns::Ignored1;std::array<.*>::Ignored2;MyIgnoredPtr" \4// RUN: }}'5// RUN: %check_clang_tidy %s readability-qualified-auto %t \6// RUN: -config='{CheckOptions: { \7// RUN: readability-qualified-auto.AllowedTypes: "[iI]terator$;my::ns::Ignored1;std::array<.*>::Ignored2;MyIgnoredPtr", \8// RUN: readability-qualified-auto.IgnoreAliasing: false \9// RUN: }}' -check-suffix=ALIAS -- 10 11namespace typedefs {12typedef int *MyPtr;13typedef int &MyRef;14typedef const int *CMyPtr;15typedef const int &CMyRef;16 17MyPtr getPtr();18MyPtr* getPtrPtr();19MyRef getRef();20CMyPtr getCPtr();21CMyPtr* getCPtrPtr();22CMyRef getCRef();23 24void foo() {25 auto TdNakedPtr = getPtr();26 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto TdNakedPtr' can be declared as 'auto *TdNakedPtr'27 // CHECK-FIXES: auto *TdNakedPtr = getPtr();28 auto TdNakedPtrPtr = getPtrPtr();29 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto TdNakedPtrPtr' can be declared as 'auto *TdNakedPtrPtr'30 // CHECK-FIXES: auto *TdNakedPtrPtr = getPtrPtr();31 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto TdNakedPtrPtr' can be declared as 'auto *TdNakedPtrPtr'32 // CHECK-FIXES-ALIAS: auto *TdNakedPtrPtr = getPtrPtr();33 auto &TdNakedRef = getRef();34 auto TdNakedRefDeref = getRef();35 auto TdNakedCPtr = getCPtr();36 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto TdNakedCPtr' can be declared as 'const auto *TdNakedCPtr'37 // CHECK-FIXES: const auto *TdNakedCPtr = getCPtr();38 auto TdNakedCPtrPtr = getCPtrPtr();39 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto TdNakedCPtrPtr' can be declared as 'auto *TdNakedCPtrPtr'40 // CHECK-FIXES: auto *TdNakedCPtrPtr = getCPtrPtr();41 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto TdNakedCPtrPtr' can be declared as 'auto *TdNakedCPtrPtr'42 // CHECK-FIXES-ALIAS: auto *TdNakedCPtrPtr = getCPtrPtr();43 auto &TdNakedCRef = getCRef();44 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto &TdNakedCRef' can be declared as 'const auto &TdNakedCRef'45 // CHECK-FIXES: const auto &TdNakedCRef = getCRef();46 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto &TdNakedCRef' can be declared as 'const auto &TdNakedCRef'47 // CHECK-FIXES-ALIAS: const auto &TdNakedCRef = getCRef();48 auto TdNakedCRefDeref = getCRef();49}50 51}; // namespace typedefs52 53namespace usings {54using MyPtr = int *;55using MyRef = int &;56using CMyPtr = const int *;57using CMyRef = const int &;58 59MyPtr getPtr();60MyPtr* getPtrPtr();61MyRef getRef();62CMyPtr getCPtr();63CMyRef getCRef();64 65void foo() {66 auto UNakedPtr = getPtr();67 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto UNakedPtr' can be declared as 'auto *UNakedPtr'68 // CHECK-FIXES: auto *UNakedPtr = getPtr();69 auto UNakedPtrPtr = getPtrPtr();70 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto UNakedPtrPtr' can be declared as 'auto *UNakedPtrPtr'71 // CHECK-FIXES: auto *UNakedPtrPtr = getPtrPtr();72 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto UNakedPtrPtr' can be declared as 'auto *UNakedPtrPtr'73 // CHECK-FIXES-ALIAS: auto *UNakedPtrPtr = getPtrPtr();74 auto &UNakedRef = getRef();75 auto UNakedRefDeref = getRef();76 auto UNakedCPtr = getCPtr();77 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto UNakedCPtr' can be declared as 'const auto *UNakedCPtr'78 // CHECK-FIXES: const auto *UNakedCPtr = getCPtr();79 auto &UNakedCRef = getCRef();80 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto &UNakedCRef' can be declared as 'const auto &UNakedCRef'81 // CHECK-FIXES: const auto &UNakedCRef = getCRef();82 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto &UNakedCRef' can be declared as 'const auto &UNakedCRef'83 // CHECK-FIXES-ALIAS: const auto &UNakedCRef = getCRef();84 auto UNakedCRefDeref = getCRef();85}86 87}; // namespace usings88 89int getInt();90int *getIntPtr();91const int *getCIntPtr();92 93void foo() {94 // make sure check disregards named types95 int TypedInt = getInt();96 int *TypedPtr = getIntPtr();97 const int *TypedConstPtr = getCIntPtr();98 int &TypedRef = *getIntPtr();99 const int &TypedConstRef = *getCIntPtr();100 101 // make sure check disregards auto types that aren't pointers or references102 auto AutoInt = getInt();103 104 auto NakedPtr = getIntPtr();105 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto NakedPtr' can be declared as 'auto *NakedPtr'106 // CHECK-FIXES: auto *NakedPtr = getIntPtr();107 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto NakedPtr' can be declared as 'auto *NakedPtr'108 // CHECK-FIXES-ALIAS: auto *NakedPtr = getIntPtr();109 auto NakedCPtr = getCIntPtr();110 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto NakedCPtr' can be declared as 'const auto *NakedCPtr'111 // CHECK-FIXES: const auto *NakedCPtr = getCIntPtr();112 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto NakedCPtr' can be declared as 'const auto *NakedCPtr'113 // CHECK-FIXES-ALIAS: const auto *NakedCPtr = getCIntPtr();114 115 const auto ConstPtr = getIntPtr();116 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'const auto ConstPtr' can be declared as 'auto *const ConstPtr'117 // CHECK-FIXES: auto *const ConstPtr = getIntPtr();118 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'const auto ConstPtr' can be declared as 'auto *const ConstPtr'119 // CHECK-FIXES-ALIAS: auto *const ConstPtr = getIntPtr();120 const auto ConstCPtr = getCIntPtr();121 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'const auto ConstCPtr' can be declared as 'const auto *const ConstCPtr'122 // CHECK-FIXES: const auto *const ConstCPtr = getCIntPtr();123 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'const auto ConstCPtr' can be declared as 'const auto *const ConstCPtr'124 // CHECK-FIXES-ALIAS: const auto *const ConstCPtr = getCIntPtr();125 126 volatile auto VolatilePtr = getIntPtr();127 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'volatile auto VolatilePtr' can be declared as 'auto *volatile VolatilePtr'128 // CHECK-FIXES: auto *volatile VolatilePtr = getIntPtr();129 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'volatile auto VolatilePtr' can be declared as 'auto *volatile VolatilePtr'130 // CHECK-FIXES-ALIAS: auto *volatile VolatilePtr = getIntPtr();131 volatile auto VolatileCPtr = getCIntPtr();132 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'volatile auto VolatileCPtr' can be declared as 'const auto *volatile VolatileCPtr'133 // CHECK-FIXES: const auto *volatile VolatileCPtr = getCIntPtr();134 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'volatile auto VolatileCPtr' can be declared as 'const auto *volatile VolatileCPtr'135 // CHECK-FIXES-ALIAS: const auto *volatile VolatileCPtr = getCIntPtr();136 137 auto *QualPtr = getIntPtr();138 auto *QualCPtr = getCIntPtr();139 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto *QualCPtr' can be declared as 'const auto *QualCPtr'140 // CHECK-FIXES: const auto *QualCPtr = getCIntPtr();141 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto *QualCPtr' can be declared as 'const auto *QualCPtr'142 // CHECK-FIXES-ALIAS: const auto *QualCPtr = getCIntPtr();143 auto *const ConstantQualCPtr = getCIntPtr();144 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto *const ConstantQualCPtr' can be declared as 'const auto *const ConstantQualCPtr'145 // CHECK-FIXES: const auto *const ConstantQualCPtr = getCIntPtr();146 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto *const ConstantQualCPtr' can be declared as 'const auto *const ConstantQualCPtr'147 // CHECK-FIXES-ALIAS: const auto *const ConstantQualCPtr = getCIntPtr();148 auto *volatile VolatileQualCPtr = getCIntPtr();149 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto *volatile VolatileQualCPtr' can be declared as 'const auto *volatile VolatileQualCPtr'150 // CHECK-FIXES: const auto *volatile VolatileQualCPtr = getCIntPtr();151 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto *volatile VolatileQualCPtr' can be declared as 'const auto *volatile VolatileQualCPtr'152 // CHECK-FIXES-ALIAS: const auto *volatile VolatileQualCPtr = getCIntPtr();153 const auto *ConstQualCPtr = getCIntPtr();154 155 auto &Ref = *getIntPtr();156 auto &CRef = *getCIntPtr();157 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto &CRef' can be declared as 'const auto &CRef'158 // CHECK-FIXES: const auto &CRef = *getCIntPtr();159 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto &CRef' can be declared as 'const auto &CRef'160 // CHECK-FIXES-ALIAS: const auto &CRef = *getCIntPtr();161 const auto &ConstCRef = *getCIntPtr();162 163 if (auto X = getCIntPtr()) {164 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: 'auto X' can be declared as 'const auto *X'165 // CHECK-FIXES: if (const auto *X = getCIntPtr()) {166 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:7: warning: 'auto X' can be declared as 'const auto *X'167 // CHECK-FIXES-ALIAS: if (const auto *X = getCIntPtr()) {168 }169}170 171void macroTest() {172#define _AUTO auto173#define _CONST const174 _AUTO AutoMACROPtr = getIntPtr();175 const _AUTO ConstAutoMacroPtr = getIntPtr();176 _CONST _AUTO ConstMacroAutoMacroPtr = getIntPtr();177 _CONST auto ConstMacroAutoPtr = getIntPtr();178#undef _AUTO179#undef _CONST180}181 182namespace std {183template <typename T>184class vector { // dummy impl185 T _data[1];186 187public:188 T *begin() { return _data; }189 const T *begin() const { return _data; }190 T *end() { return &_data[1]; }191 const T *end() const { return &_data[1]; }192};193} // namespace std194 195void change(int &);196void observe(const int &);197 198void loopRef(std::vector<int> &Mutate, const std::vector<int> &Constant) {199 for (auto &Data : Mutate) {200 change(Data);201 }202 for (auto &Data : Constant) {203 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: 'auto &Data' can be declared as 'const auto &Data'204 // CHECK-FIXES: for (const auto &Data : Constant) {205 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:8: warning: 'auto &Data' can be declared as 'const auto &Data'206 // CHECK-FIXES-ALIAS: for (const auto &Data : Constant) {207 observe(Data);208 }209}210 211void loopPtr(const std::vector<int *> &Mutate, const std::vector<const int *> &Constant) {212 for (auto Data : Mutate) {213 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: 'auto Data' can be declared as 'auto *Data'214 // CHECK-FIXES: for (auto *Data : Mutate) {215 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:8: warning: 'auto Data' can be declared as 'auto *Data'216 // CHECK-FIXES-ALIAS: for (auto *Data : Mutate) {217 change(*Data);218 }219 for (auto Data : Constant) {220 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: 'auto Data' can be declared as 'const auto *Data'221 // CHECK-FIXES: for (const auto *Data : Constant) {222 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:8: warning: 'auto Data' can be declared as 'const auto *Data'223 // CHECK-FIXES-ALIAS: for (const auto *Data : Constant) {224 observe(*Data);225 }226}227 228template <typename T>229void tempLoopPtr(std::vector<T *> &MutateTemplate, std::vector<const T *> &ConstantTemplate) {230 for (auto Data : MutateTemplate) {231 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: 'auto Data' can be declared as 'auto *Data'232 // CHECK-FIXES: for (auto *Data : MutateTemplate) {233 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:8: warning: 'auto Data' can be declared as 'auto *Data'234 // CHECK-FIXES-ALIAS: for (auto *Data : MutateTemplate) {235 change(*Data);236 }237 //FixMe238 for (auto Data : ConstantTemplate) {239 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: 'auto Data' can be declared as 'const auto *Data'240 // CHECK-FIXES: for (const auto *Data : ConstantTemplate) {241 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:8: warning: 'auto Data' can be declared as 'const auto *Data'242 // CHECK-FIXES-ALIAS: for (const auto *Data : ConstantTemplate) {243 observe(*Data);244 }245}246 247template <typename T>248class TemplateLoopPtr {249public:250 void operator()(const std::vector<T *> &MClassTemplate, const std::vector<const T *> &CClassTemplate) {251 for (auto Data : MClassTemplate) {252 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: 'auto Data' can be declared as 'auto *Data'253 // CHECK-FIXES: for (auto *Data : MClassTemplate) {254 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:10: warning: 'auto Data' can be declared as 'auto *Data'255 // CHECK-FIXES-ALIAS: for (auto *Data : MClassTemplate) {256 change(*Data);257 }258 //FixMe259 for (auto Data : CClassTemplate) {260 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: 'auto Data' can be declared as 'const auto *Data'261 // CHECK-FIXES: for (const auto *Data : CClassTemplate) {262 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:10: warning: 'auto Data' can be declared as 'const auto *Data'263 // CHECK-FIXES-ALIAS: for (const auto *Data : CClassTemplate) {264 observe(*Data);265 }266 }267};268 269void bar() {270 std::vector<int> Vec;271 std::vector<int *> PtrVec;272 std::vector<const int *> CPtrVec;273 loopRef(Vec, Vec);274 loopPtr(PtrVec, CPtrVec);275 tempLoopPtr(PtrVec, CPtrVec);276 TemplateLoopPtr<int>()(PtrVec, CPtrVec);277}278 279typedef int *(*functionRetPtr)();280typedef int (*functionRetVal)();281 282functionRetPtr getPtrFunction();283functionRetVal getValFunction();284 285void baz() {286 auto MyFunctionPtr = getPtrFunction();287 // CHECK-MESSAGES-NOT: :[[@LINE-1]]:3: warning: 'auto MyFunctionPtr' can be declared as 'auto *MyFunctionPtr'288 // CHECK-FIXES-NOT: auto *MyFunctionPtr = getPtrFunction();289 // CHECK-MESSAGES-NOT-ALIAS: :[[@LINE-1]]:3: warning: 'auto MyFunctionPtr' can be declared as 'auto *MyFunctionPtr'290 // CHECK-FIXES-NOT-ALIAS: auto *MyFunctionPtr = getPtrFunction();291 auto MyFunctionVal = getValFunction();292 // CHECK-MESSAGES-NOT: :[[@LINE-1]]:3: warning: 'auto MyFunctionVal' can be declared as 'auto *MyFunctionVal'293 // CHECK-FIXES-NOT: auto *MyFunctionVal = getValFunction();294 // CHECK-MESSAGES-NOT-ALIAS: :[[@LINE-3]]:3: warning: 'auto MyFunctionVal' can be declared as 'auto *MyFunctionVal'295 // CHECK-FIXES-NOT-ALIAS: auto *MyFunctionVal = getValFunction();296 297 auto LambdaTest = [] { return 0; };298 // CHECK-MESSAGES-NOT: :[[@LINE-1]]:3: warning: 'auto LambdaTest' can be declared as 'auto *LambdaTest'299 // CHECK-FIXES-NOT: auto *LambdaTest = [] { return 0; };300 // CHECK-MESSAGES-NOT-ALIAS: :[[@LINE-3]]:3: warning: 'auto LambdaTest' can be declared as 'auto *LambdaTest'301 // CHECK-FIXES-NOT-ALIAS: auto *LambdaTest = [] { return 0; };302 303 auto LambdaTest2 = +[] { return 0; };304 // CHECK-MESSAGES-NOT: :[[@LINE-1]]:3: warning: 'auto LambdaTest2' can be declared as 'auto *LambdaTest2'305 // CHECK-FIXES-NOT: auto *LambdaTest2 = +[] { return 0; };306 // CHECK-MESSAGES-NOT-ALIAS: :[[@LINE-3]]:3: warning: 'auto LambdaTest2' can be declared as 'auto *LambdaTest2'307 // CHECK-FIXES-NOT-ALIAS: auto *LambdaTest2 = +[] { return 0; };308 309 auto MyFunctionRef = *getPtrFunction();310 // CHECK-MESSAGES-NOT: :[[@LINE-1]]:3: warning: 'auto MyFunctionRef' can be declared as 'auto *MyFunctionRef'311 // CHECK-FIXES-NOT: auto *MyFunctionRef = *getPtrFunction();312 // CHECK-MESSAGES-NOT-ALIAS: :[[@LINE-3]]:3: warning: 'auto MyFunctionRef' can be declared as 'auto *MyFunctionRef'313 // CHECK-FIXES-NOT-ALIAS: auto *MyFunctionRef = *getPtrFunction();314 315 auto &MyFunctionRef2 = *getPtrFunction();316}317 318namespace std {319 320template<typename T, int N>321struct array {322 typedef T value_type;323 324 typedef value_type* iterator;325 typedef value_type* Iterator;326 using using_iterator = T*;327 typedef const value_type* const_iterator;328 typedef const value_type* constIterator;329 330 struct Ignored2 {};331 using NotIgnored2 = Ignored2;332 333 iterator begin() { return nullptr; }334 const_iterator begin() const { return nullptr; }335 iterator end() { return nullptr; }336 const_iterator end() const { return nullptr; }337};338 339struct Iterator {};340 341struct Ignored2 {}; // should not be ignored342 343} // namespace std344 345typedef std::Iterator iterator;346 347namespace my {348namespace ns {349 350struct Ignored1 {};351 352using NotIgnored1 = Ignored1;353typedef Ignored1 NotIgnored2;354 355} // namespace ns356 357struct Ignored1 {}; // should not be ignored358 359} // namespace my360 361typedef int *MyIgnoredPtr;362MyIgnoredPtr getIgnoredPtr();363 364void ignored_types() {365 auto ignored_ptr = getIgnoredPtr();366 // CHECK-MESSAGES-NOT: warning: 'auto ignored_ptr' can be declared as 'auto *ignored_ptr'367 // CHECK-FIXES-NOT: auto *ignored_ptr = getIgnoredPtr();368 369 std::array<int, 4> arr;370 std::array<int, 4> carr;371 372 auto it1 = arr.begin();373 // CHECK-MESSAGES-NOT: warning: 'auto it' can be declared as 'auto *it'374 // CHECK-FIXES-NOT: auto *it = vec.it_begin();375 376 auto it2 = carr.begin();377 // CHECK-MESSAGES-NOT: warning: 'auto it2' can be declared as 'auto *it2'378 // CHECK-FIXES-NOT: auto *it2 = carr.begin();379 380 auto it3 = std::array<int, 4>::iterator{};381 // CHECK-MESSAGES-NOT: warning: 'auto it3' can be declared as 'auto *it3'382 // CHECK-FIXES-NOT: auto *it3 = std::array<int, 4>::iterator{};383 384 auto it4 = std::array<int, 4>::Iterator{};385 // CHECK-MESSAGES-NOT: warning: 'auto it4' can be declared as 'auto *it4'386 // CHECK-FIXES-NOT: auto *it4 = std::array<int, 4>::Iterator{};387 388 auto it5 = std::array<int, 4>::using_iterator{};389 // CHECK-MESSAGES-NOT: warning: 'auto it5' can be declared as 'auto *it5'390 // CHECK-FIXES-NOT: auto *it5 = std::array<int, 4>::using_iterator{};391 392 auto it6 = std::array<int, 4>::const_iterator{};393 // CHECK-MESSAGES-NOT: warning: 'auto it6' can be declared as 'auto *it6'394 // CHECK-FIXES-NOT: auto *it6 = std::array<int, 4>::const_iterator{};395 396 auto it7 = std::array<int, 4>::constIterator{};397 // CHECK-MESSAGES-NOT: warning: 'auto it7' can be declared as 'auto *it7'398 // CHECK-FIXES-NOT: auto *it7 = std::array<int, 4>::constIterator{};399 400 auto it8 = new std::Iterator();401 // CHECK-MESSAGES-NOT: warning: 'auto it8' can be declared as 'auto *it8'402 // CHECK-FIXES-NOT: auto *it8 = new std::Iterator();403 404 auto it9 = new iterator();405 // CHECK-MESSAGES-NOT: warning: 'auto it9' can be declared as 'auto *it9'406 // CHECK-FIXES-NOT: auto *it9 = new iterator();407 408 auto arr_ignored2 = new std::array<int, 4>::Ignored2();409 // CHECK-MESSAGES-NOT: warning: 'auto arr_ignored2' can be declared as 'auto *arr_ignored2'410 // CHECK-FIXES-NOT: auto *arr_ignored2 = new std::array<int, 4>::Ignored2();411 412 auto arr_not_ignored2 = new std::array<int, 4>::NotIgnored2();413 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto arr_not_ignored2' can be declared as 'auto *arr_not_ignored2'414 // CHECK-FIXES: auto *arr_not_ignored2 = new std::array<int, 4>::NotIgnored2();415 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto arr_not_ignored2' can be declared as 'auto *arr_not_ignored2'416 // CHECK-FIXES-ALIAS: auto *arr_not_ignored2 = new std::array<int, 4>::NotIgnored2();417 418 auto not_ignored2 = new std::Ignored2();419 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto not_ignored2' can be declared as 'auto *not_ignored2'420 // CHECK-FIXES: auto *not_ignored2 = new std::Ignored2();421 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto not_ignored2' can be declared as 'auto *not_ignored2'422 // CHECK-FIXES-ALIAS: auto *not_ignored2 = new std::Ignored2();423 424 auto ignored1 = new my::ns::Ignored1();425 // CHECK-MESSAGES-NOT: warning: 'auto ignored1' can be declared as 'auto *ignored1'426 // CHECK-FIXES-NOT: auto *ignored1 = new my::ns::Ignored1();427 428 auto not_ignored1 = new my::ns::NotIgnored1();429 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto not_ignored1' can be declared as 'auto *not_ignored1'430 // CHECK-FIXES: auto *not_ignored1 = new my::ns::NotIgnored1();431 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto not_ignored1' can be declared as 'auto *not_ignored1'432 // CHECK-FIXES-ALIAS: auto *not_ignored1 = new my::ns::NotIgnored1();433 434 auto not2_ignored1 = new my::ns::NotIgnored2();435 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto not2_ignored1' can be declared as 'auto *not2_ignored1'436 // CHECK-FIXES: auto *not2_ignored1 = new my::ns::NotIgnored2();437 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto not2_ignored1' can be declared as 'auto *not2_ignored1'438 // CHECK-FIXES-ALIAS: auto *not2_ignored1 = new my::ns::NotIgnored2();439 440 auto not3_ignored1 = new my::Ignored1();441 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'auto not3_ignored1' can be declared as 'auto *not3_ignored1'442 // CHECK-FIXES: auto *not3_ignored1 = new my::Ignored1();443 // CHECK-MESSAGES-ALIAS: :[[@LINE-3]]:3: warning: 'auto not3_ignored1' can be declared as 'auto *not3_ignored1'444 // CHECK-FIXES-ALIAS: auto *not3_ignored1 = new my::Ignored1();445}446 447template <typename T>448void ignored_types_template(std::array<T, 4> arr, const std::array<T, 4>& carr) {449 auto it1 = arr.begin();450 // CHECK-MESSAGES-NOT: warning: 'auto it' can be declared as 'auto *it'451 // CHECK-FIXES-NOT: auto *it = arr.it_begin();452 453 auto it2 = carr.begin();454 // CHECK-MESSAGES-NOT: warning: 'auto it2' can be declared as 'auto *it2'455 // CHECK-FIXES-NOT: auto *it2 = carr.begin();456 457 for (auto Data : arr) {458 // CHECK-MESSAGES-NOT: warning: 'auto Data' can be declared as 'auto *Data'459 // CHECK-FIXES-NOT: for (auto *Data : MClassTemplate) {460 change(*Data);461 }462 463 for (auto Data : carr) {464 // CHECK-MESSAGES-NOT: warning: 'auto Data' can be declared as 'const auto *Data'465 // CHECK-FIXES-NOT: for (const auto *Data : MClassTemplate) {466 change(*Data);467 }468}469