diff options
| author | Eduard Burtescu <edy.burt@gmail.com> | 2016-05-09 22:52:01 +0300 |
|---|---|---|
| committer | Eduard Burtescu <edy.burt@gmail.com> | 2016-05-09 22:52:01 +0300 |
| commit | d460597e3373c7ec2a54f64faf6a1f8874b958bd (patch) | |
| tree | 2d441ae74f0584c4515dae966bd05537154c24a6 | |
| parent | 9709dff7e3b9aecd392465529790edd906d95037 (diff) | |
| download | rust-d460597e3373c7ec2a54f64faf6a1f8874b958bd.tar.gz rust-d460597e3373c7ec2a54f64faf6a1f8874b958bd.zip | |
trans: monomorphize varidiac call argument types.
| -rw-r--r-- | src/librustc_trans/mir/block.rs | 3 | ||||
| -rw-r--r-- | src/test/run-pass/mir_trans_calls_variadic.rs | 6 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/librustc_trans/mir/block.rs b/src/librustc_trans/mir/block.rs index e605ef81c58..d5400110046 100644 --- a/src/librustc_trans/mir/block.rs +++ b/src/librustc_trans/mir/block.rs @@ -213,7 +213,8 @@ impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> { let extra_args = &args[sig.inputs.len()..]; let extra_args = extra_args.iter().map(|op_arg| { - self.mir.operand_ty(bcx.tcx(), op_arg) + let op_ty = self.mir.operand_ty(bcx.tcx(), op_arg); + bcx.monomorphize(&op_ty) }).collect::<Vec<_>>(); let fn_ty = callee.direct_fn_type(bcx.ccx(), &extra_args); diff --git a/src/test/run-pass/mir_trans_calls_variadic.rs b/src/test/run-pass/mir_trans_calls_variadic.rs index ff66daace38..7f711b2758d 100644 --- a/src/test/run-pass/mir_trans_calls_variadic.rs +++ b/src/test/run-pass/mir_trans_calls_variadic.rs @@ -16,17 +16,17 @@ extern { } #[rustc_mir] -fn test(a: i64, b: i64, c: i64, d: i64, e: i64, f: i64) -> i64 { +fn test<T, U>(a: i64, b: i64, c: i64, d: i64, e: i64, f: T, g: U) -> i64 { unsafe { rust_interesting_average(6, a, a as f64, b, b as f64, c, c as f64, d, d as f64, e, e as f64, - f, f as f64) as i64 + f, g) as i64 } } fn main(){ - assert_eq!(test(10, 20, 30, 40, 50, 60), 70); + assert_eq!(test(10, 20, 30, 40, 50, 60_i64, 60.0_f64), 70); } |
