From: David Blaikie Date: Wed, 7 Nov 2012 19:08:05 +0000 (+0000) Subject: PR12713 - crash on invalid due to unmatched parens in decltype X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0da2fa35613e26474e760be3c62f79c382e4726c;p=platform%2Fupstream%2Fllvm.git PR12713 - crash on invalid due to unmatched parens in decltype llvm-svn: 167547 --- diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index 7bf4220..f4cdd61 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -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; } diff --git a/clang/test/SemaCXX/decltype.cpp b/clang/test/SemaCXX/decltype.cpp index f9bdece..ccde3dc 100644 --- a/clang/test/SemaCXX/decltype.cpp +++ b/clang/test/SemaCXX/decltype.cpp @@ -36,3 +36,10 @@ struct C { C(decltype(undeclared; // expected-error {{undeclared identifier}} \ // expected-error {{expected ')'}} expected-note {{to match this '('}} }; + +template +class conditional { +}; + +void foo(conditional) { // expected-note 2 {{to match this '('}} expected-error {{expected ')'}} +} // expected-error {{expected function body after function declarator}} expected-error 2 {{expected '>'}} expected-error {{expected ')'}}