x86_64-pc-windows-gnu: Bootstrap fails with a segfault when building libcore after LLVM update
Open
Nobody has claimed this yet.
C-bug
needs-triage
O-windows-gnu
T-bootstrap
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.2k
- PR merge metrics
- PR metrics pending
Description
I tried this code:
./build/x86_64-pc-windows-gnu/stage1/bin/rustc.exe library/core/src/lib.rs --edition=2024 --crate-type=lib -C opt-level=1
(-C opt-level=1 is required, it will segfault with higher optimization levels too.)
I expected to see this happen: it compiles.
Instead, this happened: SIGSEGV, see the backtrace below
Meta
$ ./build/x86_64-pc-windows-gnu/stage1/bin/rustc.exe --version --verbose
rustc 1.95.0-dev
binary: rustc
commit-hash: unknown
commit-date: unknown
host: x86_64-pc-windows-gnu
release: 1.95.0-dev
LLVM version: 22.1.0
Backtrace
#0 0x00007ffd29e5adb8 in canProveExitOnFirstIteration(llvm::Loop*, llvm::DominatorTree&, llvm::LoopInfo&)::{lambda(llvm::BasicBlock*)#1}::operator()(llvm::BasicBlock*) const ()
from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#1 0x00007ffd28352210 in llvm::LoopDeletionPass::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) ()
from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#2 0x00007ffd256131f5 in llvm::detail::PassModel<llvm::Loop, llvm::LoopDeletionPass, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::L
oopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#3 0x00007ffd27b452b5 in std::optional<llvm::PreservedAnalyses> llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runSinglePass<llvm::Loop, std::unique_ptr<llvm::d
etail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAna
lysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&> > > >(llvm::Loop&, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>,
std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&> > >&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::Loo
pStandardAnalysisResults&, llvm::LPMUpdater&, llvm::PassInstrumentation&) [clone .isra.0] () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#4 0x00007ffd27b45fbb in llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runWithoutLoopNestPasses(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStanda
rdAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#5 0x00007ffd27b460ba in llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&,
llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#6 0x00007ffd288ed6ec in llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#7 0x00007ffd23add5f1 in llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) ()
from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#8 0x00007ffd255d7b9f in llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#9 0x00007ffd23ade521 in llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) ()
from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#10 0x00007ffd2894ad3d in llvm::CGSCCToFunctionPassAdaptor::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) ()
from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#11 0x00007ffd23add135 in llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::CGSCCToFunctionPassAdaptor, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::Anal
ysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#12 0x00007ffd27b43ae5 in llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, ll
vm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#13 0x00007ffd25613b25 in llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>, llvm::AnalysisManager<llvm::Laz
yCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) ()
from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#14 0x00007ffd2879d193 in llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) ()
from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#15 0x00007ffd25628055 in llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::DevirtSCCRepeatedPass, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisM
anager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#16 0x00007ffd28a34a8c in llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#17 0x00007ffd23add101 in llvm::detail::PassModel<llvm::Module, llvm::ModuleToPostOrderCGSCCPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) ()
from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#18 0x00007ffd255d6c0f in llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#19 0x00007ffd288c4359 in llvm::ModuleInlinerWrapperPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#20 0x00007ffd256139d1 in llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) ()
from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
#21 0x00007ffd255d6c0f in llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) () from C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll
warning: Could not find DWO CU C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1-rustc\x86_64-pc-windows-gnu\release\deps\rustc_codegen_llvm-aab7d176d36bd35d.9zehr43x35vtzupzd7ikgc78t.0ok8miw.rcgu.dwo(0x2679283cdf2077ac) referenced by CU at offset 0x8be15f [in mo
dule C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll]
#22 0x00007ffd2659e15b in LLVMRustOptimize (ModuleRef=<optimized out>, TMRef=<optimized out>, OptLevelRust=<optimized out>, OptStage=<optimized out>, IsLinkerPluginLTO=<optimized out>, NoPrepopulatePasses=<optimized out>, VerifyIR=<optimized out>,
LintIR=<optimized out>, ThinLTOBufferRef=<optimized out>, EmitThinLTO=<optimized out>, EmitThinLTOSummary=<optimized out>, MergeFunctions=<optimized out>, UnrollLoops=<optimized out>, SLPVectorize=<optimized out>, LoopVectorize=<optimized out>,
DisableSimplifyLibCalls=<optimized out>, EmitLifetimeMarkers=<optimized out>, EnzymePtr=<optimized out>, PrintBeforeEnzyme=<optimized out>, PrintAfterEnzyme=<optimized out>, PrintPasses=<optimized out>, SanitizerOptions=<optimized out>, PGOGenPath=<optimized out>,
PGOUsePath=<optimized out>, InstrumentCoverage=<optimized out>, InstrProfileOutput=<optimized out>, PGOSampleUsePath=<optimized out>, DebugInfoForProfiling=<optimized out>, LlvmSelfProfiler=<optimized out>, BeforePassCallback=<optimized out>,
AfterPassCallback=<optimized out>, ExtraPasses=<optimized out>, ExtraPassesLen=<optimized out>, LLVMPlugins=<optimized out>, LLVMPluginsLen=<optimized out>) at llvm-wrapper/PassWrapper.cpp:948
#23 0x00007ffd239f829c in rustc_codegen_llvm::back::write::llvm_optimize () at compiler\rustc_codegen_llvm\src\back/write.rs:781
#24 0x00007ffd239fc9db in rustc_codegen_llvm::back::write::optimize () at compiler\rustc_codegen_llvm\src\back/write.rs:946
warning: Could not find DWO CU C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1-rustc\x86_64-pc-windows-gnu\release\deps\rustc_codegen_llvm-aab7d176d36bd35d.dpr6s4dfs5ulo3c95ht5id5lj.0ok8miw.rcgu.dwo(0x43466d2adc4038b5) referenced by CU at offset 0x8be193 [in mo
dule C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll]
#25 0x00007ffd23a008d2 in rustc_codegen_ssa::back::write::execute_optimize_work_item::<rustc_codegen_llvm::LlvmCodegenBackend> () at compiler\rustc_codegen_llvm\src/lib.rs:212
warning: Could not find DWO CU C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1-rustc\x86_64-pc-windows-gnu\release\deps\rustc_codegen_llvm-aab7d176d36bd35d.8lt7ci8d42mjhfecjqohgzzja.0ok8miw.rcgu.dwo(0x3496c4f07cc20e74) referenced by CU at offset 0x3685 [in modu
le C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll]
#26 0x00007ffd22a29dd8 in std::sys::backtrace::__rust_begin_short_backtrace::<<rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::ExtraBackendMethods>::spawn_named_thread<rustc_codegen_ssa::back::write::spawn_work<rustc_codegen_llvm::LlvmCodege
nBackend>::{closure#0}, ()>::{closure#0}, ()> () at compiler\rustc_codegen_ssa\src\back/write.rs:1889
warning: Could not find DWO CU C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1-rustc\x86_64-pc-windows-gnu\release\deps\rustc_codegen_llvm-aab7d176d36bd35d.04ihkvgnuf44bzt8qtovt7zfb.0ok8miw.rcgu.dwo(0x930a884efb1911a1) referenced by CU at offset 0xc37560 [in mo
dule C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\rustc_driver-777c5fb388fd49f7.dll]
#27 0x00007ffd23a44bbe in <std::thread::lifecycle::spawn_unchecked<<rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::ExtraBackendMethods>::spawn_named_thread<rustc_codegen_ssa::back::write::spawn_work<rustc_codegen_llvm::LlvmCodegenBackend>::
{closure#0}, ()>::{closure#0}, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} () at /rustc/9b1f8ff42d110b0ca138116745be921df5dc97e7/library\std\src\thread\lifecycle.rs:91
warning: Could not find DWO CU /rustc/9b1f8ff42d110b0ca138116745be921df5dc97e7\build\x86_64-pc-windows-gnu\stage1-std\x86_64-pc-windows-gnu\release\deps\std-0ac5f935d4de8f8a.std.6b50adac5d8db169-cgu.0.rcgu.dwo(0xd5576954f1dda941) referenced by CU at offset 0x0 [in module
C:\msys64\home\we\rust\build\x86_64-pc-windows-gnu\stage1\bin\std-0ac5f935d4de8f8a.dll]
#28 0x00007ffd4365a5ae in std::sys::thread::windows::Thread::new::thread_start () at library\alloc\src/boxed.rs:2206
#29 0x00007ffdb3f17374 in KERNEL32!BaseThreadInitThunk () from C:\Windows\System32\kernel32.dll
#30 0x00007ffdb5a9cc91 in ntdll!RtlUserThreadStart () from C:\Windows\SYSTEM32\ntdll.dll
#31 0x0000000000000000 in ?? ()
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the failure by compiling library/core/src/lib.rs with the stage1 x86_64-pc-windows-gnu rustc and -C opt-level=1. Start with llvm-wrapper/PassWrapper.cpp:948 and compiler/rustc_codegen_llvm/src/back/write.rs at lines 781 and 946, then inspect the LLVM LoopDeletionPass frames. Done means the command no longer segfaults after the LLVM update.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100