https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108994
Bug ID: 108994 Summary: LLVM JIT segfaults in libgcc after upgrading from gcc 12.2.1 to 13.0.1 Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libgcc Assignee: unassigned at gcc dot gnu.org Reporter: tstellar at redhat dot com Target Milestone: --- On AArch64, I'm seeing some test failures when building the latest LLVM main branch with gcc 13.0.1 installed on my system. Downgrading to 12.2.1 allows the test to pass. For example, clang/test/Interpreter/global-dtor.cpp fails with this stack trace: #0 0x0000fffff7c5e608 in classify_object_over_fdes () from /lib64/libgcc_s.so.1 #1 0x0000fffff7c5f130 in __deregister_frame_info_bases () from /lib64/libgcc_s.so.1 #2 0x0000fffff7c5f930 in __deregister_frame () from /lib64/libgcc_s.so.1 #3 0x0000000001351bc0 in llvm_orc_deregisterEHFrameSectionWrapper () #4 0x0000000000db9f74 in llvm::orc::SelfExecutorProcessControl::callWrapperAsync(llvm::orc::ExecutorAddr, llvm::orc::ExecutorProcessControl::IncomingWFRHandler, llvm::ArrayRef<char>) () #5 0x0000000000da0198 in llvm::orc::ExecutorProcessControl::callWrapper(llvm::orc::ExecutorAddr, llvm::ArrayRef<char>) () #6 0x0000000000dc03d4 in llvm::Error llvm::orc::shared::WrapperFunction<llvm::orc::shared::SPSEmpty (llvm::orc::shared::SPSTuple<llvm::orc::shared::SPSExecutorAddr, llvm::orc::shared::SPSExecutorAddr>)>::call<llvm::orc::ExecutorProcessControl::callSPSWrapper<void (llvm::orc::shared::SPSTuple<llvm::orc::shared::SPSExecutorAddr, llvm::orc::shared::SPSExecutorAddr>), llvm::orc::ExecutorAddrRange&>(llvm::orc::ExecutorAddr, llvm::orc::ExecutorAddrRange&)::{lambda(char const*, unsigned long)#1}, llvm::orc::shared::SPSEmpty, llvm::orc::ExecutorAddrRange>(llvm::orc::ExecutorProcessControl::callSPSWrapper<void (llvm::orc::shared::SPSTuple<llvm::orc::shared::SPSExecutorAddr, llvm::orc::shared::SPSExecutorAddr>), llvm::orc::ExecutorAddrRange&>(llvm::orc::ExecutorAddr, llvm::orc::ExecutorAddrRange&)::{lambda(char const*, unsigned long)#1} const&, llvm::orc::shared::SPSEmpty&, llvm::orc::ExecutorAddrRange const&) () #7 0x0000000000dc0358 in llvm::orc::EPCEHFrameRegistrar::deregisterEHFrames(llvm::orc::ExecutorAddrRange) () #8 0x0000000000da8170 in llvm::orc::EHFrameRegistrationPlugin::notifyRemovingResources(llvm::orc::JITDylib&, unsigned long) () #9 0x0000000000da711c in llvm::orc::ObjectLinkingLayer::handleRemoveResources(llvm::orc::JITDylib&, unsigned long) () #10 0x0000000000d7336c in llvm::orc::ExecutionSession::removeResourceTracker(llvm::orc::ResourceTracker&) () #11 0x0000000000d791cc in llvm::orc::JITDylib::clear() () #12 0x0000000000d8582c in llvm::orc::ExecutionSession::endSession() () #13 0x0000000000d9b014 in llvm::orc::LLJIT::~LLJIT() () #14 0x0000000000d9b170 in llvm::orc::LLJIT::~LLJIT() () #15 0x0000000000ff07e0 in clang::IncrementalExecutor::~IncrementalExecutor() () #16 0x0000000000fef788 in clang::Interpreter::~Interpreter() () #17 0x0000000000a46010 in main () The crashing program is clang-repl, which is a C++ interpreter, so it's crashing while trying to run the code, not while trying to compile it. I'm working on getting a better reproducer, but if you have access to an AArch64 machine you can reproduce it like this: git clone https://github.com/llvm/llvm-project cd llvm-project cmake -G Ninja -B build -S llvm -DCMAKE_BUILD_TYPE=release -DLLVM_ENABLE_PROJECTS=clang -DLLVM_BUILD_LLVM_DYLIB=ON -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang ./build/bin/clang-repl < test.cpp ninja -C build clang-repl ------------------------------ test.cpp: extern "C" int printf(const char *, ...); struct D { float f = 1.0; D *m = nullptr; D(){} ~D() { printf("D[f=%f, m=0x%llx]\n", f, reinterpret_cast<unsigned long long>(m)); }} d; // CHECK: D[f=1.000000, m=0x0] --------------------------------