Skip to content

Commit 444b227

Browse files
committed
Don't trigger an LLVM build from check builds using the stage 0 compiler
1 parent 3014e79 commit 444b227

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

src/bootstrap/src/core/build_steps/compile.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1387,8 +1387,10 @@ pub fn rustc_cargo_env(
13871387
let building_is_expensive =
13881388
crate::core::build_steps::llvm::prebuilt_llvm_config(builder, target, false)
13891389
.should_build();
1390-
// `top_stage == stage` might be false for `check --stage 1`, if we are building the stage 1 compiler
1391-
let can_skip_build = builder.kind == Kind::Check && builder.top_stage == build_stage;
1390+
1391+
// If we are doing a check build using the pre-built stage 0 compiler,
1392+
// there should be no need to build LLVM.
1393+
let can_skip_build = builder.kind == Kind::Check && build_stage == 0;
13921394
let should_skip_build = building_is_expensive && can_skip_build;
13931395
if !should_skip_build {
13941396
rustc_llvm_env(builder, cargo, target)

src/bootstrap/src/core/builder/tests.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,46 @@ fn any_debug() {
630630
assert_eq!(x.downcast_ref::<MyStruct>(), Some(&MyStruct { x: 7 }));
631631
}
632632

633+
#[test]
634+
fn test_check_compiler_doesnt_build_llvm() {
635+
// Checking the stage 1 compiler uses the bootstrap compiler, and therefore
636+
// should not need to build LLVM.
637+
{
638+
let config = configure_with_args(
639+
&["check", "compiler", "--stage=1"],
640+
&[TEST_TRIPLE_1],
641+
&[TEST_TRIPLE_1],
642+
);
643+
let mut cache = run_build(&config.paths.clone(), config);
644+
645+
assert!(!cache.contains::<llvm::Llvm>());
646+
}
647+
648+
// Checking the stage 1 library uses the stage 1 compiler, so it will need LLVM.
649+
{
650+
let config = configure_with_args(
651+
&["check", "library", "--stage=1"],
652+
&[TEST_TRIPLE_1],
653+
&[TEST_TRIPLE_1],
654+
);
655+
let mut cache = run_build(&config.paths.clone(), config);
656+
657+
assert!(cache.contains::<llvm::Llvm>());
658+
}
659+
660+
// Checking the stage 2 compiler uses the stage 1 compiler, so it will need LLVM.
661+
{
662+
let config = configure_with_args(
663+
&["check", "compiler", "--stage=2"],
664+
&[TEST_TRIPLE_1],
665+
&[TEST_TRIPLE_1],
666+
);
667+
let mut cache = run_build(&config.paths.clone(), config);
668+
669+
assert!(cache.contains::<llvm::Llvm>());
670+
}
671+
}
672+
633673
/// These tests use insta for snapshot testing.
634674
/// See bootstrap's README on how to bless the snapshots.
635675
mod snapshot {

0 commit comments

Comments
 (0)