232 lines · c
1// RUN: %clang_cc1 -triple armv8-none-linux-eabi -fno-aapcs-bitfield-width -fdump-record-layouts-simple -emit-llvm -o /dev/null %s | FileCheck %s -check-prefixes=LAYOUT2// RUN: %clang_cc1 -triple armebv8-none-linux-eabi -fno-aapcs-bitfield-width -fdump-record-layouts-simple -emit-llvm -o /dev/null %s | FileCheck %s -check-prefixes=LAYOUT3 4// RUN: %clang_cc1 -triple armv8-none-linux-eabi -faapcs-bitfield-width -fdump-record-layouts-simple -emit-llvm -o /dev/null %s | FileCheck %s -check-prefixes=LAYOUT5// RUN: %clang_cc1 -triple armebv8-none-linux-eabi -faapcs-bitfield-width -fdump-record-layouts-simple -emit-llvm -o /dev/null %s | FileCheck %s -check-prefixes=LAYOUT6 7struct st0 {8 short c : 7;9} st0;10// LAYOUT-LABEL: LLVMType:%struct.st0 =11// LAYOUT-SAME: type { i8, i8 }12// LAYOUT: BitFields:[13// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:7 IsSigned:1 StorageSize:8 StorageOffset:014// LAYOUT-NEXT: ]>15 16struct st1 {17 int a : 10;18 short c : 6;19} st1;20// LAYOUT-LABEL: LLVMType:%struct.st1 =21// LAYOUT-SAME: type { i16, [2 x i8] }22// LAYOUT: BitFields:[23// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:10 IsSigned:1 StorageSize:16 StorageOffset:024// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:6 IsSigned:1 StorageSize:16 StorageOffset:025// LAYOUT-NEXT: ]>26 27struct st2 {28 int a : 10;29 short c : 7;30} st2;31// LAYOUT-LABEL: LLVMType:%struct.st2 =32// LAYOUT-SAME: type { i32 }33// LAYOUT: BitFields:[34// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:10 IsSigned:1 StorageSize:32 StorageOffset:035// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:7 IsSigned:1 StorageSize:32 StorageOffset:036// LAYOUT-NEXT: ]>37 38struct st3 {39 volatile short c : 7;40} st3;41// LAYOUT-LABEL: LLVMType:%struct.st3 =42// LAYOUT-SAME: type { i8, i8 }43// LAYOUT: BitFields:[44// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:7 IsSigned:1 StorageSize:8 StorageOffset:045// LAYOUT-NEXT: ]>46 47struct st4 {48 int b : 9;49 volatile char c : 5;50} st4;51// LAYOUT-LABEL: LLVMType:%struct.st4 =52// LAYOUT-SAME: type { i16, [2 x i8] }53// LAYOUT: BitFields:[54// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:9 IsSigned:1 StorageSize:16 StorageOffset:055// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:5 IsSigned:1 StorageSize:16 StorageOffset:056// LAYOUT-NEXT: ]>57 58struct st5 {59 int a : 12;60 volatile char c : 5;61} st5;62// LAYOUT-LABEL: LLVMType:%struct.st5 =63// LAYOUT-SAME: type { i32 }64// LAYOUT: BitFields:[65// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:12 IsSigned:1 StorageSize:32 StorageOffset:066// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:5 IsSigned:1 StorageSize:32 StorageOffset:067// LAYOUT-NEXT: ]>68 69struct st6 {70 int a : 12;71 char b;72 int c : 5;73} st6;74// LAYOUT-LABEL: LLVMType:%struct.st6 =75// LAYOUT-SAME: type { i16, i8, i8 }76// LAYOUT: BitFields:[77// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:12 IsSigned:1 StorageSize:16 StorageOffset:078// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:5 IsSigned:1 StorageSize:8 StorageOffset:379// LAYOUT-NEXT: ]>80 81struct st7a {82 char a;83 int b : 5;84} st7a;85// LAYOUT-LABEL: LLVMType:%struct.st7a =86// LAYOUT-SAME: type { i8, i8, [2 x i8] }87// LAYOUT: BitFields:[88// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:5 IsSigned:1 StorageSize:8 StorageOffset:189// LAYOUT-NEXT: ]>90 91struct st7b {92 char x;93 volatile struct st7a y;94} st7b;95// LAYOUT-LABEL: LLVMType:%struct.st7b =96// LAYOUT-SAME: type { i8, [3 x i8], %struct.st7a }97// LAYOUT: BitFields:[98// LAYOUT-NEXT: ]>99 100struct st8 {101 unsigned f : 16;102} st8;103// LAYOUT-LABEL: LLVMType:%struct.st8 =104// LAYOUT-SAME: type { i16, [2 x i8] }105// LAYOUT: BitFields:[106// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:0 StorageSize:16 StorageOffset:0107// LAYOUT-NEXT: ]>108 109struct st9{110 int f : 8;111} st9;112// LAYOUT-LABEL: LLVMType:%struct.st9 =113// LAYOUT-SAME: type { i8, [3 x i8] }114// LAYOUT: BitFields:[115// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:0116// LAYOUT-NEXT: ]>117 118struct st10{119 int e : 1;120 int f : 8;121} st10;122// LAYOUT-LABEL: LLVMType:%struct.st10 =123// LAYOUT-SAME: type { i16, [2 x i8] }124// LAYOUT: BitFields:[125// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:1 IsSigned:1 StorageSize:16 StorageOffset:0126// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:16 StorageOffset:0127// LAYOUT-NEXT: ]>128 129struct st11{130 char e;131 int f : 16;132} st11;133// LAYOUT-LABEL: LLVMType:%struct.st11 =134// LAYOUT-SAME: type <{ i8, i16, i8 }>135// LAYOUT: BitFields:[136// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:1137// LAYOUT-NEXT: ]>138 139struct st12{140 int e : 8;141 int f : 16;142} st12;143// LAYOUT-LABEL: LLVMType:%struct.st12 =144// LAYOUT-SAME: type { i32 }145// LAYOUT: BitFields:[146// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:32 StorageOffset:0147// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:32 StorageOffset:0148// LAYOUT-NEXT: ]>149 150struct st13 {151 char a : 8;152 int b : 32;153} __attribute__((packed)) st13;154// LAYOUT-LABEL: LLVMType:%struct.st13 =155// LAYOUT-SAME: type <{ i8, i32 }>156// LAYOUT: BitFields:[157// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:0158// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:32 IsSigned:1 StorageSize:32 StorageOffset:1159// LAYOUT-NEXT: ]>160 161struct st14 {162 char a : 8;163} __attribute__((packed)) st14;164// LAYOUT-LABEL: LLVMType:%struct.st14 =165// LAYOUT-SAME: type { i8 }166// LAYOUT: BitFields:[167// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:0168// LAYOUT-NEXT: ]>169 170struct st15 {171 short a : 8;172} __attribute__((packed)) st15;173// LAYOUT-LABEL: LLVMType:%struct.st15 =174// LAYOUT-SAME: type { i8 }175// LAYOUT: BitFields:[176// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:0177// LAYOUT-NEXT: ]>178 179struct st16 {180 int a : 32;181 int b : 16;182 int c : 32;183 int d : 16;184} st16;185// LAYOUT-LABEL: LLVMType:%struct.st16 =186// LAYOUT-SAME: type { i32, i16, i32, i16 }187// LAYOUT: BitFields:[188// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:32 IsSigned:1 StorageSize:32 StorageOffset:0189// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:4190// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:32 IsSigned:1 StorageSize:32 StorageOffset:8191// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:12192// LAYOUT-NEXT: ]>193 194struct st17 {195int b : 32;196char c : 8;197} __attribute__((packed)) st17;198// LAYOUT-LABEL: LLVMType:%struct.st17 =199// LAYOUT-SAME: type <{ i32, i8 }>200// LAYOUT: BitFields:[201// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:32 IsSigned:1 StorageSize:32 StorageOffset:0202// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:4203// LAYOUT-NEXT: ]>204 205struct zero_bitfield {206 int a : 8;207 char : 0;208 int b : 8;209} st18;210// LAYOUT-LABEL: LLVMType:%struct.zero_bitfield =211// LAYOUT-SAME: type { i8, i8, [2 x i8] }212// LAYOUT: BitFields:[213// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:0214// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:1215// LAYOUT-NEXT: ]>216 217struct zero_bitfield_ok {218 short a : 8;219 char a1 : 8;220 long : 0;221 int b : 24;222} st19;223// LAYOUT-LABEL: LLVMType:%struct.zero_bitfield_ok =224// LAYOUT-SAME: type { i16, i32 }225// LAYOUT: BitFields:[226// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:16 StorageOffset:0227// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:16 StorageOffset:0228// LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:24 IsSigned:1 StorageSize:32 StorageOffset:4229// LAYOUT-NEXT: ]>230 231 232