// RUN: not %clang_cc1 %s -fdiagnostics-print-source-range-info 2>&1 | FileCheck %s --strict-whitespace template<typename T> class C {}; template<int> class D {}; void g() { // The range ending in the first > character does not extend to the second > // character. // CHECK: :{[[@LINE+3]]:5-[[@LINE+3]]:11}: error: // CHECK-NEXT: D<C<int>> a; // CHECK-NEXT: ^~~~~~{{$}} D<C<int>> a; // The range ending in the second > character does not extend to the third > // character. // CHECK: :{[[@LINE+3]]:5-[[@LINE+3]]:14}: error: // CHECK-NEXT: D<C<C<int>>> b; // CHECK-NEXT: ^~~~~~~~~{{$}} D<C<C<int>>> b; } template<int> int V; // Here, we split the >>= token into a > followed by a >=. // Then we split the >= token into a > followed by an =, // which we merge with the other = to form an ==. // CHECK: error: a space is required // CHECK-NEXT: int k = V<C<int>>==0; // CHECK-NEXT: ^~{{$}} // CHECK-NEXT: > >{{$}} // CHECK: error: a space is required // CHECK-NEXT: int k = V<C<int>>==0; // CHECK-NEXT: ^~{{$}} // CHECK-NEXT: > ={{$}} // CHECK: :{[[@LINE+3]]:11-[[@LINE+3]]:17}: error: // CHECK-NEXT: int k = V<C<int>>==0; // CHECK-NEXT: ^~~~~~{{$}} int k = V<C<int>>==0; template<typename> int W; // CHECK: :{[[@LINE+3]]:9-[[@LINE+3]]:18}{[[@LINE+3]]:20-[[@LINE+3]]:22}: error: comparison // CHECK-NEXT: int l = W<C<int>>==&k; // CHECK-NEXT: ~~~~~~~~~^ ~~{{$}} int l = W<C<int>>==&k; |