]> git.lizzy.rs Git - rust.git/commitdiff
rustc_trans: ignore trailing padding larger than 8 bytes.
authorEduard-Mihai Burtescu <edy.burt@gmail.com>
Sun, 14 Jan 2018 23:48:19 +0000 (01:48 +0200)
committerEduard-Mihai Burtescu <edy.burt@gmail.com>
Tue, 16 Jan 2018 16:04:24 +0000 (18:04 +0200)
src/librustc_trans/cabi_x86_64.rs
src/test/run-pass/align-with-extern-c-fn.rs

index 6db18bfecf258b2799be9dac80e5c725eabdb4f0..681b7f5527332b7e3c7c4eeb0f85891a072dd228 100644 (file)
@@ -179,12 +179,12 @@ fn cast_target(cls: &[Class], size: Size) -> CastTarget {
     let mut i = 0;
     let lo = reg_component(cls, &mut i, size).unwrap();
     let offset = Size::from_bytes(8) * (i as u64);
-    let target = if size <= offset {
-        CastTarget::from(lo)
-    } else {
-        let hi = reg_component(cls, &mut i, size - offset).unwrap();
-        CastTarget::Pair(lo, hi)
-    };
+    let mut target = CastTarget::from(lo);
+    if size > offset {
+        if let Some(hi) = reg_component(cls, &mut i, size - offset) {
+            target = CastTarget::Pair(lo, hi);
+        }
+    }
     assert_eq!(reg_component(cls, &mut i, Size::from_bytes(0)), None);
     target
 }
index db25960df4c87b0962ad848956d4a7eb9dfbb8dc..15e3b4b03eb27b0a68e01e4708ed67b81cf76d41 100644 (file)
 #![feature(attr_literals)]
 
 #[repr(align(16))]
-pub struct A {
-    y: i64,
-}
+pub struct A(i64);
 
 pub extern "C" fn foo(x: A) {}
 
-fn main() {}
+fn main() {
+    foo(A(0));
+}