<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63503>63503</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
ICE when hit incomplete virtual function specifier
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:frontend,
crash-on-invalid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zyn0217
</td>
</tr>
</table>
<pre>
https://clang.godbolt.org/z/qW57zPWK1
The previous [patch](https://clang.godbolt.org/z/GffzM8qMG) that attempted to address this bug seems to be not enough.
Release 15.0, 16.0, and the trunk are affected.
```
clangd: /repo/llvm-project/clang/lib/Sema/SemaExpr.cpp:18662: void clang::Sema::MarkFunctionReferenced(SourceLocation, FunctionDecl *, bool): Assertion `Func && "No function?"' failed.
#0 0x00007f01a535ddbd llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /repo/llvm-project/llvm/lib/Support/Unix/Signals.inc:602:11
#1 0x00007f01a535e25b PrintStackTraceSignalHandler(void*) /repo/llvm-project/llvm/lib/Support/Unix/Signals.inc:675:1
#2 0x00007f01a535c516 llvm::sys::RunSignalHandlers() /repo/llvm-project/llvm/lib/Support/Signals.cpp:104:5
#3 0x00007f01a535ea15 SignalHandler(int) /repo/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
#4 0x00007f01a47aef60 __restore_rt sigaction.c:0:0
#5 0x00007f01a3c5f47a raise /root/glibc-2.33/signal/../sysdeps/unix/sysv/linux/raise.c:50:0
#6 0x00007f01a3c6045e abort /root/glibc-2.33/stdlib/abort.c:81:0
#7 0x00007f01a3c5811a __assert_fail_base /root/glibc-2.33/assert/assert.c:89:0
#8 0x00007f01a3c58192 (/lib64/libc.so.6+0x33192)
#9 0x00007f01a6d8f81f clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool) /repo/llvm-project/clang/lib/Sema/SemaExpr.cpp:18664:3
#10 0x00007f01a6b3b372 clang::Sema::FinalizeVarWithDestructor(clang::VarDecl*, clang::RecordType const*) /repo/llvm-project/clang/lib/Sema/SemaDeclCXX.cpp:15817:27
#11 0x00007f01a69d4ad5 clang::Sema::CheckCompleteVariableDeclaration(clang::VarDecl*) /repo/llvm-project/clang/lib/Sema/SemaDecl.cpp:14297:27
#12 0x00007f01a69d32e0 clang::Sema::AddInitializerToDecl(clang::Decl*, clang::Expr*, bool) /repo/llvm-project/clang/lib/Sema/SemaDecl.cpp:13599:1
#13 0x00007f01aa639e4a clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) /repo/llvm-project/clang/lib/Parse/ParseDecl.cpp:0:15
#14 0x00007f01aa637d95 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) /repo/llvm-project/clang/lib/Parse/ParseDecl.cpp:2260:9
#15 0x00007f01aa636dc1 clang::Parser::ParseSimpleDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, bool, clang::Parser::ForRangeInit*, clang::SourceLocation*) /repo/llvm-project/clang/lib/Parse/ParseDecl.cpp:1953:10
#16 0x00007f01aa6369f9 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) /repo/llvm-project/clang/lib/Parse/ParseDecl.cpp:1881:12
#17 0x00007f01aa7028b9 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) /repo/llvm-project/clang/lib/Parse/ParseStmt.cpp:249:16
#18 0x00007f01aa70221b clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) /repo/llvm-project/clang/lib/Parse/ParseStmt.cpp:117:20
#19 0x00007f01aa70af92 clang::Parser::ParseCompoundStatementBody(bool) /repo/llvm-project/clang/lib/Parse/ParseStmt.cpp:1205:11
#20 0x00007f01aa70c694 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) /repo/llvm-project/clang/lib/Parse/ParseStmt.cpp:2467:21
#21 0x00007f01aa72d7cf clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) /repo/llvm-project/clang/lib/Parse/Parser.cpp:1471:3
#22 0x00007f01aa63797b clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) /repo/llvm-project/clang/lib/Parse/ParseDecl.cpp:2195:27
#23 0x00007f01aa72c64a clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) /repo/llvm-project/clang/lib/Parse/Parser.cpp:1210:10
#24 0x00007f01aa72bb8f clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) /repo/llvm-project/clang/lib/Parse/Parser.cpp:1225:12
#25 0x00007f01aa72b463 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) /repo/llvm-project/clang/lib/Parse/Parser.cpp:1040:14
#26 0x00007f01aa72932c clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) /repo/llvm-project/clang/lib/Parse/Parser.cpp:742:12
#27 0x00007f01aa623477 clang::ParseAST(clang::Sema&, bool, bool) /repo/llvm-project/clang/lib/Parse/ParseAST.cpp:163:16
#28 0x00007f01a6271916 clang::ASTFrontendAction::ExecuteAction() /repo/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1170:1
#29 0x00007f01a627133c clang::FrontendAction::Execute() /repo/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1062:7
#30 0x00007f01a80a9aa7 clang::clangd::ParsedAST::build(llvm::StringRef, clang::clangd::ParseInputs const&, std::unique_ptr<clang::CompilerInvocation, std::default_delete<clang::CompilerInvocation>>, llvm::ArrayRef<clang::clangd::Diag>, std::shared_ptr<clang::clangd::PreambleData const>) /repo/llvm-project/clang-tools-extra/clangd/ParsedAST.cpp:685:19
#31 0x00007f01a51ba45a clang::clangd::(anonymous namespace)::Checker::buildAST() /repo/llvm-project/clang-tools-extra/clangd/tool/Check.cpp:248:11
#32 0x00007f01a51b9670 clang::clangd::check(llvm::StringRef, clang::clangd::ThreadsafeFS const&, clang::clangd::ClangdLSPServer::Options const&) /repo/llvm-project/clang-tools-extra/clangd/tool/Check.cpp:487:7
#33 0x00007f01a517efba main /repo/llvm-project/clang-tools-extra/clangd/tool/ClangdMain.cpp:993:12
#34 0x00007f01a3c4b5e0 __libc_start_main /root/glibc-2.33/csu/../csu/libc-start.c:366:0
#35 0x00007f01a4e1925a _start /root/glibc-2.33/csu/../sysdeps/x86_64/start.S:122:0
[1] 11209 abort /repo/llvm-project-Build/BuildDebug/bin/clangd
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWltv2zzS_jXMDRFDInW8yIXj1P2Cr90WcbZ97wxKGtncyqJKUnmT_voFKcsSldhJmhR4gS3a6sDTM88cOOKYKcU3NcAFCi9ReHXGWr0V8uLXQ-0RPz7LRPFwsdW6UYjOEVkisswrVm9mG1FkotIzITeILH8hsvz5PYx_ff3-_z7yrpA37_6_3QJuJNxx0SqMwsuG6XyLwitEkpfN-rEsf31Ofn7-iEiK9ZZpzLSGXaOhwFpgVhQSlMJ6yxXO2g1WADtlWjLAtdAYatFutrMxphuogCnAfjjzEFlgP-qurC6w3gLWsq1_YCYBs7KEXEPhDEeRt_9rHy3wAtE5RmQpoRGILKvqbnfeSPEfyHUvm3nNM0SWK9ix_eXDfSNnedMgOveTKCJmljvBC9yNoHNE57a7vfvM5I9lW-eai_oGSpBQ51AgkqxEK3P4JHJmmowofbcryCuMyNy8y4SoEEnNGnOlQJp2jCLP9MWIRIhEGBHyL4HL_WhEl4gQRGJcMl4daMCIUA97957neXHp-SykYVFkBTZid1DVg-puvkpe65Vm-Y9byXJAJBk6Sfb3Wigtge3s8gvMa23UfJRIO_bAY9s0QprX_675vXnBNzWr1IzXOaLzyDN0-v6A2Z9gBhJmeAKwm-P_WF1UIBFJjDYsf--FKg4NqgEUmYDKQz96isibtnawKUSS30HVw9lbnRcgOg8HOHTKEfNDPCXlPdUU-NQlJBgjCGIGZeTh9VqC0kLCWmqs-IZZ-5yZCTz77zA8HA-neVgGMcOScQUWrxAGyabiWX5OZpQislQWDyLL2cw8PagCGoXIsu3gqgd1Z4WpW_Nop7ILh5OVI3flyAtCwCwTUh9dWRcdR7aXnTTx3UnjiTiJ7zO8XjPrwGvjluuMHZet63e46ZZI3SWSR0ukBFvrMhqMgu6az5SYRYhceveU-ikxkeQwRTqeIiqSMvHLV8awce9H4WzUOI5sbmB7e_w1vkD3QZ5Q34lxUUYzGpOnpVrymlX8F3xj8jvX2ytQWra5FtIV7BuTI9ijhhvIhSxuHxrAuaiVfi7iHBXITL_4669epjDxY0TnJB6EcoJglBYBK8KnhVpsIf-xELumAm0k4yyrwCzA5F4xx2T7XeQ97ICkU9hkApsS8J6GPS-K65prbhUib0WHagz1aR0YW3izQY2loGGaDqHNCOEEVxbRFAI2hvCVSQVydD9ie15qkP2zkPO6mGstedZqUI_F6zrtd9VTKxS3sGsqpuG6LkVvfKdGLYW8YfUGDMevU7adpb-OiPKspQ4sBROW4iINn2XpoxRt4_Jg2ni9Ma2rBvLHYg1ELUSt4V4_JbZD83SGaaSa2tSfJY6QyHCXDtSFE-qiIvdPUrfixr2POvVzDE3lf9JwTjJ4pEfngS_n8jmtvJlrPw1tnuINZEdTstMyfak3_0No_tOkJTad8clAmpPPsNgjSXaatJVmGnZQ6y9yGg2dADikzKsdq6pvYLdfuhiLqHe9tVDSIvrhJfHRDHqZVp50_tdr5fdYNzD7sBDYbScaSE-mpBM_-w3S_yksv5khv8uKRr6cThhiZUpOIjZ5kWjr4sDUpSgeEElemTocRUi8cPT1ar4TvQnEPEqDkxD7THkK8dlM6LE55KKB9zLOyHI_Esx3BSNFnJcvEuwKSm4yvWk4HW38fy4P-sQ0DP77ib82aXcIOnyEBLHvfIMQMk2G0vi06_7PJkN-GrrfDIRODCuPXpBuf5Ej87quNUh7ODDl8q3b7bP6mOc5KGXaeMlBvtmyiO-5-QsJJvRkWXLa70ZbgcPSUSd8d5KmJvXuJJHQzVdIOCUpiOhJkj7cdyZzNNn7U8S8UXQvsPYRDKJHE9FTSvKTot-K5hPcQfX4i_tLw3628FVPUoVDrLqB8slEYXRuJIq2gutdI6S2G9obtqNe5jggE2272WlEaBDHj0Ser24n51X2-9_5bnlLGjBf3fZKiaibyREnk4tI7Kd-5DjE6nYpTfyui_n-CL8724C81bB_9czBsQutn250O98fvva5lOeccpB0ipFSx25OAHxnaJ6tqAw7glu1SDyWMubo91DLGbxwdds9Zi2vCjcD1pLXG2O6rtE-muS6blqtnKRC6X2HtuY_W1g3U9cw-SWvQF7Xd6Nz0MOwAkrWVnpdQAUanh1KP1j3WowKC3Mp2YP1u8UR7FecbfbDDuuqLZNQPIbryCyB7bIKrphme6HNLM-p9VwLUalzuNeS9e-K3ieKwSmixMbo4dRjUtfxMxaE7JhCEElYLeqHnWgVrtkOVGPLUunozLMPalblnbf_PnxtI8HSTnzIgRM3t58UgfwsjWLvmAS5menVhni7lcAKxUpYro6lt-P-C3v_afV1BfKuJ-RLY6xpbMnvyEqQxK6zuqUoP4YyY3jHeP3GNe3zZ8b7MJGm1N0G3BIUzYMsBA-v1xXP8rXSTOr1AcYTNZdctX0xqbu1jXacrb_QKBoKMGY5J8cIwE9JyHC30AvWGApW90m0tuWabq1Vl9GM1govfRReYYyx7xMv3Ren7J-nKT2_7KLe0l6vIGtN9M14PfDqlsTPigtapDRlZ3DhR0kcpRFJwrPtRZz6WeQVPgmClLIAQuJnJMiSMCyLIsnoGb8gHqFeREKfUJ-EsySJaEayKC9zFoRpgQIPdoxXMwNwJuTmjCvVwkVEQ4-eVSyDStkfMRDS23R52CAIIgvTIJnanov6nNd3rOK2Ibw6kxdW6KzdKBR4FVdaDatoriu4uF58wH9vocZbrjGv831ZBN9xqVtWHUrmWPXJ6Fkrq8kvJzZcb9tslovdqEjqWrCVySjTivXfAAAA__9khFbA">