Disarm time bomb (diagnostics)
Revert "Rollup merge of #129343 - estebank:time-version, r=jieyouxu" This reverts commit26f75a65d7, reversing changes made to2572e0e8c9. Imports are modified to fix merge conflicts and remove unused ones.
This commit is contained in:
@@ -2099,7 +2099,6 @@ symbols! {
|
||||
three_way_compare,
|
||||
thumb2,
|
||||
thumb_mode: "thumb-mode",
|
||||
time,
|
||||
tmm_reg,
|
||||
to_owned_method,
|
||||
to_string,
|
||||
|
||||
@@ -452,8 +452,6 @@ trait_selection_type_annotations_needed = {$source_kind ->
|
||||
}
|
||||
.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}
|
||||
|
||||
@@ -6,7 +6,7 @@ use rustc_errors::codes::*;
|
||||
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 @@ use rustc_middle::ty::{
|
||||
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 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||
bad_label,
|
||||
was_written: false,
|
||||
path: Default::default(),
|
||||
time_version: false,
|
||||
}),
|
||||
TypeAnnotationNeeded::E0283 => self.dcx().create_err(AmbiguousImpl {
|
||||
span,
|
||||
@@ -630,10 +629,6 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||
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 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
/// 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)]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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`.
|
||||
Reference in New Issue
Block a user