diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2020-03-10 20:41:31 +0100 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2020-03-10 20:41:31 +0100 |
| commit | 240d56c33c1a0b7097e7b7da475f61fa1d57400f (patch) | |
| tree | 46f1844ac5aad923f8ec3b7d19ccce384d3ac8f2 /src/vtable.rs | |
| parent | c53297f5ebe46f4d3ef0627c985a03871bd23780 (diff) | |
Support virtual calls with unsized self argument
Diffstat (limited to 'src/vtable.rs')
| -rw-r--r-- | src/vtable.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/vtable.rs b/src/vtable.rs index 5ce975d3124..e4b3a9942cf 100644 --- a/src/vtable.rs +++ b/src/vtable.rs @@ -47,7 +47,16 @@ pub fn get_ptr_and_method_ref<'tcx>( arg: CValue<'tcx>, idx: usize, ) -> (Value, Value) { - let (ptr, vtable) = arg.load_scalar_pair(fx); + let (ptr, vtable) = if let Abi::ScalarPair(_, _) = arg.layout().abi { + arg.load_scalar_pair(fx) + } else { + let (ptr, vtable) = arg.try_to_ptr().unwrap(); + ( + ptr.get_addr(fx), + vtable.unwrap() + ) + }; + let usize_size = fx.layout_of(fx.tcx.types.usize).size.bytes(); let func_ref = fx.bcx.ins().load( pointer_ty(fx.tcx), |
