From b476969e0f893734ecddd1e7ed1e81c26af94246 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Sun, 9 Nov 2025 02:30:46 +0100 Subject: [PATCH] Allow unnormalized types in drop elaboration --- .../rustc_mir_transform/src/elaborate_drop.rs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/compiler/rustc_mir_transform/src/elaborate_drop.rs b/compiler/rustc_mir_transform/src/elaborate_drop.rs index de96b1f255a6e..fed53eb29f62e 100644 --- a/compiler/rustc_mir_transform/src/elaborate_drop.rs +++ b/compiler/rustc_mir_transform/src/elaborate_drop.rs @@ -511,19 +511,12 @@ where let tcx = self.tcx(); assert_eq!(self.elaborator.typing_env().typing_mode, ty::TypingMode::PostAnalysis); - let field_ty = match tcx.try_normalize_erasing_regions( - self.elaborator.typing_env(), - field.ty(tcx, args), - ) { - Ok(t) => t, - Err(_) => Ty::new_error( - self.tcx(), - self.tcx().dcx().span_delayed_bug( - self.elaborator.body().span, - "Error normalizing in drop elaboration.", - ), - ), - }; + let field_ty = field.ty(tcx, args); + // We silently leave an unnormalized type here to support polymorphic drop + // elaboration for users of rustc internal APIs + let field_ty = tcx + .try_normalize_erasing_regions(self.elaborator.typing_env(), field_ty) + .unwrap_or(field_ty); (tcx.mk_place_field(base_place, field_idx, field_ty), subpath) })