about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCharles Lew <crlf0710@gmail.com>2021-08-18 12:45:18 +0800
committerCharles Lew <crlf0710@gmail.com>2021-08-18 13:00:27 +0800
commit03ed8c811513a41ad076ae206cbc2a930888bef2 (patch)
tree8e74b21c344d2700e49c924efe574604d863017b
parent1bfa59afe042e03371c7c62860e94db1e20bd657 (diff)
downloadrust-03ed8c811513a41ad076ae206cbc2a930888bef2.tar.gz
rust-03ed8c811513a41ad076ae206cbc2a930888bef2.zip
Fold `vtable_trait_upcasting_coercion_new_vptr_slot` logic into obligation processing.
-rw-r--r--src/unsize.rs17
1 files changed, 3 insertions, 14 deletions
diff --git a/src/unsize.rs b/src/unsize.rs
index d9c4647cba3..fd96858010e 100644
--- a/src/unsize.rs
+++ b/src/unsize.rs
@@ -31,21 +31,10 @@ pub(crate) fn unsized_info<'tcx>(
             if data_a.principal_def_id() == data_b.principal_def_id() {
                 return old_info;
             }
-            // trait upcasting coercion
 
-            // if both of the two `principal`s are `None`, this function would have returned early above.
-            // and if one of the two `principal`s is `None`, typechecking would have rejected this case.
-            let principal_a = data_a
-                .principal()
-                .expect("unsized_info: missing principal trait for trait upcasting coercion");
-            let principal_b = data_b
-                .principal()
-                .expect("unsized_info: missing principal trait for trait upcasting coercion");
-
-            let vptr_entry_idx = fx.tcx.vtable_trait_upcasting_coercion_new_vptr_slot((
-                principal_a.with_self_ty(fx.tcx, source),
-                principal_b.with_self_ty(fx.tcx, source),
-            ));
+            // trait upcasting coercion
+            let vptr_entry_idx =
+                fx.tcx.vtable_trait_upcasting_coercion_new_vptr_slot((source, target));
 
             if let Some(entry_idx) = vptr_entry_idx {
                 let entry_idx = u32::try_from(entry_idx).unwrap();