Author: rakete1111 Date: Sun May 5 05:15:17 2019 New Revision: 359979 URL: http://llvm.org/viewvc/llvm-project?rev=359979&view=rev Log: [C++] Interpret unknown identifier in parameter clause as unknown type
instead of as parameter name without a type. Modified: cfe/trunk/lib/Parse/ParseDecl.cpp cfe/trunk/test/Parser/editor-placeholder-recovery.cpp cfe/trunk/test/SemaCXX/unknown-type-name.cpp Modified: cfe/trunk/lib/Parse/ParseDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=359979&r1=359978&r2=359979&view=diff ============================================================================== --- cfe/trunk/lib/Parse/ParseDecl.cpp (original) +++ cfe/trunk/lib/Parse/ParseDecl.cpp Sun May 5 05:15:17 2019 @@ -2649,6 +2649,9 @@ bool Parser::ParseImplicitInt(DeclSpec & case tok::semi: // This looks like a variable or function declaration. The type is // probably missing. We're done parsing decl-specifiers. + // But only if we are not in a function prototype scope. + if (getCurScope()->isFunctionPrototypeScope()) + break; if (SS) AnnotateScopeToken(*SS, /*IsNewAnnotation*/false); return false; Modified: cfe/trunk/test/Parser/editor-placeholder-recovery.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/editor-placeholder-recovery.cpp?rev=359979&r1=359978&r2=359979&view=diff ============================================================================== --- cfe/trunk/test/Parser/editor-placeholder-recovery.cpp (original) +++ cfe/trunk/test/Parser/editor-placeholder-recovery.cpp Sun May 5 05:15:17 2019 @@ -64,7 +64,7 @@ void avoidPlaceholderErrors(Struct &obj) } } -void Struct::method(<#Struct &x#>, noSupressionHere) { // expected-error {{unknown type name 'noSupressionHere'}} expected-error {{C++ requires a type specifier for all declarations}} +void Struct::method(<#Struct &x#>, noSupressionHere) { // expected-error {{unknown type name 'noSupressionHere'}} #ifndef SUPPRESS // expected-error@-2 {{editor placeholder in source file}} #endif Modified: cfe/trunk/test/SemaCXX/unknown-type-name.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/unknown-type-name.cpp?rev=359979&r1=359978&r2=359979&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/unknown-type-name.cpp (original) +++ cfe/trunk/test/SemaCXX/unknown-type-name.cpp Sun May 5 05:15:17 2019 @@ -72,9 +72,7 @@ void f(int, T::type x, char) { } // expe int *p; -// FIXME: We should assume that 'undeclared' is a type, not a parameter name -// here, and produce an 'unknown type name' diagnostic instead. -int f1(undeclared, int); // expected-error{{requires a type specifier}} +int f1(undeclared, int); // expected-error{{unknown type name 'undeclared'}} int f2(undeclared, 0); // expected-error{{undeclared identifier}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits