• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: not %clang_cc1 %s -fdiagnostics-print-source-range-info 2>&1 | FileCheck %s --strict-whitespace
2 
3 template<typename T> class C {};
4 template<int> class D {};
5 
g()6 void g() {
7   // The range ending in the first > character does not extend to the second >
8   // character.
9   // CHECK:      :{[[@LINE+3]]:5-[[@LINE+3]]:11}: error:
10   // CHECK-NEXT:   D<C<int>> a;
11   // CHECK-NEXT:     ^~~~~~{{$}}
12   D<C<int>> a;
13 
14   // The range ending in the second > character does not extend to the third >
15   // character.
16   // CHECK:      :{[[@LINE+3]]:5-[[@LINE+3]]:14}: error:
17   // CHECK-NEXT:   D<C<C<int>>> b;
18   // CHECK-NEXT:     ^~~~~~~~~{{$}}
19   D<C<C<int>>> b;
20 }
21 
22 template<int> int V;
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:           ^~~~~~{{$}}
37 int k = V<C<int>>==0;
38 
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;
44