Skip to content

Commit f2a301d

Browse files
committed
Move code from all callers of vtable_methods into the function body
1 parent 69b1c95 commit f2a301d

File tree

5 files changed

+13
-13
lines changed

5 files changed

+13
-13
lines changed

src/librustc/traits/mod.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,7 @@ fn substitute_normalize_and_test_predicates<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx
896896
fn vtable_methods<'a, 'tcx>(
897897
tcx: TyCtxt<'a, 'tcx, 'tcx>,
898898
trait_ref: ty::PolyTraitRef<'tcx>)
899-
-> Lrc<Vec<Option<(DefId, &'tcx Substs<'tcx>)>>>
899+
-> Lrc<Vec<Option<ty::Instance<'tcx>>>>
900900
{
901901
debug!("vtable_methods({:?})", trait_ref);
902902

@@ -947,8 +947,12 @@ fn vtable_methods<'a, 'tcx>(
947947
debug!("vtable_methods: predicates do not hold");
948948
return None;
949949
}
950-
951-
Some((def_id, substs))
950+
Some(ty::Instance::resolve(
951+
tcx,
952+
ty::ParamEnv::reveal_all(),
953+
def_id,
954+
substs,
955+
).unwrap())
952956
})
953957
}).collect()
954958
)

src/librustc/ty/query/mod.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -354,8 +354,10 @@ define_queries! { <'tcx>
354354
},
355355

356356
Other {
357+
/// List of methods on a vtable. The final vtable won't have holes where `None`, but will
358+
/// simply skip methods that aren't object safe
357359
[] fn vtable_methods: vtable_methods_node(ty::PolyTraitRef<'tcx>)
358-
-> Lrc<Vec<Option<(DefId, &'tcx Substs<'tcx>)>>>,
360+
-> Lrc<Vec<Option<ty::Instance<'tcx>>>>,
359361
},
360362

361363
Codegen {

src/librustc_codegen_llvm/meth.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ pub fn get_vtable(
9797
let trait_ref = trait_ref.with_self_ty(tcx, ty);
9898
let methods = tcx.vtable_methods(trait_ref);
9999
let methods = methods.iter().cloned().map(|opt_mth| {
100-
opt_mth.map_or(nullptr, |(def_id, substs)| {
101-
callee::resolve_and_get_fn(cx, def_id, substs)
100+
opt_mth.map_or(nullptr, |instance| {
101+
callee::get_fn(cx, instance)
102102
})
103103
});
104104
components.extend(methods);

src/librustc_mir/interpret/traits.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
6666

6767
if let Some(methods) = methods {
6868
for (i, method) in methods.iter().enumerate() {
69-
if let Some((def_id, substs)) = *method {
70-
let instance = self.resolve(def_id, substs)?;
69+
if let Some(instance) = *method {
7170
let fn_ptr = self.memory.create_fn_alloc(instance);
7271
let method_ptr = vtable.offset(ptr_size * (3 + i as u64), &self)?;
7372
self.memory.write_ptr_sized(method_ptr, ptr_align, Scalar::Ptr(fn_ptr).into())?;

src/librustc_mir/monomorphize/collector.rs

-5
Original file line numberDiff line numberDiff line change
@@ -914,11 +914,6 @@ fn create_mono_items_for_vtable_methods<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
914914
// Walk all methods of the trait, including those of its supertraits
915915
let methods = tcx.vtable_methods(poly_trait_ref);
916916
let methods = methods.iter().cloned().filter_map(|method| method)
917-
.map(|(def_id, substs)| ty::Instance::resolve(
918-
tcx,
919-
ty::ParamEnv::reveal_all(),
920-
def_id,
921-
substs).unwrap())
922917
.filter(|&instance| should_monomorphize_locally(tcx, &instance))
923918
.map(|instance| create_fn_mono_item(instance));
924919
output.extend(methods);

0 commit comments

Comments
 (0)