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