aaron.ballman added inline comments.
================ Comment at: clang/docs/ReleaseNotes.rst:360 (`#61336 <https://github.com/llvm/llvm-project/issues/61336>`_) +- Fix parsing of `auto(x)`, when it is surrounded by parenthesese. ---------------- ================ Comment at: clang/include/clang/Parse/Parser.h:2655 TPResult TryParseOperatorId(); - TPResult TryParseInitDeclaratorList(); + TPResult TryParseInitDeclaratorList(bool mayHaveTrailingReturnType = false); TPResult TryParseDeclarator(bool mayBeAbstract, bool mayHaveIdentifier = true, ---------------- ================ Comment at: clang/include/clang/Parse/Parser.h:2663 ImplicitTypenameContext::No); - TPResult TryParseFunctionDeclarator(); + TPResult TryParseFunctionDeclarator(bool mayHaveTrailingReturnType = false); TPResult TryParseBracketDeclarator(); ---------------- ================ Comment at: clang/lib/Parse/ParseTentative.cpp:237 ConsumeAnnotationToken(); - if (Tok.is(tok::identifier)) + if (Tok.isOneOf(tok::identifier, tok::kw_auto)) ConsumeToken(); ---------------- This smells a bit off to me because of the comments above -- this is trying to parse an elaborated type specifier, and `auto` cannot appear in this position for that case. Can you help me understand what's going on? ================ Comment at: clang/lib/Parse/ParseTentative.cpp:323 +Parser::TPResult +Parser::TryParseInitDeclaratorList(bool mayHaveTrailingReturnType) { while (true) { ---------------- ================ Comment at: clang/lib/Parse/ParseTentative.cpp:545 // FIXME: A tag definition unambiguously tells us this is an init-statement. + bool mayHaveTrailingReturnType = Tok.is(tok::kw_auto); if (State.update(TryConsumeDeclarationSpecifier())) ---------------- ================ Comment at: clang/lib/Parse/ParseTentative.cpp:1416-1417 + case tok::kw_auto: { + if (NextToken().is(tok::l_brace)) + return TPResult::False; + if (NextToken().is(tok::l_paren)) { ---------------- This seems incorrect to me, consider: ``` auto [[clang::annotate_type("test")]] i = 12; ``` https://godbolt.org/z/7Gx3Gb18h ================ Comment at: clang/lib/Parse/ParseTentative.cpp:1418-1420 + if (NextToken().is(tok::l_paren)) { + return TPResult::Ambiguous; + } ---------------- ================ Comment at: clang/lib/Parse/ParseTentative.cpp:2114 +Parser::TPResult +Parser::TryParseFunctionDeclarator(bool mayHaveTrailingReturnType) { // The '(' is already parsed. ---------------- ================ Comment at: clang/test/Parser/cxx1z-decomposition.cpp:97 decltype(auto) [b] = s; // expected-error {{cannot be declared with type 'decltype(auto)'}} - auto ([c]) = s; // expected-error {{cannot be declared with parentheses}} + auto ([c]) = s; // expected-error {{'auto' not allowed here}} \ + // expected-error {{use of undeclared identifier 'c'}} \ ---------------- This first diagnostic is incorrect -- `auto` is definitely allowed there, just that the rest of the declaration is nonsense. I think the "use of undeclared identifier" diagnostic is reasonable. The lambda diagnostic is.... interesting. Any way you can improve this, or is that a slog? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D149276/new/ https://reviews.llvm.org/D149276 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits