[cfe-commits] r136848 - /cfe/trunk/test/CodeGen/arm-apcs-zerolength-bitfield.c

Chad Rosier mcrosier at apple.com
Wed Aug 3 17:19:13 PDT 2011


Author: mcrosier
Date: Wed Aug  3 19:19:13 2011
New Revision: 136848

URL: http://llvm.org/viewvc/llvm-project?rev=136848&view=rev
Log:
For APCS the alignment of bitfield types is *not* respected when laying out
structures.  Alignment can be enforced with the use of anonymous bitfields 
(e.g., int :0), but this is not currently supported.  Add this test case to 
document the current state, which will hopefully be fixed shortly. 

Added:
    cfe/trunk/test/CodeGen/arm-apcs-zerolength-bitfield.c

Added: cfe/trunk/test/CodeGen/arm-apcs-zerolength-bitfield.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm-apcs-zerolength-bitfield.c?rev=136848&view=auto
==============================================================================
--- cfe/trunk/test/CodeGen/arm-apcs-zerolength-bitfield.c (added)
+++ cfe/trunk/test/CodeGen/arm-apcs-zerolength-bitfield.c Wed Aug  3 19:19:13 2011
@@ -0,0 +1,115 @@
+// RUN: %clang_cc1 -target-abi apcs-gnu -triple armv7-apple-darwin10 %s -verify
+
+#include <stddef.h>
+
+struct t1
+{
+  int foo : 1;
+  char : 0;
+  char bar;
+};
+static int arr1_offset[(offsetof(struct t1, bar) == 1) ? 0 : -1];
+static int arr1_sizeof[(sizeof(struct t1) == 2) ? 0 : -1];
+
+struct t2
+{
+  int foo : 1;
+  short : 0;
+  char bar;
+};
+static int arr2_offset[(offsetof(struct t2, bar) == 1) ? 0 : -1];
+static int arr2_sizeof[(sizeof(struct t2) == 2) ? 0 : -1];
+
+struct t3
+{
+  int foo : 1;
+  int : 0;
+  char bar;
+};
+static int arr3_offset[(offsetof(struct t3, bar) == 1) ? 0 : -1];
+static int arr3_sizeof[(sizeof(struct t3) == 2) ? 0 : -1];
+
+struct t4
+{
+  int foo : 1;
+  long : 0;
+  char bar;
+};
+static int arr4_offset[(offsetof(struct t4, bar) == 1) ? 0 : -1];
+static int arr4_sizeof[(sizeof(struct t4) == 2) ? 0 : -1];
+
+struct t5
+{
+  int foo : 1;
+  long long : 0;
+  char bar;
+};
+static int arr5_offset[(offsetof(struct t5, bar) == 1) ? 0 : -1];
+static int arr5_sizeof[(sizeof(struct t5) == 2) ? 0 : -1];
+
+struct t6
+{
+  int foo : 1;
+  char : 0;
+  char bar : 1;
+  char bar2;
+};
+static int arr6_offset[(offsetof(struct t6, bar2) == 1) ? 0 : -1];
+static int arr6_sizeof[(sizeof(struct t6) == 2) ? 0 : -1];
+
+struct t7
+{
+  int foo : 1;
+  short : 0;
+  char bar1 : 1;
+  char bar2;
+};
+static int arr7_offset[(offsetof(struct t7, bar2) == 1) ? 0 : -1];
+static int arr7_sizeof[(sizeof(struct t7) == 2) ? 0 : -1];
+
+struct t8
+{
+  int foo : 1;
+  int : 0;
+  char bar1 : 1;
+  char bar2;
+};
+static int arr8_offset[(offsetof(struct t8, bar2) == 1) ? 0 : -1];
+static int arr8_sizeof[(sizeof(struct t8) == 2) ? 0 : -1];
+
+struct t9
+{
+  int foo : 1;
+  long : 0;
+  char bar1 : 1;
+  char bar2;
+};
+static int arr9_offset[(offsetof(struct t9, bar2) == 1) ? 0 : -1];
+static int arr9_sizeof[(sizeof(struct t9) == 2) ? 0 : -1];
+
+struct t10
+{
+  int foo : 1;
+  long long : 0;
+  char bar1 : 1;
+  char bar2;
+};
+static int arr10_offset[(offsetof(struct t10, bar2) == 1) ? 0 : -1];
+static int arr10_sizeof[(sizeof(struct t10) == 2) ? 0 : -1];
+
+
+struct t11
+{
+  int foo : 1;
+  long long : 0;
+  char : 0;
+  char bar1 : 1;
+  char bar2;
+};
+static int arr11_offset[(offsetof(struct t11, bar2) == 1) ? 0 : -1];
+static int arr11_sizeof[(sizeof(struct t11) == 2) ? 0 : -1];
+
+int main() {
+  return 0;
+}
+





More information about the cfe-commits mailing list