This revision was automatically updated to reflect the committed changes. kadircet marked 2 inline comments as done. Closed by commit rGd026f2f7c688: [clang] Fix crash on broken parameter declarators (authored by kadircet).
Changed prior to commit: https://reviews.llvm.org/D114609?vs=389851&id=389951#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114609/new/ https://reviews.llvm.org/D114609 Files: clang/lib/Parse/ParseDecl.cpp clang/test/Parser/cxx-keyword-identifiers.cpp Index: clang/test/Parser/cxx-keyword-identifiers.cpp =================================================================== --- clang/test/Parser/cxx-keyword-identifiers.cpp +++ clang/test/Parser/cxx-keyword-identifiers.cpp @@ -25,3 +25,7 @@ int case; // expected-error {{expected member name or ';'}} }; } +struct Foo { + void bar(*decltype(1) aux); // expected-error {{C++ requires a type specifier for all declarations}}. \ + // expected-error {{expected ')'}} expected-note {{to match this '('}} +}; Index: clang/lib/Parse/ParseDecl.cpp =================================================================== --- clang/lib/Parse/ParseDecl.cpp +++ clang/lib/Parse/ParseDecl.cpp @@ -6978,13 +6978,13 @@ // // We care about case 1) where the declarator type should be known, and // the identifier should be null. - if (!ParmDeclarator.isInvalidType() && !ParmDeclarator.hasName()) { - if (Tok.getIdentifierInfo() && - Tok.getIdentifierInfo()->isKeyword(getLangOpts())) { - Diag(Tok, diag::err_keyword_as_parameter) << PP.getSpelling(Tok); - // Consume the keyword. - ConsumeToken(); - } + if (!ParmDeclarator.isInvalidType() && !ParmDeclarator.hasName() && + Tok.isNot(tok::raw_identifier) && !Tok.isAnnotation() && + Tok.getIdentifierInfo() && + Tok.getIdentifierInfo()->isKeyword(getLangOpts())) { + Diag(Tok, diag::err_keyword_as_parameter) << PP.getSpelling(Tok); + // Consume the keyword. + ConsumeToken(); } // Inform the actions module about the parameter declarator, so it gets // added to the current scope.
Index: clang/test/Parser/cxx-keyword-identifiers.cpp =================================================================== --- clang/test/Parser/cxx-keyword-identifiers.cpp +++ clang/test/Parser/cxx-keyword-identifiers.cpp @@ -25,3 +25,7 @@ int case; // expected-error {{expected member name or ';'}} }; } +struct Foo { + void bar(*decltype(1) aux); // expected-error {{C++ requires a type specifier for all declarations}}. \ + // expected-error {{expected ')'}} expected-note {{to match this '('}} +}; Index: clang/lib/Parse/ParseDecl.cpp =================================================================== --- clang/lib/Parse/ParseDecl.cpp +++ clang/lib/Parse/ParseDecl.cpp @@ -6978,13 +6978,13 @@ // // We care about case 1) where the declarator type should be known, and // the identifier should be null. - if (!ParmDeclarator.isInvalidType() && !ParmDeclarator.hasName()) { - if (Tok.getIdentifierInfo() && - Tok.getIdentifierInfo()->isKeyword(getLangOpts())) { - Diag(Tok, diag::err_keyword_as_parameter) << PP.getSpelling(Tok); - // Consume the keyword. - ConsumeToken(); - } + if (!ParmDeclarator.isInvalidType() && !ParmDeclarator.hasName() && + Tok.isNot(tok::raw_identifier) && !Tok.isAnnotation() && + Tok.getIdentifierInfo() && + Tok.getIdentifierInfo()->isKeyword(getLangOpts())) { + Diag(Tok, diag::err_keyword_as_parameter) << PP.getSpelling(Tok); + // Consume the keyword. + ConsumeToken(); } // Inform the actions module about the parameter declarator, so it gets // added to the current scope.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits