summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-05-09 02:52:12 +0000
committerbors <bors@rust-lang.org>2021-05-09 02:52:12 +0000
commit9bc8c42bb2f19e745a63f3445f1ac248fb015e53 (patch)
tree2f74a1d89730f66e282a873fdd21a7def5d8f39b
parent88f19c6dab716c6281af7602e30f413e809c5974 (diff)
parenta0190b5fdd54a3183739982d722472491313c69c (diff)
downloadrust-9bc8c42bb2f19e745a63f3445f1ac248fb015e53.tar.gz
Auto merge of #85097 - Mark-Simulacrum:stable-next, r=Mark-Simulacrum1.52.1
[stable] 1.52.1 release Note that this may not be the version we end up going with. However, in the interests of having the artifacts available should we choose to use them, this PR will prepare a set of artifacts which: * Disables incremental compilation unless the user has explicitly opted in (via an environment variable, for ease of setting it globally) * Adds the improved error message which tells the user how to workaround the breakage, intended for users who do explicitly re-enable incremental Note that the release notes mark Monday as the release date; I think it is likely that if we choose to go down this path we should indeed release on Monday, and potentially follow up in a week or two (e.g., May 20th) with a 1.52.2 if we have confidence in some collection of fixes. I think this will be unlikely, though. Please also note that this PR breaks normal policy by landing commits/work **only** on the stable branch. It is my intent to follow up with PRs toward beta and master, as well, but in the interests of making sure we have artifacts as early as possible I am posting this first. It will also let us provide an ask for testing, via the dev-static bucket, sooner rather than later.
-rw-r--r--RELEASES.md21
-rw-r--r--compiler/rustc_query_system/src/query/plumbing.rs14
-rw-r--r--compiler/rustc_session/src/config.rs7
-rw-r--r--src/doc/rustc/src/codegen-options/index.md3
-rw-r--r--src/tools/compiletest/src/runtest.rs16
-rw-r--r--src/version2
6 files changed, 58 insertions, 5 deletions
diff --git a/RELEASES.md b/RELEASES.md
index 1e94fb8e42f..02778204a40 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -1,3 +1,24 @@
+Version 1.52.1 (2021-05-10)
+============================
+
+This release disables incremental compilation, unless the user has explicitly
+opted in via the newly added RUSTC_FORCE_INCREMENTAL=1 environment variable.
+
+This is due to the widespread, and frequently occuring, breakage encountered by
+Rust users due to newly enabled incremental verification in 1.52.0. Notably,
+Rust users **should** upgrade to 1.52.0 or 1.52.1: the bugs that are detected by
+newly added incremental verification are still present in past stable versions,
+and are not yet fixed on any channel. These bugs can lead to miscompilation of
+Rust binaries.
+
+These problems only affect incremental builds, so release builds with Cargo
+should not be affected unless the user has explicitly opted into incremental.
+Debug and check builds are affected.
+
+See [84970] for more details.
+
+[84970]: https://github.com/rust-lang/rust/issues/84970
+
Version 1.52.0 (2021-05-06)
============================
diff --git a/compiler/rustc_query_system/src/query/plumbing.rs b/compiler/rustc_query_system/src/query/plumbing.rs
index 77267489a75..da372091608 100644
--- a/compiler/rustc_query_system/src/query/plumbing.rs
+++ b/compiler/rustc_query_system/src/query/plumbing.rs
@@ -590,7 +590,19 @@ fn incremental_verify_ich<CTX, K, V: Debug>(
let old_hash = tcx.dep_graph().fingerprint_of(dep_node_index);
- assert!(new_hash == old_hash, "found unstable fingerprints for {:?}: {:?}", dep_node, result);
+ if new_hash != old_hash {
+ let run_cmd = if let Some(crate_name) = &tcx.sess().opts.crate_name {
+ format!("`cargo clean -p {}` or `cargo clean`", crate_name)
+ } else {
+ "`cargo clean`".to_string()
+ };
+ tcx.sess().struct_err(&format!("internal compiler error: encountered incremental compilation error with {:?}", dep_node))
+ .help(&format!("This is a known issue with the compiler. Run {} to allow your project to compile", run_cmd))
+ .note(&format!("Please follow the instructions below to create a bug report with the provided information"))
+ .note(&format!("See <https://github.com/rust-lang/rust/issues/84970> for more information."))
+ .emit();
+ panic!("Found unstable fingerprints for {:?}: {:?}", dep_node, result);
+ }
}
fn force_query_with_job<C, CTX>(
diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs
index 75078a12311..85448b7fe72 100644
--- a/compiler/rustc_session/src/config.rs
+++ b/compiler/rustc_session/src/config.rs
@@ -1885,7 +1885,12 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options {
check_thread_count(&debugging_opts, error_format);
- let incremental = cg.incremental.as_ref().map(PathBuf::from);
+ let incremental =
+ if std::env::var_os("RUSTC_FORCE_INCREMENTAL").map(|v| v == "1").unwrap_or(false) {
+ cg.incremental.as_ref().map(PathBuf::from)
+ } else {
+ None
+ };
if debugging_opts.profile && incremental.is_some() {
early_error(
diff --git a/src/doc/rustc/src/codegen-options/index.md b/src/doc/rustc/src/codegen-options/index.md
index 1883346430b..4eb2aa99175 100644
--- a/src/doc/rustc/src/codegen-options/index.md
+++ b/src/doc/rustc/src/codegen-options/index.md
@@ -161,6 +161,9 @@ to save information after compiling a crate to be reused when recompiling the
crate, improving re-compile times. This takes a path to a directory where
incremental files will be stored.
+Note that this option currently does not take effect unless
+`RUSTC_FORCE_INCREMENTAL=1` in the environment.
+
## inline-threshold
This option lets you set the default threshold for inlining a function. It
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs
index 7aa3d4ab09e..6aebf4b6044 100644
--- a/src/tools/compiletest/src/runtest.rs
+++ b/src/tools/compiletest/src/runtest.rs
@@ -229,7 +229,15 @@ pub fn run(config: Config, testpaths: &TestPaths, revision: Option<&str>) {
print!("\n\n");
}
debug!("running {:?}", testpaths.file.display());
- let props = TestProps::from_file(&testpaths.file, revision, &config);
+ let mut props = TestProps::from_file(&testpaths.file, revision, &config);
+
+ // Currently, incremental is soft disabled unless this environment
+ // variable is set. A bunch of our tests assume it's enabled, though - so
+ // just enable it for our tests.
+ //
+ // This is deemed preferable to ignoring those tests; we still want to test
+ // incremental somewhat, as users can opt in to it.
+ props.rustc_env.push((String::from("RUSTC_FORCE_INCREMENTAL"), String::from("1")));
let cx = TestCx { config: &config, props: &props, testpaths, revision };
create_dir_all(&cx.output_base_dir()).unwrap();
@@ -240,7 +248,11 @@ pub fn run(config: Config, testpaths: &TestPaths, revision: Option<&str>) {
assert!(!props.revisions.is_empty(), "Incremental tests require revisions.");
cx.init_incremental_test();
for revision in &props.revisions {
- let revision_props = TestProps::from_file(&testpaths.file, Some(revision), &config);
+ let mut revision_props = TestProps::from_file(&testpaths.file, Some(revision), &config);
+ // See above - need to enable it explicitly for now.
+ revision_props
+ .rustc_env
+ .push((String::from("RUSTC_FORCE_INCREMENTAL"), String::from("1")));
let rev_cx = TestCx {
config: &config,
props: &revision_props,
diff --git a/src/version b/src/version
index a63cb35e6f0..154cb93b2cc 100644
--- a/src/version
+++ b/src/version
@@ -1 +1 @@
-1.52.0
+1.52.1