summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/arm-byval-align.c
diff options
context:
space:
mode:
authorOliver Stannard <oliver.stannard@arm.com>2014-03-12 14:02:50 +0000
committerOliver Stannard <oliver.stannard@arm.com>2014-03-12 14:02:50 +0000
commit7c3c09e23fe4b2752dbbf957d6bebbf72e7b0319 (patch)
treeed1cd4427f1323a6b6e326834dd86179f6203c38 /clang/test/CodeGen/arm-byval-align.c
parent61c76cc56fc4481425e65f69eb32eece5d7c08df (diff)
downloadbcm5719-llvm-7c3c09e23fe4b2752dbbf957d6bebbf72e7b0319.tar.gz
bcm5719-llvm-7c3c09e23fe4b2752dbbf957d6bebbf72e7b0319.zip
ARM: Correct alignment of structs passed as byval pointer
When a struct has bitfields overlapping with other members (as required by the AAPCS), clang uses a packed struct to represent this. If such a struct is large enough for clang to pass it as a byval pointer (>64 bytes), we need to set the alignment of the argument to match the original type. llvm-svn: 203660
Diffstat (limited to 'clang/test/CodeGen/arm-byval-align.c')
-rw-r--r--clang/test/CodeGen/arm-byval-align.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/test/CodeGen/arm-byval-align.c b/clang/test/CodeGen/arm-byval-align.c
new file mode 100644
index 00000000000..aa22503fe4b
--- /dev/null
+++ b/clang/test/CodeGen/arm-byval-align.c
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 -triple=armv7-none-eabi < %s -S -emit-llvm | FileCheck %s
+
+struct foo {
+ long long a;
+ char b;
+ int c:16;
+ int d[16];
+};
+
+// CHECK: %struct.foo* byval align 8 %z
+long long bar(int a, int b, int c, int d, int e,
+ struct foo z) {
+ return z.a;
+}
OpenPOWER on IntegriCloud