1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -filetype=obj | llvm-readobj - -codeview | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; C++ source to regenerate: 4*9880d681SAndroid Build Coastguard Worker; $ cat t.cpp 5*9880d681SAndroid Build Coastguard Worker; #pragma pack(1) 6*9880d681SAndroid Build Coastguard Worker; struct S0 { 7*9880d681SAndroid Build Coastguard Worker; char : 8; 8*9880d681SAndroid Build Coastguard Worker; short : 8; 9*9880d681SAndroid Build Coastguard Worker; short x : 8; 10*9880d681SAndroid Build Coastguard Worker; } s0; 11*9880d681SAndroid Build Coastguard Worker; 12*9880d681SAndroid Build Coastguard Worker; #pragma pack(1) 13*9880d681SAndroid Build Coastguard Worker; struct S1 { 14*9880d681SAndroid Build Coastguard Worker; char x1[2]; 15*9880d681SAndroid Build Coastguard Worker; char x2; 16*9880d681SAndroid Build Coastguard Worker; int y : 23; 17*9880d681SAndroid Build Coastguard Worker; int z : 23; 18*9880d681SAndroid Build Coastguard Worker; int w : 2; 19*9880d681SAndroid Build Coastguard Worker; struct { char c; short s; } v; 20*9880d681SAndroid Build Coastguard Worker; short u : 3; 21*9880d681SAndroid Build Coastguard Worker; } s1; 22*9880d681SAndroid Build Coastguard Worker; 23*9880d681SAndroid Build Coastguard Worker; #pragma pack(1) 24*9880d681SAndroid Build Coastguard Worker; struct S2 { 25*9880d681SAndroid Build Coastguard Worker; char : 0; 26*9880d681SAndroid Build Coastguard Worker; int y : 1; 27*9880d681SAndroid Build Coastguard Worker; } s2; 28*9880d681SAndroid Build Coastguard Worker; $ clang t.cpp -S -emit-llvm -g -gcodeview -o t.ll 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; CHECK: CodeViewTypes [ 31*9880d681SAndroid Build Coastguard Worker; CHECK: BitField ([[S0_x:.*]]) { 32*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_BITFIELD (0x1205) 33*9880d681SAndroid Build Coastguard Worker; CHECK: Type: short (0x11) 34*9880d681SAndroid Build Coastguard Worker; CHECK: BitSize: 8 35*9880d681SAndroid Build Coastguard Worker; CHECK: BitOffset: 8 36*9880d681SAndroid Build Coastguard Worker; CHECK: } 37*9880d681SAndroid Build Coastguard Worker; CHECK: FieldList ([[S0_fl:.*]]) { 38*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203) 39*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 40*9880d681SAndroid Build Coastguard Worker; CHECK: Type: [[S0_x:.*]] 41*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0x1 42*9880d681SAndroid Build Coastguard Worker; CHECK: Name: x 43*9880d681SAndroid Build Coastguard Worker; CHECK: } 44*9880d681SAndroid Build Coastguard Worker; CHECK: } 45*9880d681SAndroid Build Coastguard Worker; CHECK: Struct ({{.*}}) { 46*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) 47*9880d681SAndroid Build Coastguard Worker; CHECK: MemberCount: 1 48*9880d681SAndroid Build Coastguard Worker; CHECK: Properties [ (0x0) 49*9880d681SAndroid Build Coastguard Worker; CHECK: ] 50*9880d681SAndroid Build Coastguard Worker; CHECK: FieldList: <field list> ([[S0_fl]]) 51*9880d681SAndroid Build Coastguard Worker; CHECK: SizeOf: 3 52*9880d681SAndroid Build Coastguard Worker; CHECK: Name: S0 53*9880d681SAndroid Build Coastguard Worker; CHECK: } 54*9880d681SAndroid Build Coastguard Worker; CHECK: BitField ([[S1_y_z:.*]]) { 55*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_BITFIELD (0x1205) 56*9880d681SAndroid Build Coastguard Worker; CHECK: Type: int (0x74) 57*9880d681SAndroid Build Coastguard Worker; CHECK: BitSize: 23 58*9880d681SAndroid Build Coastguard Worker; CHECK: BitOffset: 0 59*9880d681SAndroid Build Coastguard Worker; CHECK: } 60*9880d681SAndroid Build Coastguard Worker; CHECK: BitField ([[S1_w:.*]]) { 61*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_BITFIELD (0x1205) 62*9880d681SAndroid Build Coastguard Worker; CHECK: Type: int (0x74) 63*9880d681SAndroid Build Coastguard Worker; CHECK: BitSize: 2 64*9880d681SAndroid Build Coastguard Worker; CHECK: BitOffset: 23 65*9880d681SAndroid Build Coastguard Worker; CHECK: } 66*9880d681SAndroid Build Coastguard Worker; CHECK: Struct ([[anon_ty:.*]]) { 67*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) 68*9880d681SAndroid Build Coastguard Worker; CHECK: MemberCount: 0 69*9880d681SAndroid Build Coastguard Worker; CHECK: Properties [ (0x88) 70*9880d681SAndroid Build Coastguard Worker; CHECK: ForwardReference (0x80) 71*9880d681SAndroid Build Coastguard Worker; CHECK: Nested (0x8) 72*9880d681SAndroid Build Coastguard Worker; CHECK: ] 73*9880d681SAndroid Build Coastguard Worker; CHECK: FieldList: 0x0 74*9880d681SAndroid Build Coastguard Worker; CHECK: SizeOf: 0 75*9880d681SAndroid Build Coastguard Worker; CHECK: Name: S1::<unnamed-tag> 76*9880d681SAndroid Build Coastguard Worker; CHECK: } 77*9880d681SAndroid Build Coastguard Worker; CHECK: BitField ([[S1_u:.*]]) { 78*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_BITFIELD (0x1205) 79*9880d681SAndroid Build Coastguard Worker; CHECK: Type: short (0x11) 80*9880d681SAndroid Build Coastguard Worker; CHECK: BitSize: 3 81*9880d681SAndroid Build Coastguard Worker; CHECK: BitOffset: 0 82*9880d681SAndroid Build Coastguard Worker; CHECK: } 83*9880d681SAndroid Build Coastguard Worker; CHECK: FieldList ([[S1_fl:.*]]) { 84*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203) 85*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 86*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0x0 87*9880d681SAndroid Build Coastguard Worker; CHECK: Name: x1 88*9880d681SAndroid Build Coastguard Worker; CHECK: } 89*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 90*9880d681SAndroid Build Coastguard Worker; CHECK: Type: char (0x70) 91*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0x2 92*9880d681SAndroid Build Coastguard Worker; CHECK: Name: x2 93*9880d681SAndroid Build Coastguard Worker; CHECK: } 94*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 95*9880d681SAndroid Build Coastguard Worker; CHECK: Type: [[S1_y_z]] 96*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0x3 97*9880d681SAndroid Build Coastguard Worker; CHECK: Name: y 98*9880d681SAndroid Build Coastguard Worker; CHECK: } 99*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 100*9880d681SAndroid Build Coastguard Worker; CHECK: Type: [[S1_y_z]] 101*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0x7 102*9880d681SAndroid Build Coastguard Worker; CHECK: Name: z 103*9880d681SAndroid Build Coastguard Worker; CHECK: } 104*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 105*9880d681SAndroid Build Coastguard Worker; CHECK: Type: [[S1_w]] 106*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0x7 107*9880d681SAndroid Build Coastguard Worker; CHECK: Name: w 108*9880d681SAndroid Build Coastguard Worker; CHECK: } 109*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 110*9880d681SAndroid Build Coastguard Worker; CHECK: Type: S1::<unnamed-tag> ([[anon_ty]]) 111*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0xB 112*9880d681SAndroid Build Coastguard Worker; CHECK: Name: v 113*9880d681SAndroid Build Coastguard Worker; CHECK: } 114*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 115*9880d681SAndroid Build Coastguard Worker; CHECK: Type: [[S1_u]] 116*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0xE 117*9880d681SAndroid Build Coastguard Worker; CHECK: Name: u 118*9880d681SAndroid Build Coastguard Worker; CHECK: } 119*9880d681SAndroid Build Coastguard Worker; CHECK: } 120*9880d681SAndroid Build Coastguard Worker; CHECK: Struct ({{.*}}) { 121*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) 122*9880d681SAndroid Build Coastguard Worker; CHECK: MemberCount: 7 123*9880d681SAndroid Build Coastguard Worker; CHECK: Properties [ (0x0) 124*9880d681SAndroid Build Coastguard Worker; CHECK: ] 125*9880d681SAndroid Build Coastguard Worker; CHECK: FieldList: <field list> ([[S1_fl]]) 126*9880d681SAndroid Build Coastguard Worker; CHECK: SizeOf: 16 127*9880d681SAndroid Build Coastguard Worker; CHECK: Name: S1 128*9880d681SAndroid Build Coastguard Worker; CHECK: } 129*9880d681SAndroid Build Coastguard Worker; CHECK: FieldList ([[anon_fl:.*]]) { 130*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203) 131*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 132*9880d681SAndroid Build Coastguard Worker; CHECK: Type: char (0x70) 133*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0x0 134*9880d681SAndroid Build Coastguard Worker; CHECK: Name: c 135*9880d681SAndroid Build Coastguard Worker; CHECK: } 136*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 137*9880d681SAndroid Build Coastguard Worker; CHECK: Type: short (0x11) 138*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0x1 139*9880d681SAndroid Build Coastguard Worker; CHECK: Name: s 140*9880d681SAndroid Build Coastguard Worker; CHECK: } 141*9880d681SAndroid Build Coastguard Worker; CHECK: } 142*9880d681SAndroid Build Coastguard Worker; CHECK: Struct ({{.*}}) { 143*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) 144*9880d681SAndroid Build Coastguard Worker; CHECK: MemberCount: 2 145*9880d681SAndroid Build Coastguard Worker; CHECK: Properties [ (0x8) 146*9880d681SAndroid Build Coastguard Worker; CHECK: Nested (0x8) 147*9880d681SAndroid Build Coastguard Worker; CHECK: ] 148*9880d681SAndroid Build Coastguard Worker; CHECK: FieldList: <field list> ([[anon_fl]]) 149*9880d681SAndroid Build Coastguard Worker; CHECK: SizeOf: 3 150*9880d681SAndroid Build Coastguard Worker; CHECK: Name: S1::<unnamed-tag> 151*9880d681SAndroid Build Coastguard Worker; CHECK: } 152*9880d681SAndroid Build Coastguard Worker; CHECK: BitField ([[S2_y:.*]]) { 153*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_BITFIELD (0x1205) 154*9880d681SAndroid Build Coastguard Worker; CHECK: Type: int (0x74) 155*9880d681SAndroid Build Coastguard Worker; CHECK: BitSize: 1 156*9880d681SAndroid Build Coastguard Worker; CHECK: BitOffset: 0 157*9880d681SAndroid Build Coastguard Worker; CHECK: } 158*9880d681SAndroid Build Coastguard Worker; CHECK: FieldList ([[S2_fl:.*]]) { 159*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203) 160*9880d681SAndroid Build Coastguard Worker; CHECK: DataMember { 161*9880d681SAndroid Build Coastguard Worker; CHECK: Type: [[S2_y]] 162*9880d681SAndroid Build Coastguard Worker; CHECK: FieldOffset: 0x0 163*9880d681SAndroid Build Coastguard Worker; CHECK: Name: y 164*9880d681SAndroid Build Coastguard Worker; CHECK: } 165*9880d681SAndroid Build Coastguard Worker; CHECK: } 166*9880d681SAndroid Build Coastguard Worker; CHECK: Struct ({{.*}}) { 167*9880d681SAndroid Build Coastguard Worker; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) 168*9880d681SAndroid Build Coastguard Worker; CHECK: MemberCount: 1 169*9880d681SAndroid Build Coastguard Worker; CHECK: Properties [ (0x0) 170*9880d681SAndroid Build Coastguard Worker; CHECK: ] 171*9880d681SAndroid Build Coastguard Worker; CHECK: FieldList: <field list> ([[S2_fl]]) 172*9880d681SAndroid Build Coastguard Worker; CHECK: SizeOf: 4 173*9880d681SAndroid Build Coastguard Worker; CHECK: Name: S2 174*9880d681SAndroid Build Coastguard Worker; CHECK: } 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" 177*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-pc-windows-msvc18.0.0" 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Worker%struct.S0 = type <{ i8, i16 }> 180*9880d681SAndroid Build Coastguard Worker%struct.S1 = type <{ [2 x i8], i8, i32, i32, %struct.anon, i16 }> 181*9880d681SAndroid Build Coastguard Worker%struct.anon = type <{ i8, i16 }> 182*9880d681SAndroid Build Coastguard Worker%struct.S2 = type { i32 } 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Worker@s0 = common global %struct.S0 zeroinitializer, align 1 185*9880d681SAndroid Build Coastguard Worker@s1 = common global %struct.S1 zeroinitializer, align 1 186*9880d681SAndroid Build Coastguard Worker@s2 = common global %struct.S2 zeroinitializer, align 1 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Worker!llvm.dbg.cu = !{!0} 189*9880d681SAndroid Build Coastguard Worker!llvm.module.flags = !{!33, !34, !35} 190*9880d681SAndroid Build Coastguard Worker!llvm.ident = !{!36} 191*9880d681SAndroid Build Coastguard Worker 192*9880d681SAndroid Build Coastguard Worker!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (trunk 273812) (llvm/trunk 273843)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !3) 193*9880d681SAndroid Build Coastguard Worker!1 = !DIFile(filename: "-", directory: "/usr/local/google/home/majnemer/llvm/src") 194*9880d681SAndroid Build Coastguard Worker!2 = !{} 195*9880d681SAndroid Build Coastguard Worker!3 = !{!4, !10, !29} 196*9880d681SAndroid Build Coastguard Worker!4 = distinct !DIGlobalVariable(name: "s0", scope: !0, file: !5, line: 7, type: !6, isLocal: false, isDefinition: true, variable: %struct.S0* @s0) 197*9880d681SAndroid Build Coastguard Worker!5 = !DIFile(filename: "<stdin>", directory: "/usr/local/google/home/majnemer/llvm/src") 198*9880d681SAndroid Build Coastguard Worker!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S0", file: !5, line: 3, size: 24, align: 8, elements: !7) 199*9880d681SAndroid Build Coastguard Worker!7 = !{!8} 200*9880d681SAndroid Build Coastguard Worker!8 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !6, file: !5, line: 6, baseType: !9, size: 8, align: 16, offset: 16, flags: DIFlagBitField, extraData: i64 8) 201*9880d681SAndroid Build Coastguard Worker!9 = !DIBasicType(name: "short", size: 16, align: 16, encoding: DW_ATE_signed) 202*9880d681SAndroid Build Coastguard Worker!10 = distinct !DIGlobalVariable(name: "s1", scope: !0, file: !5, line: 18, type: !11, isLocal: false, isDefinition: true, variable: %struct.S1* @s1) 203*9880d681SAndroid Build Coastguard Worker!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S1", file: !5, line: 10, size: 128, align: 8, elements: !12) 204*9880d681SAndroid Build Coastguard Worker!12 = !{!13, !18, !19, !21, !22, !23, !28} 205*9880d681SAndroid Build Coastguard Worker!13 = !DIDerivedType(tag: DW_TAG_member, name: "x1", scope: !11, file: !5, line: 11, baseType: !14, size: 16, align: 8) 206*9880d681SAndroid Build Coastguard Worker!14 = !DICompositeType(tag: DW_TAG_array_type, baseType: !15, size: 16, align: 8, elements: !16) 207*9880d681SAndroid Build Coastguard Worker!15 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) 208*9880d681SAndroid Build Coastguard Worker!16 = !{!17} 209*9880d681SAndroid Build Coastguard Worker!17 = !DISubrange(count: 2) 210*9880d681SAndroid Build Coastguard Worker!18 = !DIDerivedType(tag: DW_TAG_member, name: "x2", scope: !11, file: !5, line: 12, baseType: !15, size: 8, align: 8, offset: 16) 211*9880d681SAndroid Build Coastguard Worker!19 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !11, file: !5, line: 13, baseType: !20, size: 23, align: 32, offset: 24, flags: DIFlagBitField, extraData: i64 24) 212*9880d681SAndroid Build Coastguard Worker!20 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) 213*9880d681SAndroid Build Coastguard Worker!21 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !11, file: !5, line: 14, baseType: !20, size: 23, align: 32, offset: 56, flags: DIFlagBitField, extraData: i64 56) 214*9880d681SAndroid Build Coastguard Worker!22 = !DIDerivedType(tag: DW_TAG_member, name: "w", scope: !11, file: !5, line: 15, baseType: !20, size: 2, align: 32, offset: 79, flags: DIFlagBitField, extraData: i64 56) 215*9880d681SAndroid Build Coastguard Worker!23 = !DIDerivedType(tag: DW_TAG_member, name: "v", scope: !11, file: !5, line: 16, baseType: !24, size: 24, align: 8, offset: 88) 216*9880d681SAndroid Build Coastguard Worker!24 = distinct !DICompositeType(tag: DW_TAG_structure_type, scope: !11, file: !5, line: 16, size: 24, align: 8, elements: !25) 217*9880d681SAndroid Build Coastguard Worker!25 = !{!26, !27} 218*9880d681SAndroid Build Coastguard Worker!26 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !24, file: !5, line: 16, baseType: !15, size: 8, align: 8) 219*9880d681SAndroid Build Coastguard Worker!27 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !24, file: !5, line: 16, baseType: !9, size: 16, align: 16, offset: 8) 220*9880d681SAndroid Build Coastguard Worker!28 = !DIDerivedType(tag: DW_TAG_member, name: "u", scope: !11, file: !5, line: 17, baseType: !9, size: 3, align: 16, offset: 112, flags: DIFlagBitField, extraData: i64 112) 221*9880d681SAndroid Build Coastguard Worker!29 = distinct !DIGlobalVariable(name: "s2", scope: !0, file: !5, line: 24, type: !30, isLocal: false, isDefinition: true, variable: %struct.S2* @s2) 222*9880d681SAndroid Build Coastguard Worker!30 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S2", file: !5, line: 21, size: 32, align: 8, elements: !31) 223*9880d681SAndroid Build Coastguard Worker!31 = !{!32} 224*9880d681SAndroid Build Coastguard Worker!32 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !30, file: !5, line: 23, baseType: !20, size: 1, align: 32, flags: DIFlagBitField, extraData: i64 0) 225*9880d681SAndroid Build Coastguard Worker!33 = !{i32 2, !"CodeView", i32 1} 226*9880d681SAndroid Build Coastguard Worker!34 = !{i32 2, !"Debug Info Version", i32 3} 227*9880d681SAndroid Build Coastguard Worker!35 = !{i32 1, !"PIC Level", i32 2} 228*9880d681SAndroid Build Coastguard Worker!36 = !{!"clang version 3.9.0 (trunk 273812) (llvm/trunk 273843)"} 229