about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Goulet <michael@errs.io>2023-08-09 00:31:26 +0000
committerMaybe Lapkin <waffle.lapkin@gmail.com>2024-10-17 20:43:31 +0200
commit2f1b15f145a04e08bebbde522c9ece8f0cad3706 (patch)
tree736b2ea990a0306661b9bd8a1b350f901e209c2c
parent270fb2130c979fe1d1e520dbb8474aa13257d16b (diff)
downloadrust-2f1b15f145a04e08bebbde522c9ece8f0cad3706.tar.gz
rust-2f1b15f145a04e08bebbde522c9ece8f0cad3706.zip
Allow dropping dyn principal
-rw-r--r--src/unsize.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/unsize.rs b/src/unsize.rs
index 5c297ebfadb..336934354e1 100644
--- a/src/unsize.rs
+++ b/src/unsize.rs
@@ -34,7 +34,9 @@ pub(crate) fn unsized_info<'tcx>(
         {
             let old_info =
                 old_info.expect("unsized_info: missing old info for trait upcasting coercion");
-            if data_a.principal_def_id() == data_b.principal_def_id() {
+            let b_principal_def_id = data_b.principal_def_id();
+            if data_a.principal_def_id() == b_principal_def_id || b_principal_def_id.is_none() {
+                // A NOP cast that doesn't actually change anything, should be allowed even with invalid vtables.
                 debug_assert!(
                     validate_trivial_unsize(fx.tcx, data_a, data_b),
                     "NOP unsize vtable changed principal trait ref: {data_a} -> {data_b}"