Source: rustc Version: 1.23.0+dfsg1-1 Severity: important Tags: patch User: debian-sp...@lists.debian.org Usertags: sparc64
Hello! rustc upstream contains an important fix in the master branch that fixes the definitions for the CABI on sparc64 [1]. I have backported this patch for rustc 1.23 and attached it to this bug report. Could you include the patch in the next upload of rustc 1.23? Thanks, Adrian > [1] > https://github.com/rust-lang/rust/commit/f4bcfc5317258c77e25ab5c0f3eec5599287fdbd -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer - glaub...@debian.org `. `' Freie Universitaet Berlin - glaub...@physik.fu-berlin.de `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913
--- a/src/librustc_trans/cabi_sparc64.rs +++ b/src/librustc_trans/cabi_sparc64.rs @@ -26,7 +26,7 @@ fn is_homogeneous_aggregate<'a, 'tcx>(cc let valid_unit = match unit.kind { RegKind::Integer => false, RegKind::Float => true, - RegKind::Vector => size.bits() == 128 + RegKind::Vector => size.bits() == 256 }; if valid_unit { @@ -52,7 +52,7 @@ fn classify_ret_ty<'a, 'tcx>(ccx: &Crate } let size = ret.layout.size(ccx); let bits = size.bits(); - if bits <= 128 { + if bits <= 256 { let unit = if bits <= 8 { Reg::i8() } else if bits <= 16 { @@ -86,6 +86,10 @@ fn classify_arg_ty<'a, 'tcx>(ccx: &Crate } let total = arg.layout.size(ccx); + if total.bits() > 128 { + arg.make_indirect(ccx); + return; + } arg.cast_to(ccx, Uniform { unit: Reg::i64(), total