|
| 1 | +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir -fdump-record-layouts %s -o - | FileCheck %s |
| 2 | + |
| 3 | +struct SimpleStruct { |
| 4 | + int a; |
| 5 | + float b; |
| 6 | +} simple; |
| 7 | +// CHECK: Layout: <CIRecordLayout |
| 8 | +// CHECK: CIR Type:!cir.record<struct "SimpleStruct" {!cir.int<s, 32>, !cir.float} #cir.record.decl.ast> |
| 9 | +// CHECK: NonVirtualBaseCIRType:!cir.record<struct "SimpleStruct" {!cir.int<s, 32>, !cir.float} #cir.record.decl.ast> |
| 10 | +// CHECK: IsZeroInitializable:1 |
| 11 | +// CHECK: BitFields:[ |
| 12 | +// CHECK: ]> |
| 13 | + |
| 14 | +struct Empty { |
| 15 | +} empty; |
| 16 | + |
| 17 | +// CHECK: Layout: <CIRecordLayout |
| 18 | +// CHECK: CIR Type:!cir.record<struct "Empty" padded {!cir.int<u, 8>} #cir.record.decl.ast> |
| 19 | +// CHECK: NonVirtualBaseCIRType:!cir.record<struct "Empty" padded {!cir.int<u, 8>} #cir.record.decl.ast> |
| 20 | +// CHECK: IsZeroInitializable:1 |
| 21 | +// CHECK: BitFields:[ |
| 22 | +// CHECK: ]> |
| 23 | + |
| 24 | +struct BitfieldsInOrder { |
| 25 | + char a; |
| 26 | + unsigned bit: 8; |
| 27 | + unsigned should : 20; |
| 28 | + unsigned have: 3; |
| 29 | + unsigned order: 1; |
| 30 | +} bitfield_order; |
| 31 | + |
| 32 | +// CHECK: Layout: <CIRecordLayout |
| 33 | +// CHECK: CIR Type:!cir.record<struct "BitfieldsInOrder" padded {!cir.int<s, 8>, !cir.int<u, 8>, !cir.array<!cir.int<u, 8> x 2>, !cir.array<!cir.int<u, 8> x 3>, !cir.int<u, 8>} #cir.record.decl.ast> |
| 34 | +// CHECK: NonVirtualBaseCIRType:!cir.record<struct "BitfieldsInOrder" padded {!cir.int<s, 8>, !cir.int<u, 8>, !cir.array<!cir.int<u, 8> x 2>, !cir.array<!cir.int<u, 8> x 3>, !cir.int<u, 8>} #cir.record.decl.ast> |
| 35 | +// CHECK: IsZeroInitializable:1 |
| 36 | +// CHECK: BitFields:[ |
| 37 | +// CHECK-NEXT: <CIRBitFieldInfo name:bit offset:0 size:8 isSigned:0 storageSize:8 storageOffset:1 volatileOffset:0 volatileStorageSize:0 volatileStorageOffset:0> |
| 38 | +// CHECK-NEXT: <CIRBitFieldInfo name:should offset:0 size:20 isSigned:0 storageSize:24 storageOffset:4 volatileOffset:0 volatileStorageSize:0 volatileStorageOffset:0> |
| 39 | +// CHECK-NEXT: <CIRBitFieldInfo name:have offset:20 size:3 isSigned:0 storageSize:24 storageOffset:4 volatileOffset:0 volatileStorageSize:0 volatileStorageOffset:0> |
| 40 | +// CHECK-NEXT: <CIRBitFieldInfo name:order offset:23 size:1 isSigned:0 storageSize:24 storageOffset:4 volatileOffset:0 volatileStorageSize:0 volatileStorageOffset:0> |
| 41 | +// CHECK:]> |
| 42 | + |
| 43 | +struct Inner { |
| 44 | + int x; |
| 45 | +} in; |
| 46 | + |
| 47 | +//CHECK: Layout: <CIRecordLayout |
| 48 | +//CHECK: CIR Type:!cir.record<struct "Inner" {!cir.int<s, 32>} #cir.record.decl.ast> |
| 49 | +//CHECK: NonVirtualBaseCIRType:!cir.record<struct "Inner" {!cir.int<s, 32>} #cir.record.decl.ast> |
| 50 | +//CHECK: IsZeroInitializable:1 |
| 51 | +//CHECK: BitFields:[ |
| 52 | +//CHECK: ]> |
| 53 | + |
| 54 | +struct Outer { |
| 55 | + Inner i; |
| 56 | + int y = 6; |
| 57 | +} ou; |
| 58 | + |
| 59 | +//CHECK: Layout: <CIRecordLayout |
| 60 | +//CHECK: CIR Type:!cir.record<struct "Outer" {!cir.record<struct "Inner" {!cir.int<s, 32>} #cir.record.decl.ast>, !cir.int<s, 32>} #cir.record.decl.ast> |
| 61 | +//CHECK: NonVirtualBaseCIRType:!cir.record<struct "Outer" {!cir.record<struct "Inner" {!cir.int<s, 32>} #cir.record.decl.ast>, !cir.int<s, 32>} #cir.record.decl.ast> |
| 62 | +//CHECK: IsZeroInitializable:1 |
| 63 | +//CHECK: BitFields:[ |
| 64 | +//CHECK: ]> |
0 commit comments