Change:
} } <del> let rebuild_trigger = builder.src.join("src/rustllvm/llvm-rebuild-trigger"); let rebuild_trigger_contents = t!(fs::read_to_string(&rebuild_trigger)); let (out_dir, llvm_config_ret_dir) = if emscripten { </del> <ins> let (submodule, root, out_dir, llvm_config_ret_dir) = if emscripten { </ins> let dir = builder.emscripten_llvm_out(target); let config_dir = dir.join("bin"); <del> (dir, config_dir) </del> <ins> ("src/llvm-emscripten", "src/llvm-emscripten", dir, config_dir) </ins> } else { let mut dir = builder.llvm_out(builder.config.build); if !builder.config.build.contains("msvc") || builder.config.ninja { dir.push("build"); } <del> (builder.llvm_out(target), dir.join("bin")) </del> <ins> ("src/llvm-project", "src/llvm-project/llvm", builder.llvm_out(target), dir.join("bin")) </ins> }; <del> let done_stamp = out_dir.join("llvm-finished-building"); </del> <ins> let git_output = t!(Command::new("git") .args(&["rev-parse", "--verify", &format!("@:./{}", submodule)]) .current_dir(&builder.src) .output()); let llvm_commit = if git_output.status.success() { Some(git_output.stdout) } else { println!( "git could not determine the LLVM submodule commit hash ({}).  Assuming that an LLVM build is necessary.", String::from_utf8_lossy(&git_output.stderr), ); None }; </ins> let build_llvm_config = llvm_config_ret_dir .join(exe("llvm-config", &*builder.config.build)); <del> if done_stamp.exists() { let done_contents = t!(fs::read_to_string(&done_stamp)); </del> <ins> let done_stamp = out_dir.join("llvm-finished-building"); </ins> <del> // If LLVM was already built previously and contents of the rebuild-trigger file // didn't change from the previous build, then no action is required. if done_contents == rebuild_trigger_contents { return build_llvm_config </del> <ins> if let Some(llvm_commit) = &llvm_commit { if done_stamp.exists() { let done_contents = t!(fs::read(&done_stamp)); // If LLVM was already built previously and the submodule's commit didn't change // from the previous build, then no action is required. if done_contents == llvm_commit.as_slice() { return build_llvm_config } </ins> } }

Discussion:
fortunately: cc
Some potentially useful extra info:
backtrace from running under in details block: <details</details
hmm for some reason this system is using a with ; i wonder if that is relevant... but that should only affect the bootstrap behavior, not the number of codegen-units used in the final build, right? I guess I should double-check this against a nightly that I download via , just to be sure...
yeah okay this doesn't occur on a nightly I downloaded via , ... grr...
And unfortunately the debug does not replicate after I do a rebuild of LLVM with in the ... (I'll have to see if the problem was actually due to some other sort of staleness of my LLVM object files...?)
can't replicate anymore. :( I have a sneaking suspicion that this might be due to my build of LLVM being stale in some way? not sure. I sort of wish I had taken a snapshot of my directory structure at the time before I cleaned it as part of trying to test out alternate configurations...
Fwiw I have the same issue locally
It is LLVM, I had these failures (all segfaults, i.e. "signal 11"): And they were fixed by (LLVM rebuilt a few of its files). We should keep track of the fact that we don't detect LLVM needing a rebuild correctly. IMO should contain the git hash of the submodule. The rebuild is really fast, especially after small deltas, and it's better than weird crashes.
Same issue here, with two separate rustc checkouts. Currently rebuilding LLVM to see if that helps. (Deleting that file triggered a complete rebuild.)
Confirmed that rebuilding LLVM fixes the problem.

I've spent the past few hours looking through documentation for how to build rustc with a patched LLVM without success. Currently, the best I'm at is: And then build with: But even that doesn't rebuild anything unless I . Which completely loses incremental compilation results. Is there any way to make this development workflow better? Rebuilding from scratch at every change is… painful.
You need to modify to rebuild LLVM. (tagging this issue as a documentation problem.)
Thanks! Leaving open for the documentation problem :)

I Changed the submodule, commited the changes; Commited the submodule commit change in the rust repo; Built. Rustbuild did not seem to pick up on the submodule being changed.
LLVM rebuild is currently triggered only when contents of and stamps disagree (including being non-existent), so it's always manual. Full checking of something in LLVM being outdated is not performed because it's expensive thing to do on every build, but the submodule state check can be performed I guess.