diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-04-13 08:15:50 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-04-13 08:15:50 +0000 |
commit | adc45bb77b13cb62176cd9c9a3bedd245c5981b1 (patch) | |
tree | e036eb21fc4abee8503ded7bb064527e884677a0 /clang/test/Sema/ms_bitfield_layout.c | |
parent | 269e0fb2e49385039bf0eb4c8a35bd4499be1694 (diff) | |
download | bcm5719-llvm-adc45bb77b13cb62176cd9c9a3bedd245c5981b1.tar.gz bcm5719-llvm-adc45bb77b13cb62176cd9c9a3bedd245c5981b1.zip |
MS ABI: Bitfields FielDecls only align if they allocate
Don't consider a __declspec(align) on a bitfield's declaration if it didn't
allocate any underlying storage.
This fixes PR19414.
llvm-svn: 206132
Diffstat (limited to 'clang/test/Sema/ms_bitfield_layout.c')
-rw-r--r-- | clang/test/Sema/ms_bitfield_layout.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/clang/test/Sema/ms_bitfield_layout.c b/clang/test/Sema/ms_bitfield_layout.c index f2010c16225..8444f469d59 100644 --- a/clang/test/Sema/ms_bitfield_layout.c +++ b/clang/test/Sema/ms_bitfield_layout.c @@ -1,6 +1,6 @@ -// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts %s 2>/dev/null \
+// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fms-extensions -fdump-record-layouts %s 2>/dev/null \
// RUN: | FileCheck %s
-// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts %s 2>/dev/null \
+// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fms-extensions -fdump-record-layouts %s 2>/dev/null \
// RUN: | FileCheck %s
typedef struct A {
@@ -111,6 +111,16 @@ typedef struct H { // CHECK: Alignment:16
// CHECK: FieldOffsets: [0, 16, 16, 16]>
+typedef struct I {
+ short : 8;
+ __declspec(align(16)) short : 8;
+} I;
+
+// CHECK: Type: struct I
+// CHECK: Size:16
+// CHECK: Alignment:16
+// CHECK: FieldOffsets: [0, 8]
+
#pragma pack(push, 1)
typedef struct A1 {
@@ -221,6 +231,16 @@ typedef struct H1 { // CHECK: Alignment:8
// CHECK: FieldOffsets: [0, 32, 32, 32]>
+typedef struct I1 {
+ short : 8;
+ __declspec(align(16)) short : 8;
+} I1;
+
+// CHECK: Type: struct I1
+// CHECK: Size:16
+// CHECK: Alignment:8
+// CHECK: FieldOffsets: [0, 8]
+
#pragma pack(pop)
int x[
@@ -232,6 +252,7 @@ sizeof(E ) + sizeof(F ) +
sizeof(G ) +
sizeof(H ) +
+sizeof(I ) +
sizeof(A1) +
sizeof(B1) +
sizeof(C1) +
@@ -240,4 +261,5 @@ sizeof(E1) + sizeof(F1) +
sizeof(G1) +
sizeof(H1) +
+sizeof(I1) +
0];
|