summaryrefslogtreecommitdiff
path: root/test/Sema/bitfield-layout_1.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/Sema/bitfield-layout_1.c')
-rw-r--r--test/Sema/bitfield-layout_1.c202
1 files changed, 202 insertions, 0 deletions
diff --git a/test/Sema/bitfield-layout_1.c b/test/Sema/bitfield-layout_1.c
new file mode 100644
index 000000000000..24277c391149
--- /dev/null
+++ b/test/Sema/bitfield-layout_1.c
@@ -0,0 +1,202 @@
+// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=i686-apple-darwin9
+// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=arm-linux-gnueabihf
+// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=aarch64-linux-gnu
+// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=x86_64-pc-linux-gnu
+// expected-no-diagnostics
+
+#define CHECK_SIZE(name, size) \
+ extern int name##_1[sizeof(name) == size ? 1 : -1];
+
+
+struct __attribute__((packed)) {
+ int a;
+ int b : 4;
+ int c : 32;
+} s0;
+CHECK_SIZE(s0,9)
+
+#pragma pack (1)
+struct {
+ int a;
+ int b : 4;
+ int c : 32;
+} s1;
+CHECK_SIZE(s1,9)
+
+#pragma pack (2)
+struct {
+ int a;
+ int b : 4;
+ int c : 32;
+} s2;
+CHECK_SIZE(s2,10)
+
+#pragma pack (2)
+struct __attribute__((packed)) {
+ int a;
+ int b : 4;
+ int c : 32;
+} s3;
+CHECK_SIZE(s3,10)
+
+#pragma pack (4)
+struct __attribute__((packed)) {
+ int a;
+ int b : 4;
+ int c : 32;
+} s4;
+CHECK_SIZE(s4,12)
+
+#pragma pack (16)
+struct {
+ int a;
+ int __attribute__((packed)) b : 4;
+ int __attribute__((packed)) c : 32;
+} s41;
+CHECK_SIZE(s41,12)
+
+#pragma pack (16)
+struct {
+ int a;
+ int b : 4;
+ int c : 32;
+} s5;
+CHECK_SIZE(s5,12)
+
+#pragma pack (1)
+struct __attribute__((aligned(4))) {
+ int a;
+ int b : 4;
+ int c : 32;
+} s6;
+CHECK_SIZE(s6,12)
+
+#pragma pack (2)
+struct {
+ char a;
+ int b : 4;
+ int c : 32;
+ char s;
+} s7;
+CHECK_SIZE(s7,8)
+
+#pragma pack (1)
+struct {
+ char a;
+ int b : 4;
+ int c : 28;
+ char s;
+} s8;
+CHECK_SIZE(s8,6)
+
+#pragma pack (8)
+struct {
+ char a;
+ int b : 4;
+ int c : 28;
+ char s;
+} s9;
+CHECK_SIZE(s9,8)
+
+#pragma pack (8)
+struct {
+ char a;
+ char s;
+} s10;
+CHECK_SIZE(s10,2)
+
+#pragma pack(4)
+struct {
+ char a;
+ int b : 4;
+ int c : 28;
+ char s1;
+ char s2;
+ char s3;
+} s11;
+CHECK_SIZE(s11,8)
+
+#pragma pack(4)
+struct {
+ short s1;
+ int a1 : 17;
+ int a2 : 17;
+ int a3 : 30;
+ short s2;
+} s12;
+CHECK_SIZE(s12,12)
+
+#pragma pack(4)
+struct {
+ char c1;
+ int i1 : 17;
+ int i2 : 17;
+ int i3 : 30;
+ char c2;
+} s13;
+CHECK_SIZE(s13,12)
+
+#pragma pack(2)
+struct {
+ char a;
+ int s;
+} s14;
+CHECK_SIZE(s14,6)
+
+#pragma pack(4)
+struct {
+ char a;
+ short s;
+} s15;
+CHECK_SIZE(s15,4)
+
+#pragma pack(2)
+struct {
+ char a;
+ int b : 4;
+ int c : 28;
+ char s1;
+ char s2;
+ char s3;
+} s16;
+CHECK_SIZE(s16,8)
+
+#pragma pack (16)
+struct {
+ int __attribute__((packed)) a;
+ int __attribute__((packed)) b : 4;
+ int __attribute__((packed)) c : 32;
+} s17;
+CHECK_SIZE(s17,12)
+
+#pragma pack (16)
+struct {
+ int __attribute__((aligned(8))) a;
+ int __attribute__((aligned(8))) b : 4;
+ int __attribute__((aligned(8))) c : 32;
+} s18;
+CHECK_SIZE(s18,24)
+
+#pragma pack (16)
+struct {
+ int __attribute__((aligned(1))) a;
+ int __attribute__((aligned(1))) b : 4;
+ int __attribute__((aligned(1))) c : 32;
+} s19;
+CHECK_SIZE(s19,12)
+
+#pragma pack (1)
+struct __attribute__((aligned(8))) {
+ int a;
+ int b : 4;
+ int c : 32;
+} s20;
+CHECK_SIZE(s20,16)
+
+#pragma pack (2)
+struct {
+ int __attribute__((aligned(8))) a;
+ int __attribute__((aligned(8))) b : 4;
+ int __attribute__((aligned(8))) c : 32;
+} s21;
+CHECK_SIZE(s21,10)