1 // RUN: not %clang_cc1 %s -fdiagnostics-print-source-range-info 2>&1 | FileCheck %s --strict-whitespace
3 template<typename T
> class C
{};
4 template<int> class D
{};
7 // The range ending in the first > character does not extend to the second >
9 // CHECK: :{[[@LINE+3]]:5-[[@LINE+3]]:11}: error:
10 // CHECK-NEXT: D<C<int>> a;
11 // CHECK-NEXT: ^~~~~~{{$}}
14 // The range ending in the second > character does not extend to the third >
16 // CHECK: :{[[@LINE+3]]:5-[[@LINE+3]]:14}: error:
17 // CHECK-NEXT: D<C<C<int>>> b;
18 // CHECK-NEXT: ^~~~~~~~~{{$}}
23 // Here, we split the >>= token into a > followed by a >=.
24 // Then we split the >= token into a > followed by an =,
25 // which we merge with the other = to form an ==.
26 // CHECK: error: a space is required
27 // CHECK-NEXT: int k = V<C<int>>==0;
28 // CHECK-NEXT: ^~{{$}}
29 // CHECK-NEXT: > >{{$}}
30 // CHECK: error: a space is required
31 // CHECK-NEXT: int k = V<C<int>>==0;
32 // CHECK-NEXT: ^~{{$}}
33 // CHECK-NEXT: > ={{$}}
34 // CHECK: :{[[@LINE+3]]:11-[[@LINE+3]]:17}: error:
35 // CHECK-NEXT: int k = V<C<int>>==0;
36 // CHECK-NEXT: ^~~~~~{{$}}
39 template<typename
> int W
;
40 // CHECK: :{[[@LINE+3]]:9-[[@LINE+3]]:18}{[[@LINE+3]]:20-[[@LINE+3]]:22}: error: comparison
41 // CHECK-NEXT: int l = W<C<int>>==&k;
42 // CHECK-NEXT: ~~~~~~~~~^ ~~{{$}}
43 int l
= W
<C
<int>>==&k
;