Importing rustc-1.53.0
Bug: 194400612
Change-Id: Id2f38eeabc8325fff960e46b89b1cc7216f5227c
diff --git a/compiler/rustc_middle/src/traits/mod.rs b/compiler/rustc_middle/src/traits/mod.rs
index 0bd0a70..c9b73c6 100644
--- a/compiler/rustc_middle/src/traits/mod.rs
+++ b/compiler/rustc_middle/src/traits/mod.rs
@@ -9,7 +9,7 @@
mod structural_impls;
use crate::infer::canonical::Canonical;
-use crate::mir::interpret::ErrorHandled;
+use crate::mir::abstract_const::NotConstEvaluatable;
use crate::ty::subst::SubstsRef;
use crate::ty::{self, AdtKind, Ty, TyCtxt};
@@ -323,6 +323,9 @@
/// #[feature(trivial_bounds)] is not enabled
TrivialBound,
+
+ /// If `X` is the concrete type of an opaque type `impl Y`, then `X` must implement `Y`
+ OpaqueType,
}
impl ObligationCauseCode<'_> {
@@ -341,7 +344,7 @@
// `ObligationCauseCode` is used a lot. Make sure it doesn't unintentionally get bigger.
#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-static_assert_size!(ObligationCauseCode<'_>, 32);
+static_assert_size!(ObligationCauseCode<'_>, 40);
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum StatementAsExpression {
@@ -398,7 +401,7 @@
ty::error::TypeError<'tcx>,
),
TraitNotObjectSafe(DefId),
- ConstEvalFailure(ErrorHandled),
+ NotConstEvaluatable(NotConstEvaluatable),
Overflow,
}
@@ -667,6 +670,9 @@
/// Associated const.
AssocConst(Symbol, Span),
+
+ /// GAT
+ GAT(Symbol, Span),
}
impl ObjectSafetyViolation {
@@ -712,6 +718,9 @@
format!("it contains associated `const` `{}`", name).into()
}
ObjectSafetyViolation::AssocConst(..) => "it contains this associated `const`".into(),
+ ObjectSafetyViolation::GAT(name, _) => {
+ format!("it contains the generic associated type `{}`", name).into()
+ }
}
}
@@ -770,6 +779,7 @@
);
}
ObjectSafetyViolation::AssocConst(name, _)
+ | ObjectSafetyViolation::GAT(name, _)
| ObjectSafetyViolation::Method(name, ..) => {
err.help(&format!("consider moving `{}` to another trait", name));
}
@@ -783,6 +793,7 @@
ObjectSafetyViolation::SupertraitSelf(spans)
| ObjectSafetyViolation::SizedSelf(spans) => spans.clone(),
ObjectSafetyViolation::AssocConst(_, span)
+ | ObjectSafetyViolation::GAT(_, span)
| ObjectSafetyViolation::Method(_, _, span)
if *span != DUMMY_SP =>
{
diff --git a/compiler/rustc_middle/src/traits/query.rs b/compiler/rustc_middle/src/traits/query.rs
index f9cadb3..b0ab0c9 100644
--- a/compiler/rustc_middle/src/traits/query.rs
+++ b/compiler/rustc_middle/src/traits/query.rs
@@ -3,7 +3,7 @@
//! which makes a canonical query by replacing unbound inference
//! variables and regions, so that results can be reused more broadly.
//! The providers for the queries defined here can be found in
-//! `librustc_traits`.
+//! `rustc_traits`.
use crate::ich::StableHashingContext;
use crate::infer::canonical::{Canonical, QueryResponse};
@@ -44,24 +44,12 @@
pub b: Ty<'tcx>,
}
- impl<'tcx> Eq<'tcx> {
- pub fn new(a: Ty<'tcx>, b: Ty<'tcx>) -> Self {
- Self { a, b }
- }
- }
-
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, TypeFoldable, Lift)]
pub struct Subtype<'tcx> {
pub sub: Ty<'tcx>,
pub sup: Ty<'tcx>,
}
- impl<'tcx> Subtype<'tcx> {
- pub fn new(sub: Ty<'tcx>, sup: Ty<'tcx>) -> Self {
- Self { sub, sup }
- }
- }
-
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, TypeFoldable, Lift)]
pub struct ProvePredicate<'tcx> {
pub predicate: Predicate<'tcx>,