From a9e657dbfccd2fb0dbbd53ddc29fcfc000377561 Mon Sep 17 00:00:00 2001 From: b-naber Date: Thu, 22 Sep 2022 14:22:51 +0200 Subject: [PATCH 1/2] don't convert valtree to constvalue during normalization --- .../src/traits/query/normalize.rs | 20 +------------------ 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/compiler/rustc_trait_selection/src/traits/query/normalize.rs b/compiler/rustc_trait_selection/src/traits/query/normalize.rs index 88000d46978..a3ac24f27d1 100644 --- a/compiler/rustc_trait_selection/src/traits/query/normalize.rs +++ b/compiler/rustc_trait_selection/src/traits/query/normalize.rs @@ -351,25 +351,7 @@ impl<'cx, 'tcx> FallibleTypeFolder<'tcx> for QueryNormalizer<'cx, 'tcx> { &mut self, constant: mir::ConstantKind<'tcx>, ) -> Result, Self::Error> { - Ok(match constant { - mir::ConstantKind::Ty(c) => { - let const_folded = c.try_super_fold_with(self)?; - match const_folded.kind() { - ty::ConstKind::Value(valtree) => { - let tcx = self.infcx.tcx; - let ty = const_folded.ty(); - let const_val = tcx.valtree_to_const_val((ty, valtree)); - debug!(?ty, ?valtree, ?const_val); - - mir::ConstantKind::Val(const_val, ty) - } - _ => mir::ConstantKind::Ty(const_folded), - } - } - mir::ConstantKind::Val(_, _) | mir::ConstantKind::Unevaluated(..) => { - constant.try_super_fold_with(self)? - } - }) + constant.try_super_fold_with(self) } #[inline] From ded3edac9ad2dd014eed22d5c9050af6eb22882f Mon Sep 17 00:00:00 2001 From: b-naber Date: Fri, 23 Sep 2022 14:25:30 +0200 Subject: [PATCH 2/2] fix test --- .../wrong-type-assume.rs | 4 -- .../wrong-type-assume.stderr | 37 +++---------------- 2 files changed, 6 insertions(+), 35 deletions(-) diff --git a/src/test/ui/transmutability/malformed-program-gracefulness/wrong-type-assume.rs b/src/test/ui/transmutability/malformed-program-gracefulness/wrong-type-assume.rs index 354abf99d4d..52aa4bb3101 100644 --- a/src/test/ui/transmutability/malformed-program-gracefulness/wrong-type-assume.rs +++ b/src/test/ui/transmutability/malformed-program-gracefulness/wrong-type-assume.rs @@ -24,10 +24,6 @@ mod assert { Src, Context, { from_options(ASSUME_ALIGNMENT, ASSUME_LIFETIMES, ASSUME_SAFETY, ASSUME_VALIDITY) } - //~^ ERROR E0080 - //~| ERROR E0080 - //~| ERROR E0080 - //~| ERROR E0080 >, {} diff --git a/src/test/ui/transmutability/malformed-program-gracefulness/wrong-type-assume.stderr b/src/test/ui/transmutability/malformed-program-gracefulness/wrong-type-assume.stderr index a258f2ecea6..c6d93876cfa 100644 --- a/src/test/ui/transmutability/malformed-program-gracefulness/wrong-type-assume.stderr +++ b/src/test/ui/transmutability/malformed-program-gracefulness/wrong-type-assume.stderr @@ -1,52 +1,27 @@ error[E0308]: mismatched types - --> $DIR/wrong-type-assume.rs:53:51 + --> $DIR/wrong-type-assume.rs:49:51 | LL | assert::is_transmutable::(); | ^^^ expected `bool`, found `u8` -error[E0080]: evaluation of `assert::is_transmutable::::{constant#0}` failed - --> $DIR/wrong-type-assume.rs:26:15 - | -LL | { from_options(ASSUME_ALIGNMENT, ASSUME_LIFETIMES, ASSUME_SAFETY, ASSUME_VALIDITY) } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ referenced constant has errors - error[E0308]: mismatched types - --> $DIR/wrong-type-assume.rs:54:58 + --> $DIR/wrong-type-assume.rs:50:58 | LL | assert::is_transmutable::(); | ^^^ expected `bool`, found `u8` -error[E0080]: evaluation of `assert::is_transmutable::::{constant#0}` failed - --> $DIR/wrong-type-assume.rs:26:15 - | -LL | { from_options(ASSUME_ALIGNMENT, ASSUME_LIFETIMES, ASSUME_SAFETY, ASSUME_VALIDITY) } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ referenced constant has errors - error[E0308]: mismatched types - --> $DIR/wrong-type-assume.rs:55:65 + --> $DIR/wrong-type-assume.rs:51:65 | LL | assert::is_transmutable::(); | ^^^ expected `bool`, found `u8` -error[E0080]: evaluation of `assert::is_transmutable::::{constant#0}` failed - --> $DIR/wrong-type-assume.rs:26:15 - | -LL | { from_options(ASSUME_ALIGNMENT, ASSUME_LIFETIMES, ASSUME_SAFETY, ASSUME_VALIDITY) } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ referenced constant has errors - error[E0308]: mismatched types - --> $DIR/wrong-type-assume.rs:56:72 + --> $DIR/wrong-type-assume.rs:52:72 | LL | assert::is_transmutable::(); | ^^^ expected `bool`, found `u8` -error[E0080]: evaluation of `assert::is_transmutable::::{constant#0}` failed - --> $DIR/wrong-type-assume.rs:26:15 - | -LL | { from_options(ASSUME_ALIGNMENT, ASSUME_LIFETIMES, ASSUME_SAFETY, ASSUME_VALIDITY) } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ referenced constant has errors +error: aborting due to 4 previous errors -error: aborting due to 8 previous errors - -Some errors have detailed explanations: E0080, E0308. -For more information about an error, try `rustc --explain E0080`. +For more information about this error, try `rustc --explain E0308`.