[MIR-trans] Fix handling of small aggregate arguments

Function arguments that are small aggregates get passed as integer types
instead. To correctly handle that, we need to use store_ty instead of
plain Store.
This commit is contained in:
Björn Steinbrink 2015-11-04 16:18:15 +01:00
parent 1ad89e0de6
commit fe3a609b0b
2 changed files with 20 additions and 1 deletions

View File

@ -177,7 +177,7 @@ fn arg_value_refs<'bcx, 'tcx>(bcx: Block<'bcx, 'tcx>,
let llarg = llvm::get_param(fcx.llfn, idx);
idx += 1;
let lltemp = base::alloc_ty(bcx, arg_ty, &format!("arg{}", arg_index));
build::Store(bcx, llarg, lltemp);
base::store_ty(bcx, llarg, lltemp, arg_ty);
lltemp
};
LvalueRef::new(llval, LvalueTy::from_ty(arg_ty))

View File

@ -0,0 +1,19 @@
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(rustc_attrs)]
#[rustc_mir]
fn foo((x, y): (i8, i8)) {
}
fn main() {
foo((0, 1));
}