diff options
| author | Erik Desjardins <erikdesjardins@users.noreply.github.com> | 2023-06-14 22:39:11 -0400 |
|---|---|---|
| committer | Erik Desjardins <erikdesjardins@users.noreply.github.com> | 2023-07-10 19:19:40 -0400 |
| commit | d1e764cb3bc961a4395164a36c4e0cfd57e681a1 (patch) | |
| tree | f66ba35a8bc3c21616bb0845a74583147c918718 /tests/run-make | |
| parent | 7e933b4e26947b04da70589110dacbdb2461e27d (diff) | |
| download | rust-d1e764cb3bc961a4395164a36c4e0cfd57e681a1.tar.gz rust-d1e764cb3bc961a4395164a36c4e0cfd57e681a1.zip | |
aarch64-linux: properly handle 128bit aligned aggregates
Diffstat (limited to 'tests/run-make')
| -rw-r--r-- | tests/run-make/extern-fn-explicit-align/test.c | 15 | ||||
| -rw-r--r-- | tests/run-make/extern-fn-explicit-align/test.rs | 14 |
2 files changed, 25 insertions, 4 deletions
diff --git a/tests/run-make/extern-fn-explicit-align/test.c b/tests/run-make/extern-fn-explicit-align/test.c index 292e7a822b5..8d20864326b 100644 --- a/tests/run-make/extern-fn-explicit-align/test.c +++ b/tests/run-make/extern-fn-explicit-align/test.c @@ -44,7 +44,12 @@ struct __attribute__((aligned(1))) LowerAlign }; #endif - +#pragma pack(push, 1) +struct Packed +{ + __uint128_t a; +}; +#pragma pack(pop) int32_t many_args( void *a, @@ -59,7 +64,9 @@ int32_t many_args( struct WrappedU64s j, void *k, struct LowerAlign l, - const char *m) + void *m, + struct Packed n, + const char *o) { assert(!a); assert(!b); @@ -77,6 +84,8 @@ int32_t many_args( assert(!k); assert(l.a == 5); assert(l.b == 6); - assert(strcmp(m, "Hello world") == 0); + assert(!m); + assert(n.a == 7); + assert(strcmp(o, "Hello world") == 0); return 0; } diff --git a/tests/run-make/extern-fn-explicit-align/test.rs b/tests/run-make/extern-fn-explicit-align/test.rs index c5b3e24048e..56c6437dad2 100644 --- a/tests/run-make/extern-fn-explicit-align/test.rs +++ b/tests/run-make/extern-fn-explicit-align/test.rs @@ -34,6 +34,13 @@ pub struct LowerAlign { pub b: u64, } +#[derive(Copy, Clone)] +#[repr(C)] +#[repr(packed)] +pub struct Packed { + pub a: u128 +} + #[link(name = "test", kind = "static")] extern "C" { fn many_args( @@ -49,7 +56,9 @@ extern "C" { j: WrappedU64s, k: *mut (), l: LowerAlign, - m: *const c_char, + m: *mut (), + n: Packed, + o: *const c_char, ) -> i32; } @@ -60,6 +69,7 @@ fn main() { let two_u64s = TwoU64s { a: 1, b: 2 }; let wrapped = WrappedU64s { a: TwoU64s { a: 3, b: 4 } }; let lower = LowerAlign { a: 5, b: 6 }; + let packed = Packed { a: 7 }; let string = STRING; unsafe { many_args( @@ -75,6 +85,8 @@ fn main() { wrapped, null_mut(), lower, + null_mut(), + packed, string.as_ptr(), ); } |
