Skip to content

Commit 8d3ac82

Browse files
committed
---
yaml --- r: 273295 b: refs/heads/beta c: 9a8b807 h: refs/heads/master i: 273293: 84e3ef5 273291: 6137aaf 273287: af21e1f 273279: 737377e
1 parent 2c24238 commit 8d3ac82

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ refs/tags/0.9: 36870b185fc5f5486636d4515f0e22677493f225
2323
refs/tags/0.10: ac33f2b15782272ae348dbd7b14b8257b2148b5a
2424
refs/tags/0.11.0: e1247cb1d0d681be034adb4b558b5a0c0d5720f9
2525
refs/tags/0.12.0: f0c419429ef30723ceaf6b42f9b5a2aeb5d2e2d1
26-
refs/heads/beta: 02a141a5506ae499367c67e147688d049dd96efb
26+
refs/heads/beta: 9a8b80762b4369772ae3f99a96efed1f3bdf8c1b
2727
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
2828
refs/heads/tmp: e06d2ad9fcd5027bcaac5b08fc9aa39a49d0ecd3
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f

branches/beta/src/librustc_trans/trans/abi.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,11 +378,27 @@ impl FnType {
378378
if abi == Abi::Rust || abi == Abi::RustCall ||
379379
abi == Abi::RustIntrinsic || abi == Abi::PlatformIntrinsic {
380380
let fixup = |arg: &mut ArgType| {
381-
if !arg.ty.is_aggregate() {
381+
let mut llty = arg.ty;
382+
383+
// Replace newtypes with their inner-most type.
384+
while llty.kind() == llvm::TypeKind::Struct {
385+
let inner = llty.field_types();
386+
if inner.len() != 1 {
387+
break;
388+
}
389+
llty = inner[0];
390+
}
391+
392+
if !llty.is_aggregate() {
382393
// Scalars and vectors, always immediate.
394+
if llty != arg.ty {
395+
// Needs a cast as we've unpacked a newtype.
396+
arg.cast = Some(llty);
397+
}
383398
return;
384399
}
385-
let size = llsize_of_real(ccx, arg.ty);
400+
401+
let size = llsize_of_real(ccx, llty);
386402
if size > llsize_of_real(ccx, ccx.int_type()) {
387403
arg.make_indirect(ccx);
388404
} else if size > 0 {

0 commit comments

Comments
 (0)