| // 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=LAYOUT |
| // 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=LAYOUT |
| |
| // 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=LAYOUT |
| // 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=LAYOUT |
| |
| struct st0 { |
| short c : 7; |
| } st0; |
| // LAYOUT-LABEL: LLVMType:%struct.st0 = |
| // LAYOUT-SAME: type { i8, i8 } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:7 IsSigned:1 StorageSize:8 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st1 { |
| int a : 10; |
| short c : 6; |
| } st1; |
| // LAYOUT-LABEL: LLVMType:%struct.st1 = |
| // LAYOUT-SAME: type { i16, [2 x i8] } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:10 IsSigned:1 StorageSize:16 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:6 IsSigned:1 StorageSize:16 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st2 { |
| int a : 10; |
| short c : 7; |
| } st2; |
| // LAYOUT-LABEL: LLVMType:%struct.st2 = |
| // LAYOUT-SAME: type { i32 } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:10 IsSigned:1 StorageSize:32 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:7 IsSigned:1 StorageSize:32 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st3 { |
| volatile short c : 7; |
| } st3; |
| // LAYOUT-LABEL: LLVMType:%struct.st3 = |
| // LAYOUT-SAME: type { i8, i8 } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:7 IsSigned:1 StorageSize:8 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st4 { |
| int b : 9; |
| volatile char c : 5; |
| } st4; |
| // LAYOUT-LABEL: LLVMType:%struct.st4 = |
| // LAYOUT-SAME: type { i16, [2 x i8] } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:9 IsSigned:1 StorageSize:16 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:5 IsSigned:1 StorageSize:16 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st5 { |
| int a : 12; |
| volatile char c : 5; |
| } st5; |
| // LAYOUT-LABEL: LLVMType:%struct.st5 = |
| // LAYOUT-SAME: type { i32 } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:12 IsSigned:1 StorageSize:32 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:5 IsSigned:1 StorageSize:32 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st6 { |
| int a : 12; |
| char b; |
| int c : 5; |
| } st6; |
| // LAYOUT-LABEL: LLVMType:%struct.st6 = |
| // LAYOUT-SAME: type { i16, i8, i8 } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:12 IsSigned:1 StorageSize:16 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:5 IsSigned:1 StorageSize:8 StorageOffset:3 |
| // LAYOUT-NEXT: ]> |
| |
| struct st7a { |
| char a; |
| int b : 5; |
| } st7a; |
| // LAYOUT-LABEL: LLVMType:%struct.st7a = |
| // LAYOUT-SAME: type { i8, i8, [2 x i8] } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:5 IsSigned:1 StorageSize:8 StorageOffset:1 |
| // LAYOUT-NEXT: ]> |
| |
| struct st7b { |
| char x; |
| volatile struct st7a y; |
| } st7b; |
| // LAYOUT-LABEL: LLVMType:%struct.st7b = |
| // LAYOUT-SAME: type { i8, [3 x i8], %struct.st7a } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: ]> |
| |
| struct st8 { |
| unsigned f : 16; |
| } st8; |
| // LAYOUT-LABEL: LLVMType:%struct.st8 = |
| // LAYOUT-SAME: type { i16, [2 x i8] } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:0 StorageSize:16 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st9{ |
| int f : 8; |
| } st9; |
| // LAYOUT-LABEL: LLVMType:%struct.st9 = |
| // LAYOUT-SAME: type { i8, [3 x i8] } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st10{ |
| int e : 1; |
| int f : 8; |
| } st10; |
| // LAYOUT-LABEL: LLVMType:%struct.st10 = |
| // LAYOUT-SAME: type { i16, [2 x i8] } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:1 IsSigned:1 StorageSize:16 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:16 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st11{ |
| char e; |
| int f : 16; |
| } st11; |
| // LAYOUT-LABEL: LLVMType:%struct.st11 = |
| // LAYOUT-SAME: type <{ i8, i16, i8 }> |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:1 |
| // LAYOUT-NEXT: ]> |
| |
| struct st12{ |
| int e : 8; |
| int f : 16; |
| } st12; |
| // LAYOUT-LABEL: LLVMType:%struct.st12 = |
| // LAYOUT-SAME: type { i32 } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:32 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:32 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st13 { |
| char a : 8; |
| int b : 32; |
| } __attribute__((packed)) st13; |
| // LAYOUT-LABEL: LLVMType:%struct.st13 = |
| // LAYOUT-SAME: type <{ i8, i32 }> |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:32 IsSigned:1 StorageSize:32 StorageOffset:1 |
| // LAYOUT-NEXT: ]> |
| |
| struct st14 { |
| char a : 8; |
| } __attribute__((packed)) st14; |
| // LAYOUT-LABEL: LLVMType:%struct.st14 = |
| // LAYOUT-SAME: type { i8 } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st15 { |
| short a : 8; |
| } __attribute__((packed)) st15; |
| // LAYOUT-LABEL: LLVMType:%struct.st15 = |
| // LAYOUT-SAME: type { i8 } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:0 |
| // LAYOUT-NEXT: ]> |
| |
| struct st16 { |
| int a : 32; |
| int b : 16; |
| int c : 32; |
| int d : 16; |
| } st16; |
| // LAYOUT-LABEL: LLVMType:%struct.st16 = |
| // LAYOUT-SAME: type { i32, i16, i32, i16 } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:32 IsSigned:1 StorageSize:32 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:4 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:32 IsSigned:1 StorageSize:32 StorageOffset:8 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:16 IsSigned:1 StorageSize:16 StorageOffset:12 |
| // LAYOUT-NEXT: ]> |
| |
| struct st17 { |
| int b : 32; |
| char c : 8; |
| } __attribute__((packed)) st17; |
| // LAYOUT-LABEL: LLVMType:%struct.st17 = |
| // LAYOUT-SAME: type <{ i32, i8 }> |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:32 IsSigned:1 StorageSize:32 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:4 |
| // LAYOUT-NEXT: ]> |
| |
| struct zero_bitfield { |
| int a : 8; |
| char : 0; |
| int b : 8; |
| } st18; |
| // LAYOUT-LABEL: LLVMType:%struct.zero_bitfield = |
| // LAYOUT-SAME: type { i8, i8, [2 x i8] } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:8 StorageOffset:1 |
| // LAYOUT-NEXT: ]> |
| |
| struct zero_bitfield_ok { |
| short a : 8; |
| char a1 : 8; |
| long : 0; |
| int b : 24; |
| } st19; |
| // LAYOUT-LABEL: LLVMType:%struct.zero_bitfield_ok = |
| // LAYOUT-SAME: type { i16, i32 } |
| // LAYOUT: BitFields:[ |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:16 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:8 IsSigned:1 StorageSize:16 StorageOffset:0 |
| // LAYOUT-NEXT: <CGBitFieldInfo Offset:{{[0-9]+}} Size:24 IsSigned:1 StorageSize:32 StorageOffset:4 |
| // LAYOUT-NEXT: ]> |
| |
| |