about summary refs log tree commit diff
path: root/tests/run-make
diff options
context:
space:
mode:
authorErik Desjardins <erikdesjardins@users.noreply.github.com>2023-06-14 22:39:11 -0400
committerErik Desjardins <erikdesjardins@users.noreply.github.com>2023-07-10 19:19:40 -0400
commitd1e764cb3bc961a4395164a36c4e0cfd57e681a1 (patch)
treef66ba35a8bc3c21616bb0845a74583147c918718 /tests/run-make
parent7e933b4e26947b04da70589110dacbdb2461e27d (diff)
downloadrust-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.c15
-rw-r--r--tests/run-make/extern-fn-explicit-align/test.rs14
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(),
         );
     }