summaryrefslogtreecommitdiffstats
path: root/clang/test/Parser
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2019-05-15 23:36:14 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2019-05-15 23:36:14 +0000
commitbeda951d788a0041e9f5fabbb4e018e8b9d0a2d3 (patch)
treecd27c014a19a93329a6207c23dbda65623c43fb2 /clang/test/Parser
parent7684d05d95b9369fa0454b525093ed04ee91b1e1 (diff)
downloadbcm5719-llvm-beda951d788a0041e9f5fabbb4e018e8b9d0a2d3.tar.gz
bcm5719-llvm-beda951d788a0041e9f5fabbb4e018e8b9d0a2d3.zip
Make tentative parsing to detect template-argument-lists less aggressive
(and less wrong). It's not correct to assume that X<something, Type> is always a template-id; there are a few cases where the comma takes us into a non-expression syntactic context in which 'Type' might be permissible. Stop doing that. This slightly regresses our error recovery on the cases where the construct is intended to be a template-id. We typically do still manage to diagnose a missing 'template' keyword, but we realize this too late to properly recover from the error. This fixes a regression introduced by r360308. llvm-svn: 360827
Diffstat (limited to 'clang/test/Parser')
-rw-r--r--clang/test/Parser/cxx-template-argument.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/test/Parser/cxx-template-argument.cpp b/clang/test/Parser/cxx-template-argument.cpp
index b3a9071785b..70945e3aa74 100644
--- a/clang/test/Parser/cxx-template-argument.cpp
+++ b/clang/test/Parser/cxx-template-argument.cpp
@@ -127,3 +127,14 @@ namespace PR18793 {
template<typename T, T> struct S {};
template<typename T> int g(S<T, (T())> *);
}
+
+namespace r360308_regression {
+ template<typename> struct S1 { static int const n = 0; };
+ template<int, typename> struct S2 { typedef int t; };
+ template<typename T> struct S3 { typename S2<S1<T>::n < 0, int>::t n; };
+
+ template<typename FT> bool f(FT p) {
+ const bool a = p.first<FT(0), b = p.second>FT(0);
+ return a == b;
+ }
+}
OpenPOWER on IntegriCloud