From 408a086f97992f4b035e20303242c527e32b2491 Mon Sep 17 00:00:00 2001 From: Ellen Date: Wed, 12 Jan 2022 23:38:32 +0000 Subject: [PATCH] unrevert # 88557 --- .../src/traits/object_safety.rs | 33 +++---------------- 1 file changed, 5 insertions(+), 28 deletions(-) diff --git a/compiler/rustc_trait_selection/src/traits/object_safety.rs b/compiler/rustc_trait_selection/src/traits/object_safety.rs index 8a1864278de..185d64eab70 100644 --- a/compiler/rustc_trait_selection/src/traits/object_safety.rs +++ b/compiler/rustc_trait_selection/src/traits/object_safety.rs @@ -813,9 +813,10 @@ fn visit_ty(&mut self, t: Ty<'tcx>) -> ControlFlow { } } - fn visit_const(&mut self, ct: &'tcx ty::Const<'tcx>) -> ControlFlow { - self.visit_ty(ct.ty)?; - + fn visit_unevaluated_const( + &mut self, + uv: ty::Unevaluated<'tcx>, + ) -> ControlFlow { // Constants can only influence object safety if they reference `Self`. // This is only possible for unevaluated constants, so we walk these here. // @@ -829,7 +830,7 @@ fn visit_const(&mut self, ct: &'tcx ty::Const<'tcx>) -> ControlFlow self.visit_const(leaf), @@ -843,30 +844,6 @@ fn visit_const(&mut self, ct: &'tcx ty::Const<'tcx>) -> ControlFlow) -> ControlFlow { - if let ty::PredicateKind::ConstEvaluatable(uv) = pred.kind().skip_binder() { - // FIXME(generic_const_exprs): We should probably deduplicate the logic for - // `AbstractConst`s here, it might make sense to change `ConstEvaluatable` to - // take a `ty::Const` instead. - use rustc_middle::thir::abstract_const::Node; - if let Ok(Some(ct)) = AbstractConst::new(self.tcx, uv) { - const_evaluatable::walk_abstract_const(self.tcx, ct, |node| { - match node.root(self.tcx) { - Node::Leaf(leaf) => self.visit_const(leaf), - Node::Cast(_, _, ty) => self.visit_ty(ty), - Node::Binop(..) | Node::UnaryOp(..) | Node::FunctionCall(_, _) => { - ControlFlow::CONTINUE - } - } - }) - } else { - ControlFlow::CONTINUE - } - } else { - pred.super_visit_with(self) - } - } } value