Change:
The compiler LLVM is rebuilt whenever the built version of LLVM doesn't have the right hash. (Previously it was rebuilt based on a special marker file, which was easier to work around.) However, most of the time, having the latest LLVM version is not necessary, but makes rebuilding rustc after rebasing take significantly longer, which is a pain. It would be good to be able to disable this as an option in for convenience. <!-- TRIAGEBOTSTART --<!-- TRIAGEBOTASSIGNSTART --This issue has been assigned to via . <!-- TRIAGEBOTASSIGNDATASTARTTRIAGEBOTASSIGNDATAEND --<!-- TRIAGEBOTASSIGNEND --<!-- TRIAGEBOTEND --
To fix this, you'll want to add another option: you should be able to look at the logic for something like .
It would be good if this could be changed in the config file so you don't have to pass in the option all the time.
if it's a config file option, then there should be an option to rebuild it if necessary. I.e. it shouldn't be necessarily to temporarily change the to rebuild.
sure that seems good, although they can be implemented separately.
The line you would need to change is near this one: (line 735 of ) It would probably be much easier to add a check against a key in the config, than to add a new flag.
claim
Error: Parsing assign command in failed: claim ... Please let know if you're having trouble with this bot.
, my bad! claim EDIT: oh dear, I'm making it worse
are you still working on this? I wouldn't mind picking it up if not. (Sorry - not really sure what the etiquette is re: dormant tickets!)
Just saw that PR () lapsed. I'm gonna claim this, if that's okay. Will work on something based on the existing comments there. claim
Thank you for picking this up! Getting things fixed is the important thing, and I'm sure I'll find something else to fix in the near future when I have more time

Discussion:
# ============================================================================= [llvm] <ins> # Indicates whether LLVM rebuild should be skipped when running bootstrap. If # this is `false` then the compiler's LLVM will be rebuilt whenever the built # version doesn't have the correct hash. If it is `true` then LLVM will never # be rebuilt. The default value is `false`. #skip-rebuild = false </ins> # Indicates whether the LLVM build is a Release or Debug build #optimize = true

pub backtrace_on_ice: bool, // llvm codegen options <ins> pub llvm_skip_rebuild: bool, </ins> pub llvm_assertions: bool, pub llvm_optimize: bool, pub llvm_thin_lto: bool,

#[derive(Deserialize, Default)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] struct Llvm { <ins> skip_rebuild: Option<bool>, </ins> optimize: Option<bool>, thin_lto: Option<bool>, release_debuginfo: Option<bool>,

// Store off these values as options because if they're not provided // we'll infer default values for them later <ins> let mut llvm_skip_rebuild = None; </ins> let mut llvm_assertions = None; let mut debug = None; let mut debug_assertions = None;

} set(&mut config.ninja, llvm.ninja); llvm_assertions = llvm.assertions; <ins> llvm_skip_rebuild = llvm.skip_rebuild; </ins> set(&mut config.llvm_optimize, llvm.optimize); set(&mut config.llvm_thin_lto, llvm.thin_lto); set(&mut config.llvm_release_debuginfo, llvm.release_debuginfo);

set(&mut config.initial_rustc, build.rustc.map(PathBuf::from)); set(&mut config.initial_cargo, build.cargo.map(PathBuf::from)); <ins> config.llvm_skip_rebuild = llvm_skip_rebuild.unwrap_or(false); </ins> let default = false; config.llvm_assertions = llvm_assertions.unwrap_or(default);

let done_stamp = out_dir.join("llvm-finished-building"); if done_stamp.exists() { <ins> if builder.config.llvm_skip_rebuild { builder.info( "Warning:  Using a potentially stale build of LLVM;  This may not behave well.", ); return build_llvm_config; } </ins> if let Some(llvm_commit) = llvm_info.sha() { let done_contents = t!(fs::read(&done_stamp));