Closed
Description
Given
export module a;
int x;
module;
import a;
export module b;
import a;
When compiled with
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
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:
********************
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Done