diff options
Diffstat (limited to 'test/Misc/diag-greatergreater.cpp')
-rw-r--r-- | test/Misc/diag-greatergreater.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/test/Misc/diag-greatergreater.cpp b/test/Misc/diag-greatergreater.cpp new file mode 100644 index 0000000000..9110838cf3 --- /dev/null +++ b/test/Misc/diag-greatergreater.cpp @@ -0,0 +1,43 @@ +// 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; |