Disarm `time` bomb (diagnostics)
Revert "Rollup merge of #129343 - estebank:time-version, r=jieyouxu"
This reverts commit 26f75a65d70773e4520634b9f6599ddf08c499e6, reversing
changes made to 2572e0e8c9d5d671eccb1d5791e55c929c4720f4.
Imports are modified to fix merge conflicts and remove unused ones.
diff --git a/compiler/rustc_span/src/symbol.rs b/compiler/rustc_span/src/symbol.rs
index f2f6d1a..b6cb611 100644
--- a/compiler/rustc_span/src/symbol.rs
+++ b/compiler/rustc_span/src/symbol.rs
@@ -2099,7 +2099,6 @@
three_way_compare,
thumb2,
thumb_mode: "thumb-mode",
- time,
tmm_reg,
to_owned_method,
to_string,
diff --git a/compiler/rustc_trait_selection/messages.ftl b/compiler/rustc_trait_selection/messages.ftl
index cf6dd40..00922c6 100644
--- a/compiler/rustc_trait_selection/messages.ftl
+++ b/compiler/rustc_trait_selection/messages.ftl
@@ -452,8 +452,6 @@
}
.label = type must be known at this point
-trait_selection_type_annotations_needed_error_time = this is an inference error on crate `time` caused by an API change in Rust 1.80.0; update `time` to version `>=0.3.35` by calling `cargo update`
-
trait_selection_types_declared_different = these two types are declared with different lifetimes...
trait_selection_unable_to_construct_constant_value = unable to construct a constant value for the unevaluated constant {$unevaluated}
diff --git a/compiler/rustc_trait_selection/src/error_reporting/infer/need_type_info.rs b/compiler/rustc_trait_selection/src/error_reporting/infer/need_type_info.rs
index de9a50f..cb1c9c7 100644
--- a/compiler/rustc_trait_selection/src/error_reporting/infer/need_type_info.rs
+++ b/compiler/rustc_trait_selection/src/error_reporting/infer/need_type_info.rs
@@ -6,7 +6,7 @@
use rustc_errors::{Diag, IntoDiagArg};
use rustc_hir as hir;
use rustc_hir::def::{CtorOf, DefKind, Namespace, Res};
-use rustc_hir::def_id::{DefId, LOCAL_CRATE, LocalDefId};
+use rustc_hir::def_id::{DefId, LocalDefId};
use rustc_hir::intravisit::{self, Visitor};
use rustc_hir::{Body, Closure, Expr, ExprKind, FnRetTy, HirId, LetStmt, LocalSource};
use rustc_middle::bug;
@@ -17,7 +17,7 @@
self, GenericArg, GenericArgKind, GenericArgsRef, InferConst, IsSuggestable, Term, TermKind,
Ty, TyCtxt, TypeFoldable, TypeFolder, TypeSuperFoldable, TypeVisitableExt, TypeckResults,
};
-use rustc_span::{BytePos, DUMMY_SP, FileName, Ident, Span, sym};
+use rustc_span::{BytePos, DUMMY_SP, Ident, Span, sym};
use tracing::{debug, instrument, warn};
use super::nice_region_error::placeholder_error::Highlighted;
@@ -438,7 +438,6 @@ fn bad_inference_failure_err(
bad_label,
was_written: false,
path: Default::default(),
- time_version: false,
}),
TypeAnnotationNeeded::E0283 => self.dcx().create_err(AmbiguousImpl {
span,
@@ -630,10 +629,6 @@ pub fn emit_inference_failure_err(
}
}
}
-
- let time_version =
- self.detect_old_time_crate_version(failure_span, &kind, &mut infer_subdiags);
-
match error_code {
TypeAnnotationNeeded::E0282 => self.dcx().create_err(AnnotationRequired {
span,
@@ -645,7 +640,6 @@ pub fn emit_inference_failure_err(
bad_label: None,
was_written: path.is_some(),
path: path.unwrap_or_default(),
- time_version,
}),
TypeAnnotationNeeded::E0283 => self.dcx().create_err(AmbiguousImpl {
span,
@@ -671,42 +665,6 @@ pub fn emit_inference_failure_err(
}),
}
}
-
- /// Detect the inference regression on crate `time` <= 0.3.35 and emit a more targeted error.
- /// <https://github.com/rust-lang/rust/issues/127343>
- // FIXME: we should figure out a more generic version of doing this, ideally in cargo itself.
- fn detect_old_time_crate_version(
- &self,
- span: Option<Span>,
- kind: &InferSourceKind<'_>,
- // We will clear the non-actionable suggestion from the error to reduce noise.
- infer_subdiags: &mut Vec<SourceKindSubdiag<'_>>,
- ) -> bool {
- // FIXME(#129461): We are time-boxing this code in the compiler. It'll start failing
- // compilation once we promote 1.89 to beta, which will happen in 9 months from now.
- #[cfg(not(version("1.89")))]
- const fn version_check() {}
- #[cfg(version("1.89"))]
- const fn version_check() {
- panic!("remove this check as presumably the ecosystem has moved from needing it");
- }
- const { version_check() };
- // Only relevant when building the `time` crate.
- if self.infcx.tcx.crate_name(LOCAL_CRATE) == sym::time
- && let Some(span) = span
- && let InferSourceKind::LetBinding { pattern_name, .. } = kind
- && let Some(name) = pattern_name
- && name.as_str() == "items"
- && let FileName::Real(file) = self.infcx.tcx.sess.source_map().span_to_filename(span)
- {
- let path = file.local_path_if_available().to_string_lossy();
- if path.contains("format_description") && path.contains("parse") {
- infer_subdiags.clear();
- return true;
- }
- }
- false
- }
}
#[derive(Debug)]
diff --git a/compiler/rustc_trait_selection/src/errors.rs b/compiler/rustc_trait_selection/src/errors.rs
index 04cae1c..8ab4d79 100644
--- a/compiler/rustc_trait_selection/src/errors.rs
+++ b/compiler/rustc_trait_selection/src/errors.rs
@@ -219,8 +219,6 @@ pub struct AnnotationRequired<'a> {
#[note(trait_selection_full_type_written)]
pub was_written: bool,
pub path: PathBuf,
- #[note(trait_selection_type_annotations_needed_error_time)]
- pub time_version: bool,
}
// Copy of `AnnotationRequired` for E0283
diff --git a/tests/ui/inference/detect-old-time-version-format_description-parse.rs b/tests/ui/inference/detect-old-time-version-format_description-parse.rs
deleted file mode 100644
index 386b2a3..0000000
--- a/tests/ui/inference/detect-old-time-version-format_description-parse.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-#![crate_name = "time"]
-#![crate_type = "lib"]
-
-// This code compiled without error in Rust 1.79, but started failing in 1.80
-// after the addition of several `impl FromIterator<_> for Box<str>`.
-
-pub fn parse() -> Option<Vec<()>> {
- let iter = std::iter::once(Some(())).map(|o| o.map(Into::into));
- let items = iter.collect::<Option<Box<_>>>()?; //~ ERROR E0282
- //~^ NOTE this is an inference error on crate `time` caused by an API change in Rust 1.80.0; update `time` to version `>=0.3.35`
- Some(items.into())
- //~^ NOTE type must be known at this point
-}
diff --git a/tests/ui/inference/detect-old-time-version-format_description-parse.stderr b/tests/ui/inference/detect-old-time-version-format_description-parse.stderr
deleted file mode 100644
index a70ce9d..0000000
--- a/tests/ui/inference/detect-old-time-version-format_description-parse.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0282]: type annotations needed for `Box<_>`
- --> $DIR/detect-old-time-version-format_description-parse.rs:9:9
- |
-LL | let items = iter.collect::<Option<Box<_>>>()?;
- | ^^^^^
-LL |
-LL | Some(items.into())
- | ---- type must be known at this point
- |
- = note: this is an inference error on crate `time` caused by an API change in Rust 1.80.0; update `time` to version `>=0.3.35` by calling `cargo update`
-
-error: aborting due to 1 previous error
-
-For more information about this error, try `rustc --explain E0282`.