PR12713 - crash on invalid due to unmatched parens in decltype
authorDavid Blaikie <dblaikie@gmail.com>
Wed, 7 Nov 2012 19:08:05 +0000 (19:08 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Wed, 7 Nov 2012 19:08:05 +0000 (19:08 +0000)
llvm-svn: 167547

clang/lib/Parse/Parser.cpp
clang/test/SemaCXX/decltype.cpp

index 7bf4220..f4cdd61 100644 (file)
@@ -1940,8 +1940,8 @@ bool BalancedDelimiterTracker::diagnoseMissingClose() {
   }
   P.Diag(P.Tok, DID);
   P.Diag(LOpen, diag::note_matching) << LHSName;
-  if (P.SkipUntil(Close))
-    LClose = P.Tok.getLocation();
+  if (P.SkipUntil(Close, /*StopAtSemi*/ true, /*DontConsume*/ true))
+    LClose = P.ConsumeAnyToken();
   return true;
 }
 
index f9bdece..ccde3dc 100644 (file)
@@ -36,3 +36,10 @@ struct C {
   C(decltype(undeclared; // expected-error {{undeclared identifier}} \
                          // expected-error {{expected ')'}} expected-note {{to match this '('}}
 };
+
+template<typename>
+class conditional {
+};
+
+void foo(conditional<decltype((1),int>) {  // expected-note 2 {{to match this '('}} expected-error {{expected ')'}}
+} // expected-error {{expected function body after function declarator}} expected-error 2 {{expected '>'}} expected-error {{expected ')'}}