about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEduard Burtescu <edy.burt@gmail.com>2016-05-09 22:52:01 +0300
committerEduard Burtescu <edy.burt@gmail.com>2016-05-09 22:52:01 +0300
commitd460597e3373c7ec2a54f64faf6a1f8874b958bd (patch)
tree2d441ae74f0584c4515dae966bd05537154c24a6
parent9709dff7e3b9aecd392465529790edd906d95037 (diff)
downloadrust-d460597e3373c7ec2a54f64faf6a1f8874b958bd.tar.gz
rust-d460597e3373c7ec2a54f64faf6a1f8874b958bd.zip
trans: monomorphize varidiac call argument types.
-rw-r--r--src/librustc_trans/mir/block.rs3
-rw-r--r--src/test/run-pass/mir_trans_calls_variadic.rs6
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);
 }