Skip to content

Commit 6eb1430

Browse files
authored
Rollup merge of rust-lang#47439 - eddyb:issue-45662, r=nagisa
rustc_trans: ignore trailing padding larger than 8 bytes. Fixes rust-lang#45662 by ignoring a missing second register component, as it could be entirely padding.
2 parents fe2fb24 + 9b95e91 commit 6eb1430

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

src/librustc_trans/cabi_x86_64.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -167,12 +167,12 @@ fn cast_target(cls: &[Option<Class>], size: Size) -> CastTarget {
167167
let mut i = 0;
168168
let lo = reg_component(cls, &mut i, size).unwrap();
169169
let offset = Size::from_bytes(8) * (i as u64);
170-
let target = if size <= offset {
171-
CastTarget::from(lo)
172-
} else {
173-
let hi = reg_component(cls, &mut i, size - offset).unwrap();
174-
CastTarget::Pair(lo, hi)
175-
};
170+
let mut target = CastTarget::from(lo);
171+
if size > offset {
172+
if let Some(hi) = reg_component(cls, &mut i, size - offset) {
173+
target = CastTarget::Pair(lo, hi);
174+
}
175+
}
176176
assert_eq!(reg_component(cls, &mut i, Size::from_bytes(0)), None);
177177
target
178178
}

src/test/run-pass/align-with-extern-c-fn.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
#![feature(attr_literals)]
1515

1616
#[repr(align(16))]
17-
pub struct A {
18-
y: i64,
19-
}
17+
pub struct A(i64);
2018

2119
pub extern "C" fn foo(x: A) {}
2220

23-
fn main() {}
21+
fn main() {
22+
foo(A(0));
23+
}

0 commit comments

Comments
 (0)