<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/54139>54139</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Crash with`-funique-internal-linkage-names` on extern function
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ellishg
</td>
</tr>
</table>
<pre>
I'm getting a crash in clang when building with the flag `-funique-internal-linkage-names`.
```
$ cat test.c
inline void foo() {}
extern void foo();
$ clang -funique-internal-linkage-names test.c -c
```
```
llvm-project/clang/lib/AST/Decl.cpp:3614: bool clang::FunctionDecl::isInlineDefinitionExternallyVisible() const: Assertion `(doesThisDeclarationHaveABody() || willHaveBody() || hasAttr<AliasAttr>()) && "Must be a function definition"' failed.
```
And here is the backtrace
```
* thread #1, name = 'clang', stop reason = hit program assert
frame #0: 0x00007fffe084737f libc.so.6`raise + 271
frame #1: 0x00007fffe0831db5 libc.so.6`abort + 295
frame #2: 0x00007fffe0831c89 libc.so.6`.annobin_unwind_resume.c_end.unlikely + 15
frame #3: 0x00007fffe083fa76 libc.so.6`__assert_fail + 70
* frame #4: 0x00007fffdd16078b libclangAST.so.15git`clang::FunctionDecl::isInlineDefinitionExternallyVisible(this=0x00000000007516c8) const at Decl.cpp:3612:3
frame #5: 0x00007fffdcfc5835 libclangAST.so.15git`clang::ASTContext::GetGVALinkageForFunction(clang::FunctionDecl const*) const [inlined] basicGVALinkageForFunction(Context=0x00000000006e07e0, FD=0x00000000007516c8) at ASTContext.cpp:11259:13
frame #6: 0x00007fffdcfc56fd libclangAST.so.15git`clang::ASTContext::GetGVALinkageForFunction(this=0x00000000006e07e0, FD=0x00000000007516c8) const at ASTContext.cpp:11331:14
frame #7: 0x00007fffe74b3029 libclangCodeGen.so.15git`clang::CodeGen::CodeGenModule::getFunctionLinkage(this=0x00000000006f74f0, GD=<unavailable>) at CodeGenModule.cpp:1569:37
frame #8: 0x00007fffe7209358 libclangCodeGen.so.15git`clang::CodeGen::CodeGenModule::ConstructAttributeList(this=<unavailable>, Name=<unavailable>, FI=0x00000000007413d0, CalleeInfo=CGCalleeInfo @ 0x00007fffffff9450, AttrList=0x00007fffffff9480, CallingConv=<unavailable>, AttrOnCallSite=<unavailable>, IsThunk=<unavailable>) at CGCall.cpp:2227:17
frame #9: 0x00007fffe74b73b1 libclangCodeGen.so.15git`clang::CodeGen::CodeGenModule::SetFunctionAttributes(clang::GlobalDecl, llvm::Function*, bool, bool) [inlined] clang::CodeGen::CodeGenModule::SetLLVMFunctionAttributes(this=0x00000000006f74f0, GD=GlobalDecl @ 0x00000000027cb0d0, Info=0x00000000007413d0, F=0x000000000065f438, IsThunk=false) at CodeGenModule.cpp:1598:3
frame #10: 0x00007fffe74b734c libclangCodeGen.so.15git`clang::CodeGen::CodeGenModule::SetFunctionAttributes(this=0x00000000006f74f0, GD=<unavailable>, F=0x000000000065f438, IsIncompleteFunction=false, IsThunk=false) at CodeGenModule.cpp:2193:5
frame #11: 0x00007fffe74bb468 libclangCodeGen.so.15git`clang::CodeGen::CodeGenModule::GetOrCreateLLVMFunction(this=0x00000000006f74f0, MangledName=(Data = "foo", Length = 3), Ty=<unavailable>, GD=GlobalDecl @ 0x00007fffffff9508, ForVTable=<unavailable>, DontDefer=<unavailable>, IsThunk=<unavailable>, ExtraAttrs=(pImpl = 0x0000000000000000), IsForDefinition=<unavailable>) at CodeGenModule.cpp:3819:5
frame #12: 0x00007fffe74bd24a libclangCodeGen.so.15git`clang::CodeGen::CodeGenModule::EmitGlobal(this=0x00000000006f74f0, GD=<unavailable>) at CodeGenModule.cpp:3029:7
frame #13: 0x00007fffe74c3f4a libclangCodeGen.so.15git`clang::CodeGen::CodeGenModule::EmitTopLevelDecl(this=0x00000000006f74f0, D=0x00000000007516c8) at CodeGenModule.cpp:5919:5
frame #14: 0x00007fffe7559e2f libclangCodeGen.so.15git`(anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(this=0x00000000006f5910, DG=(D = 0x00000000007516c8)) at ModuleBuilder.cpp:179:18
frame #15: 0x00007fffe7494a46 libclangCodeGen.so.15git`clang::BackendConsumer::HandleTopLevelDecl(this=0x00000000006f56d0, D=(D = 0x00000000007516c8)) at CodeGenAction.cpp:230:12
frame #16: 0x00007fffdaff46b9 libclangParse.so.15git`clang::ParseAST(S=0x000000000072ea40, PrintStats=<unavailable>, SkipFunctionBodies=<unavailable>) at ParseAST.cpp:163:31
frame #17: 0x00007fffe5450291 libclangFrontend.so.15git`clang::FrontendAction::Execute(this=0x00000000006c8330) at FrontendAction.cpp:976:8
frame #18: 0x00007fffe53b498f libclangFrontend.so.15git`clang::CompilerInstance::ExecuteAction(this=0x00000000006bd9d0, Act=0x00000000006c8330) at CompilerInstance.cpp:1036:33
frame #19: 0x00007fffeaf0cd29 libclangFrontendTool.so.15git`clang::ExecuteCompilerInvocation(Clang=0x00000000006bd9d0) at ExecuteCompilerInvocation.cpp:263:25
frame #20: 0x000000000041487d clang`cc1_main(Argv=<unavailable>, Argv0="/data/users/ellishoag/repos/llvm-project/build/bin/clang-14", MainAddr=0x000000000040f7c0) at cc1_main.cpp:248:15
frame #21: 0x00000000004125fd clang`ExecuteCC1Tool(ArgV=<unavailable>) at driver.cpp:317:12
frame #22: 0x00007fffe4f45392 libclangDriver.so.15git`void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const::$_1>(long) [inlined] clang::driver::CC1Command::Execute(this=0x00007fffffffb960) const::$_1::operator()() const at Job.cpp:407:34
frame #23: 0x00007fffe4f45384 libclangDriver.so.15git`void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(callable=140737488337248) const::$_1>(long) at STLFunctionalExtras.h:45:12
frame #24: 0x00007fffe15c71b7 libLLVMSupport.so.15git`llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) [inlined] llvm::function_ref<void ()>::operator(this=<unavailable>)() const at STLFunctionalExtras.h:68:12
frame #25: 0x00007fffe15c71b1 libLLVMSupport.so.15git`llvm::CrashRecoveryContext::RunSafely(this=<unavailable>, Fn=function_ref<void ()> @ 0x0000000003ac7a20)>) at CrashRecoveryContext.cpp:428:3
frame #26: 0x00007fffe4f44de0 libclangDriver.so.15git`clang::driver::CC1Command::Execute(this=0x00000000006b79d0, Redirects=<unavailable>, ErrMsg=<unavailable>, ExecutionFailed=<unavailable>) const at Job.cpp:407:12
frame #27: 0x00007fffe4f11b28 libclangDriver.so.15git`clang::driver::Compilation::ExecuteCommand(this=0x0000000000642270, C=0x00000000006b79d0, FailingCommand=0x00007fffffffbe60) const at Compilation.cpp:196:15
frame #28: 0x00007fffe4f11ee7 libclangDriver.so.15git`clang::driver::Compilation::ExecuteJobs(this=<unavailable>, Jobs=<unavailable>, FailingCommands=0x00007fffffffbf90) const at Compilation.cpp:249:19
frame #29: 0x00007fffe4f29dac libclangDriver.so.15git`clang::driver::Driver::ExecuteCompilation(this=0x00007fffffffc6b8, C=0x0000000000642270, FailingCommands=0x00007fffffffbf90) at Driver.cpp:1614:5
frame #30: 0x0000000000411d9e clang`main(Argc=<unavailable>, Argv=<unavailable>) at driver.cpp:489:21
frame #31: 0x00007fffe0833493 libc.so.6`__libc_start_main + 243
frame #32: 0x000000000040f6ae clang`_start + 46
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNWl1vqzwS_jXpDWoExnxd5CJNmr5dtXtenVa9jYwxifcQyBroaf_9zhgICTFpe7YrbRSVBDvjeebLz5jGRfI-u5-QYGdtRFXJfGMxiytWbi2ZWzxjcOP3VuRWXMssweHfstpa1VZYacY21sS3r9M6l_-uxbXMK6Fyll1nMv_FNuI6ZztRwozpxF5O7Hn717fbd_OVUIuzyqpEWU15c0_mIEFYr4VMrLQoJiSckMiaBDeTYNnMEG-41GDGxL05kqlV_0C3dlXrmpt1M93Mstfd9V4V_xK8mpCVXgeumYzh7_zpGf4uBc-mfL-fuHPXdyhcrLgoskYn-AbvVZ3zShY5Tm3uyPJew16KVOYSx27fGp2z9xdZyjgTrSF4kZcVCp2XpVA4E90Ag0khyuetLFEoUwxH_mKvYn4DTj4YcQFvcGKW4dD5yJaV86pSE3cxz2T3-bY1ME4jPrzhQh7rsrJiAfGStmCs5KA7jENQWSmTmUimF6w7zxNrK5SwZKmjKmb8V6UYFyPRModZSrAENHCdCVlY6Ehr4i7hRtA6I8D7ZVXsLZhZonlgeCsrC9y2UWxnMW24RqQFr1RpIcS10az2mw2vIE1TYYc0cIPUAu_yaVlMfdBEMVni5BuLBI5BhnMmw3WS2DuRweJCVY2MyDPIIAYZPIxOZExZnhexzNd1_lvmyVqJst6JKV-LPJnWEEu_RPau13BMS7jnS6Qs8E-WWK8bS63Rj1pUYHei0BUHYfRUWJI4vh2EsRaGPoG8QJmOt5EVyP2GRKggzsGtzZrNK_Acn_cZYkFVOc1EtKprMIU30J6n3Atd7xPaw8iigNLyVjXf70R19zJ_aGrMqlAdOlB4BHObzWTe6z3xbpoKmEy8JSREKfmY0MPiJ4bwhR0IG5NgtRy1EVin1761keMQL8KryUq-wUp-mnyvlQxu_RSag8cNmFydklCHzzEFgyQIaOzaJDpgWhSJuBP5CK529OTLY5HUEKD6FuyoHbQW7AjCNKCpRniHCKH21jl7hZRjGOtYfbW7Tlbo0Hk-OgyAnIMLh-CIHble-E3gFmhxVfMKtwgZ15V4kBjIHUADioX1T1BtbGx1P_QuddxEm2UBuS_EfZ4WMGVx13-1JtQ-goiviHr6N6iW1qgT2k8ID0IlWiF_HVMJZfzIceKTrEYVv4dNt85_XfKcVrl1GSEEw84xuSw6j8fAjZ1vctlTH48Hp5WnpekuK2KW6WIMyJDrnJYsXagWms7012hQsr6m0sPDy6NRrY8zpdf2KBD0C7hAbDfB04aNObJWwwW8lELinHg1ZVkpLuZgFI7sLM6QUGiHUv4_dugf1ZjLxrjPebHbZ6ISh1A4WOYrxiJOhMzDxEicIXMCY8XU_66CBbvOD7UARgiV6ijkPjLXIywAHLarXCRcsoq1hJPo3oPgtAeRb6AxwvuupsoL6_l9zNDjwXsoUp6tDQ-748tz80uzqCVsdsCUhPqj6rSwgFsphsFTNuj29-BlDePYHM2rxXVfglY9O_vijuWGTjQWAEPaCwGQEMq-KQBud7JqjP7t2zCSBriYSrozJNoB5W76raCei_2DeBVt2b4M7SIhNEHzonF_0SE0z4sESS9BA_1YXuTvu6Iude9W7rHZ0-brEQroXguFodjc_ovlSSY-gxPUbXDetdl6FssHxC3oBu0Nnm8I1ZX0QNPg0ATaO_NnRBn1P-nPG-hvoUFD9gTdmvoyPD85uPFT6Fpt5rrWdTVY97mQbQZ0Q5bP0pT6cc-I_2aqFCPY9Jg-AgmfhmFGBKNa87-VzKunilWjJPHpl9x31fmmSKQYmanxdWt2jvMx3VxjXz4k-x4wRRL15GqlsHGA5nmkU22H5-3up7PvTXDYc0e8xUPXtVs9T3_dahsFaG5jlA3Ju-fGNArTzyq7gM1aZkLdA0lnORcn6s4vbXxxEjUhBrMuARqu0DnA1o2ia2RDQ3rLUpsnR-1WB-oZaOUIsBZCv_prwVnXDTfTjHi0zqM_7hJDRw8xnsgcMbnmRR0aBklLdkFH7qx3TKIec7UZbylgzNbJC7RhlQCXgEtdCth_yUpAR1JuC4YHikrsC7w3OG_U57B4xZWa08drqMMNCXmE9edJogY2oHYa8M4GnZ4dZBpqCmuC7JxDJl7aQ-7MuXCedR-AwF8u5Gqi5OuhxDb5aCxCZMgDaEo9NyKHOFk2go4iRJ8E9-1KdyK5ViIFbfRod0h820zh0JHhYeM6hVxeHEVYo2WbRgsHgmUH5XmY7_1ac6XY-0-9Tn_zxx6XB6ZxfPMJKHq-0VNvrTYeyqoVvV7ztzdNgeGtD33WpZ6P2m2ZOpmMN9ZA3CRW0WZ4IA7QYWwXqh9vljzq3-bHp8n4JnTtNKe9WYEHqRcau89Z6aTAdNw2jnzbvDJ-LPbN5t8dOZ8e7_yjiNv4oTbGj2s61SFDyqXjJ6T_T_GDP295vQNQ3ICGUFwDTMcPnQJ2eHp-6LZIlmkOX063aBVvNKmGZM3xeODEARoF-6Gner8vVHVslN4eC3wi9FPwApC9n5zl_azzJ5aK7P0kJy7b7yyuvmT4owAZP2o6C5wxg_nhqMGGRK8xmPONBrt0VLbSDfYlcwzPPFzGA0bs3si4Sxv06BKIjJ1akAEJxPyhibAv5M9_Vxm6rTpoqcdPkUgF-92ocW6Veiw34z0trgJmW-nHT2M70mhRMYfDkD7S1HFiEv6BUTT9YGcssrOU2TiUkKA5txw1G8LVJ5qtxYd1VxzV3Z7CHRMgJ_JH2cCQkSJ-IYLvww9uKD9ICj1lLGFO0Bu2nTT6CD6huu2LTPCH3JWmJEoY_zr85dHnE0LKTKy80577cWj0_iEuPosfH4sdEzGneURtfEZoIL1OEokDA-wJL79EeD_LCWmIViam7s30WNWlkTt4XonfgDcxVWmS2zxipaYid_yM9UCTfdZja8RoCdQ3Po2-SmZuErkRu6pklYmZLrb6HyQ-9W8RVpFb7T8ydHX-qlbZbFtV-1Lv_Ct4Qyxta6hPxa5tBs57AlmWNZ77rjzquNHVduZzHjp-6icBFYkI8MluErLAjWwq_MDmV-AEkZUz2IWhc8jFb0uLwC7CW17JGbEJsV3bIQ6NHH8a0SjheBLgkIAzN4V9R4B1synqMS3U5krNtEpxvSlhEJqYquwHWVnKTS6EXg7ks7raFmrWNDubK730TKv-HxvaRyc">