From: Serge Pavlov Date: Mon, 9 Dec 2013 05:25:47 +0000 (+0000) Subject: Avoid extra error messages if method definition is inside function. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=13cd246821b8bbdedd243d25277595baa4119464;p=clang Avoid extra error messages if method definition is inside function. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196757 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 2c93def4c2..9d8af30b5b 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -1725,7 +1725,8 @@ Parser::DeclGroupPtrTy Parser::ParseDeclGroup(ParsingDeclSpec &DS, } else { if (Tok.is(tok::l_brace)) { Diag(Tok, diag::err_function_definition_not_allowed); - SkipUntil(tok::r_brace, StopAtSemi | StopBeforeMatch); + SkipMalformedDecl(); + return DeclGroupPtrTy(); } } } diff --git a/test/Parser/cxx-class.cpp b/test/Parser/cxx-class.cpp index 5fac797285..d4d8c44943 100644 --- a/test/Parser/cxx-class.cpp +++ b/test/Parser/cxx-class.cpp @@ -113,6 +113,16 @@ namespace PR13775 { } } +class pr16989 { + void tpl_mem(int *) { + return; + class C2 { + void f(); + }; + void C2::f() {} // expected-error{{function definition is not allowed here}} + }; +}; + // PR11109 must appear at the end of the source file class pr11109r3 { // expected-note{{to match this '{'}} public // expected-error{{expected ':'}} expected-error{{expected '}'}} expected-error{{expected ';' after class}}