<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/67893>67893</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Assertion failure when importing module twice that contains a global initializer
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
davidstone
</td>
</tr>
</table>
<pre>
Given
```cpp
export module a;
int x;
```
```cpp
module;
import a;
export module b;
import a;
```
When compiled with
```shell
clang++ -std=c++20 -x c++-module -fmodule-output=a.pcm --precompile -c a.cpp;
clang++ -std=c++20 -fmodule-file=a=a.pcm -c b.cpp
```
clang crashes with
```console
clang++: llvm/clang/lib/CodeGen/CGDeclCXX.cpp:706: void clang::CodeGen::CodeGenModule::EmitCXXModuleInitFunc(Module *): Assertion `!GetGlobalValue(FnName.str()) && "We should only have one use of the initializer call"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: clang++ -std=c++20 -fmodule-file=a=a.pcm -c b.cpp
1. <eof> parser at end of file
2. Per-file LLVM IR generation
#0 0x0000561b0b9d5f22 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (llvm/build/bin/clang+++0x445df22)
#1 0x0000561b0b9d392e llvm::sys::RunSignalHandlers() (llvm/build/bin/clang+++0x445b92e)
#2 0x0000561b0b91aeb9 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f8afb65c710 (/usr/lib/libc.so.6+0x3e710)
#4 0x00007f8afb6ac83c (/usr/lib/libc.so.6+0x8e83c)
#5 0x00007f8afb65c668 gsignal (/usr/lib/libc.so.6+0x3e668)
#6 0x00007f8afb6444b8 abort (/usr/lib/libc.so.6+0x264b8)
#7 0x00007f8afb6443dc (/usr/lib/libc.so.6+0x263dc)
#8 0x00007f8afb654d26 (/usr/lib/libc.so.6+0x36d26)
#9 0x0000561b0c055623 clang::CodeGen::CodeGenModule::EmitCXXModuleInitFunc(clang::Module*) (llvm/build/bin/clang+++0x4add623)
#10 0x0000561b0c297940 clang::CodeGen::CodeGenModule::Release() (llvm/build/bin/clang+++0x4d1f940)
#11 0x0000561b0c3757d8 (anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&) ModuleBuilder.cpp:0:0
#12 0x0000561b0c27c190 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) CodeGenAction.cpp:0:0
#13 0x0000561b0dd83b26 clang::ParseAST(clang::Sema&, bool, bool) (llvm/build/bin/clang+++0x680bb26)
#14 0x0000561b0c6de48d clang::FrontendAction::Execute() (llvm/build/bin/clang+++0x516648d)
#15 0x0000561b0c64648d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (llvm/build/bin/clang+++0x50ce48d)
#16 0x0000561b0c77a87e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (llvm/build/bin/clang+++0x520287e)
#17 0x0000561b0a183eb1 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (llvm/build/bin/clang+++0x2c0beb1)
#18 0x0000561b0a18021e ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#19 0x0000561b0c4281b9 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) Job.cpp:0:0
#20 0x0000561b0b91abb6 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (llvm/build/bin/clang+++0x43a2bb6)
#21 0x0000561b0c427853 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (llvm/build/bin/clang+++0x4eaf853)
#22 0x0000561b0c3e25fd clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (llvm/build/bin/clang+++0x4e6a5fd)
#23 0x0000561b0c3e28d7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (llvm/build/bin/clang+++0x4e6a8d7)
#24 0x0000561b0c404d09 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (llvm/build/bin/clang+++0x4e8cd09)
#25 0x0000561b0a17f691 clang_main(int, char**, llvm::ToolContext const&) (llvm/build/bin/clang+++0x2c07691)
#26 0x0000561b0a190ed2 main (llvm/build/bin/clang+++0x2c18ed2)
#27 0x00007f8afb645cd0 (/usr/lib/libc.so.6+0x27cd0)
#28 0x00007f8afb645d8a __libc_start_main (/usr/lib/libc.so.6+0x27d8a)
#29 0x0000561b0a17c625 _start (llvm/build/bin/clang+++0x2c04625)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 18.0.0 (https://github.com/llvm/llvm-project.git e39727d41fcdcdae2906ae0c982a6ebd19f442ad)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: llvm/build/bin
clang++: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/b-11764c.cpp
clang++: note: diagnostic msg: /tmp/b-11764c.sh
clang++: note: diagnostic msg:
********************
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWV1T47jS_jXmpispW_6-4CIEws4Wu0MBuzt3KVnqJHrHllKSDOH99ackGxJlYCC7W-fmTGWILUvdTz_darU71BixlojnUX4R5ZdntLcbpc85fRTcWCXxrFH8-fxaPKKM4ssono1_i3j4sO12GMHdVmkLneJ9i0Cj9OJwvpAWdvuxl9U_FznIOpbUeT3HCkL1zYeL3kLw1wYlMNVtRYscnoTdvInPbLBthzHWUrmOyEVELmBiLI_SSzbckhgmOxhvJiOsyWq4mKjebnsbpZd0umUdTCZbjaNimDCgU8dBegGf0fIicyUcV5d0L5VBM30l802LvWRgmpoNmvctZkoa1eIPaKJ0Bm372EVkMY4uWtFEZDFXHK9RuqvrS2Tt_Nu3waRZGRdu1aMSHIY16SxKZy8LDm9-G93vhq46Yeffvg1DX6Swi16yiFTDAERkFpHaCZ4Zg9oKJcFBJ8k12utWNbT9k7Y9RqRayN9ph1NjdUQqt4jUEJEiIgVEhPyFYDaqbzko2T7Dhj4iKInQGwS1ArtBEFJYQVvx_6iB0baNCIlICSvqomY6cHR7czW7vwLTN52wQKHp16DRx6BVsLF2a5xdZBGRxVrYTd9MmXI0jmy6r8lWq_9DZiOyEMb0aCKyACo5CMnanqMH410HDWXfraYMIzKHrcatVgyNQQ5G9XoYdiupMYoJapGD7iUYpsXWjpDvLWXfgfed89IwFE_hVqu1ph1Qve47lNbBhn8lHpMpROkc1SpKr2BLtUEN1AJK7oj2i_08MgX_7xa1Fwk3N3_-Bl_uYI0SNXWuHiZCRNIY4l0cx3FeJE3c1DxfETJEqI8i82yGi1stpPUWPwy0VftJmj4tlbEaaefjYg5C2iFKqtE9TS9a7r6F3If-xfCJd1mW85ULinoPLDkCltYE3wJ218t7sZa0_YVK3qI2Q5CeorupCQa6Sag7odjUMHeBc4dMPaJ-DlRGpBoNDubMlbS4s-M2jv3_VxXpqKJcVXTVFDkrkxg89EVv9GtaaEXDpkZNC481xTKJA6RZKIayKmUfiqmwSlkgJj9GUxQVrI038hOoiqIKxBWhuCzLmgpo4zbzR8JIkTWhsPJYWMo_NpEUKQ9NrI5MzLjPXx-YVnAX0Adi6sPQYHGeFyT9N9LygYhxuk_Qnw9jynlB0lesbgcFe5uRuqyz-BSsd9giNXjqhuLJqs7iAEmwmVla5iWvnEAqlXzuVG9A0g7N1meWOgDkMpbSX7ptOwwPe-5BU2lan8v-kMKGBM7uH8a959NRDYNRFw426h_3o0NIQq5KltQBVxeUfUfJ50qavkP997GMZs2Ym_82lvQQC-dV2pDiEMuty_2z-4dQ0z12dEy_jVLt_vvzriuquGkOAt6ByQJiCo5ZFdQhC-3Mk3wwaAzyHbLenho4eVIUWcUD7XmoPSuOtM-HElB_kcZSyTDQP0IKWDqCO_jk0whjhscIiwBhWdKqxEOEI5Y90EfF6I-4fjDktO2fk5hUJQbIykNkNKlSbBJgLFl21Mk4OMBnWtPnO1xF6ZxtqAZXvVqHIL1yYRSOkbmvRU8ESFjcYJMEAKsjgDFJEF74micPPnoPYN53tG3_RPaaD95A6-N_v8TJGPffyzzvca7F43upIEzxGamSph7K773cVS99AC21Z80_Havj9GqY4ipdV2YuV9Ih3bt60D26fZ7MVddRyY93zpve8aWjG1Nbp506Dg74sVrItZ95NbrudcFyyXa7JBluGmoEWxo_fWQxmOwGllZT4arX4fGRONq2LoyVPnjupsz2aceHx8C5XxKRbBn7SVWrXGzU8Ktq3nQBiY8LsKYpDth_q8zaV4N0he1zwODPvXXK2ZZS0jRBgiTJUbiUVR5UBP9z7v48m0hXVR7ULCQ8h1Mk-Yq_y6bPmfSHc-eF4iDBHi10Ew4ywvwnOg6nzoIT9nSDC5qvgvODpMcGV7w81eBfVWPet_ZX1dwIYwNrf5ZUX72-pcI53L_bfJ6gMTT-IU0VLwOawjIkizMe1-9Bujy4Do7fN87d9-j9L9J0QvrBivG4DojJw0O0XBV1MoB4OedfgPltPxs37cdH5Akne1nUwclOihBUHSMn4OCcIDWpkJNA6vGbYM74x-_MpGQ8eBkh1bEYXlFYLt2ypbFU2-UL0g8E84oGgusjV7CC5DCIPIXNrCD5q9yj3iFq7ZLw2FGC1VjNAhvDa-ip-b4k4E44j3KEJM0cgN4gTB7BKjCIIA4q0UNl8IjaCCUhqabx1BN8WvttuhYWMK1LUvIsWTHOOEVSxwXFmNUVoQU2PKlXWUboPhc-UL1Gd4rDriqWRTbp5XepnuSkFbLfTdayH-dtNFIOneLo3ghhq4zYDY987dy2yC-FPmi0HhL-FqdSWffeAFzQtVTGCgadcVsYXlz7Dz4HzeGxxTl7eJjNf4GHX65g8fXm5utfX36_hsWXm6t7ePjqhy_-uIa7q9uvdw-vjcXbt1qUlXH79N025esEjeCPb-RA7avIz7NAFrbbOgInSVIWGdu3JP-BDLP5e874t1zy0qk_4-cpr9OanuF5UtRFkiRlnZ9tzlNS0BKrIiV1U_IyKQiNi6SuioyXMSfJmTgnMUnjOo0Jies8n9KYZKuCJkXZ5FhnJMpi7Khopy4Qp0qvz3xb-rwoqzo9a2mDrfE_IxEi8Qn8w4iQKL880-d-RzX92kRZ3ApjzV6KFbbF833f3m36XiM8bVDC8MONkOuXX3bsk2AIdkN9erdUSAMU1r7Ff9iaP-t1e_73G-3eqP8EAAD__yKv8Yw">