https://github.com/SoulTch updated https://github.com/llvm/llvm-project/pull/218168
>From ef349a25d53f6f196ad11d016e26d6c882d9375d Mon Sep 17 00:00:00 2001 From: Jeongjin Lee <[email protected]> Date: Sat, 22 Aug 2026 17:32:21 -0400 Subject: [PATCH] [Clang] Mark the declaration invalid when a function definition has no body Fixes #194298 Assisted-by: Claude Opus 5 (Claude Code) --- clang/lib/Parse/ParseCXXInlineMethods.cpp | 1 + clang/lib/Parse/ParseTemplate.cpp | 4 +++- clang/lib/Parse/Parser.cpp | 2 ++ clang/test/SemaCXX/coroutines.cpp | 8 ++++++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/clang/lib/Parse/ParseCXXInlineMethods.cpp b/clang/lib/Parse/ParseCXXInlineMethods.cpp index 3f101feb26a6d..51591011ca548 100644 --- a/clang/lib/Parse/ParseCXXInlineMethods.cpp +++ b/clang/lib/Parse/ParseCXXInlineMethods.cpp @@ -633,6 +633,7 @@ void Parser::ParseLexedMethodDef(LexedMethod &LM) { // Error recovery. if (!Tok.is(tok::l_brace)) { FnScope.Exit(); + LM.D->getAsFunction()->setInvalidDecl(); Actions.ActOnFinishFunctionBody(LM.D, nullptr); return; } diff --git a/clang/lib/Parse/ParseTemplate.cpp b/clang/lib/Parse/ParseTemplate.cpp index 735a9bd1f9f1c..e69d953215e89 100644 --- a/clang/lib/Parse/ParseTemplate.cpp +++ b/clang/lib/Parse/ParseTemplate.cpp @@ -1517,8 +1517,10 @@ void Parser::ParseLateTemplatedFuncDef(LateParsedTemplate &LPT) { "current template being instantiated!"); ParseFunctionStatementBody(LPT.D, FnScope); Actions.UnmarkAsLateParsedTemplate(FunD); - } else + } else { + FunD->setInvalidDecl(); Actions.ActOnFinishFunctionBody(LPT.D, nullptr); + } } } diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index bad81ea92cd2d..5c39ba2ad71a1 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -1407,6 +1407,8 @@ Decl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, // Recover from error. if (!Tok.is(tok::l_brace)) { BodyScope.Exit(); + if (Res) + Res->getAsFunction()->setInvalidDecl(); Actions.ActOnFinishFunctionBody(Res, nullptr); return Res; } diff --git a/clang/test/SemaCXX/coroutines.cpp b/clang/test/SemaCXX/coroutines.cpp index 4cef2f2b7ea0f..19b2ce1678e1f 100644 --- a/clang/test/SemaCXX/coroutines.cpp +++ b/clang/test/SemaCXX/coroutines.cpp @@ -1566,3 +1566,11 @@ void g() { } } + +namespace GH194298 { +// https://github.com/llvm/llvm-project/issues/194298 +coro<promise_void> f1() : bar { co_await suspend_always{} }; // expected-error {{only constructors take base initializers}} +coro<promise> f2() : bar { co_yield 0 }; // expected-error {{only constructors take base initializers}} +coro<promise_void> f3() : bar { co_return }; // expected-error {{expected expression}} \ + // expected-error {{only constructors take base initializers}} +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
