| 1 | // RUN: %check_clang_tidy --match-partial-fixes -check-suffix=0-0 %s modernize-use-auto %t -- -config="{CheckOptions: {modernize-use-auto.RemoveStars: false, modernize-use-auto.MinTypeNameLength: 0}}" -- -frtti |
| 2 | // RUN: %check_clang_tidy --match-partial-fixes -check-suffix=0-8 %s modernize-use-auto %t -- -config="{CheckOptions: {modernize-use-auto.RemoveStars: false, modernize-use-auto.MinTypeNameLength: 8}}" -- -frtti |
| 3 | // RUN: %check_clang_tidy --match-partial-fixes -check-suffix=1-0 %s modernize-use-auto %t -- -config="{CheckOptions: {modernize-use-auto.RemoveStars: true, modernize-use-auto.MinTypeNameLength: 0}}" -- -frtti |
| 4 | // RUN: %check_clang_tidy --match-partial-fixes -check-suffix=1-8 %s modernize-use-auto %t -- -config="{CheckOptions: {modernize-use-auto.RemoveStars: true, modernize-use-auto.MinTypeNameLength: 8}}" -- -frtti |
| 5 | |
| 6 | template <class T> extern T foo(); |
| 7 | template <class T> struct P { explicit P(T t) : t_(t) {} T t_;}; |
| 8 | template <class T> P<T> *foo_ptr(); |
| 9 | template <class T> P<T> &foo_ref(); |
| 10 | |
| 11 | int bar() { |
| 12 | { |
| 13 | // Lenth(long) = 4 |
| 14 | long i = static_cast<long>(foo<long>()); |
| 15 | // CHECK-FIXES-0-0: auto i = {{.*}} |
| 16 | // CHECK-FIXES-0-8: long i = {{.*}} |
| 17 | // CHECK-FIXES-1-0: auto i = {{.*}} |
| 18 | // CHECK-FIXES-1-8: long i = {{.*}} |
| 19 | const long ci = static_cast<long>(foo<const long>()); |
| 20 | // CHECK-FIXES-0-0: auto ci = {{.*}} |
| 21 | // CHECK-FIXES-0-8: long ci = {{.*}} |
| 22 | // CHECK-FIXES-1-0: auto ci = {{.*}} |
| 23 | // CHECK-FIXES-1-8: long ci = {{.*}} |
| 24 | long *pi = static_cast<long *>(foo<long *>()); |
| 25 | // CHECK-FIXES-0-0: auto *pi = {{.*}} |
| 26 | // CHECK-FIXES-0-8: long *pi = {{.*}} |
| 27 | // CHECK-FIXES-1-0: auto pi = {{.*}} |
| 28 | // CHECK-FIXES-1-8: long *pi = {{.*}} |
| 29 | |
| 30 | // Length(long *) is still 5 |
| 31 | long * pi2 = static_cast<long *>(foo<long *>()); |
| 32 | // CHECK-FIXES-0-0: auto * pi2 = {{.*}} |
| 33 | // CHECK-FIXES-0-8: long * pi2 = {{.*}} |
| 34 | // CHECK-FIXES-1-0: auto pi2 = {{.*}} |
| 35 | // CHECK-FIXES-1-8: long * pi2 = {{.*}} |
| 36 | |
| 37 | // Length(long **) = 6 |
| 38 | long **ppi = static_cast<long **>(foo<long **>()); |
| 39 | // CHECK-FIXES-0-0: auto **ppi = {{.*}} |
| 40 | // CHECK-FIXES-0-8: long **ppi = {{.*}} |
| 41 | // CHECK-FIXES-1-0: auto ppi = {{.*}} |
| 42 | // CHECK-FIXES-1-8: long **ppi = {{.*}} |
| 43 | } |
| 44 | |
| 45 | { |
| 46 | // Lenth(long int) = 4 + 1 + 3 = 8 |
| 47 | // Lenth(long int) is still 8 |
| 48 | long int i = static_cast<long int>(foo<long int>()); |
| 49 | // CHECK-FIXES-0-0: auto i = {{.*}} |
| 50 | // CHECK-FIXES-0-8: auto i = {{.*}} |
| 51 | // CHECK-FIXES-1-0: auto i = {{.*}} |
| 52 | // CHECK-FIXES-1-8: auto i = {{.*}} |
| 53 | |
| 54 | long int *pi = static_cast<long int *>(foo<long int *>()); |
| 55 | // CHECK-FIXES-0-0: auto *pi = {{.*}} |
| 56 | // CHECK-FIXES-0-8: auto *pi = {{.*}} |
| 57 | // CHECK-FIXES-1-0: auto pi = {{.*}} |
| 58 | // CHECK-FIXES-1-8: auto pi = {{.*}} |
| 59 | } |
| 60 | |
| 61 | // Templates |
| 62 | { |
| 63 | // Length(P<long>) = 7 |
| 64 | P<long>& i = static_cast<P<long>&>(foo_ref<long>()); |
| 65 | // CHECK-FIXES-0-0: auto& i = {{.*}} |
| 66 | // CHECK-FIXES-0-8: P<long>& i = {{.*}} |
| 67 | // CHECK-FIXES-1-0: auto & i = {{.*}} |
| 68 | // CHECK-FIXES-1-8: P<long>& i = {{.*}} |
| 69 | |
| 70 | // Length(P<long*>) = 8 |
| 71 | P<long*>& pi = static_cast<P<long*> &>(foo_ref<long*>()); |
| 72 | // CHECK-FIXES-0-0: auto& pi = {{.*}} |
| 73 | // CHECK-FIXES-0-8: auto& pi = {{.*}} |
| 74 | // CHECK-FIXES-1-0: auto & pi = {{.*}} |
| 75 | // CHECK-FIXES-1-8: auto & pi = {{.*}} |
| 76 | |
| 77 | P<long>* pi2 = static_cast<P<long>*>(foo_ptr<long>()); |
| 78 | // CHECK-FIXES-0-0: auto* pi2 = {{.*}} |
| 79 | // CHECK-FIXES-0-8: P<long>* pi2 = {{.*}} |
| 80 | // CHECK-FIXES-1-0: auto pi2 = {{.*}} |
| 81 | // CHECK-FIXES-1-8: auto pi2 = {{.*}} |
| 82 | } |
| 83 | |
| 84 | return 1; |
| 85 | } |
| 86 | |