1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | FileCheck %s --check-prefix=ASM 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -filetype=obj | llvm-readobj - -codeview | FileCheck %s --check-prefix=OBJ 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; C++ source to regenerate: 5*9880d681SAndroid Build Coastguard Worker; $ cat t.cpp 6*9880d681SAndroid Build Coastguard Worker; int first; 7*9880d681SAndroid Build Coastguard Worker; template <typename T> struct A { static const int comdat = 3; }; 8*9880d681SAndroid Build Coastguard Worker; const int *middle = &A<void>::comdat; 9*9880d681SAndroid Build Coastguard Worker; int last; 10*9880d681SAndroid Build Coastguard Worker; $ clang t.cpp -S -emit-llvm -g -gcodeview -o t.ll 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker; ASM: .section .debug$S,"dr" 13*9880d681SAndroid Build Coastguard Worker; ASM: .p2align 2 14*9880d681SAndroid Build Coastguard Worker; ASM: .long 4 # Debug section magic 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; ASM: .short {{.*-.*}} # Record length 17*9880d681SAndroid Build Coastguard Worker; ASM: .short 4364 # Record kind: S_LDATA32 18*9880d681SAndroid Build Coastguard Worker; ASM: .long 116 # Type 19*9880d681SAndroid Build Coastguard Worker; ASM: .secrel32 "?first@@3HA" # DataOffset 20*9880d681SAndroid Build Coastguard Worker; ASM: .secidx "?first@@3HA" # Segment 21*9880d681SAndroid Build Coastguard Worker; ASM: .asciz "first" # Name 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; ASM: .short {{.*-.*}} # Record length 24*9880d681SAndroid Build Coastguard Worker; ASM: .short 4371 # Record kind: S_GTHREAD32 25*9880d681SAndroid Build Coastguard Worker; ASM: .long 4097 # Type 26*9880d681SAndroid Build Coastguard Worker; ASM: .secrel32 "?middle@@3PEBHEB" # DataOffset 27*9880d681SAndroid Build Coastguard Worker; ASM: .secidx "?middle@@3PEBHEB" # Segment 28*9880d681SAndroid Build Coastguard Worker; ASM: .asciz "middle" # Name 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; ASM: .short {{.*-.*}} # Record length 31*9880d681SAndroid Build Coastguard Worker; ASM: .short 4365 # Record kind: S_GDATA32 32*9880d681SAndroid Build Coastguard Worker; ASM: .long 116 # Type 33*9880d681SAndroid Build Coastguard Worker; ASM: .secrel32 "?last@@3HA" # DataOffset 34*9880d681SAndroid Build Coastguard Worker; ASM: .secidx "?last@@3HA" # Segment 35*9880d681SAndroid Build Coastguard Worker; ASM: .asciz "last" # Name 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; ASM: .section .debug$S,"dr",associative,"?comdat@?$A@X@@2HB" 38*9880d681SAndroid Build Coastguard Worker; ASM: .p2align 2 39*9880d681SAndroid Build Coastguard Worker; ASM: .long 4 # Debug section magic 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; ASM: .short {{.*-.*}} # Record length 42*9880d681SAndroid Build Coastguard Worker; ASM: .short 4365 # Record kind: S_GDATA32 43*9880d681SAndroid Build Coastguard Worker; ASM: .long 4096 # Type 44*9880d681SAndroid Build Coastguard Worker; ASM: .secrel32 "?comdat@?$A@X@@2HB" # DataOffset 45*9880d681SAndroid Build Coastguard Worker; ASM: .secidx "?comdat@?$A@X@@2HB" # Segment 46*9880d681SAndroid Build Coastguard Worker; ASM: .asciz "comdat" # Name 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker; OBJ: CodeViewTypes [ 49*9880d681SAndroid Build Coastguard Worker; OBJ: Section: .debug$T 50*9880d681SAndroid Build Coastguard Worker; OBJ: Magic: 0x4 51*9880d681SAndroid Build Coastguard Worker; OBJ: Modifier (0x1000) { 52*9880d681SAndroid Build Coastguard Worker; OBJ: TypeLeafKind: LF_MODIFIER (0x1001) 53*9880d681SAndroid Build Coastguard Worker; OBJ: ModifiedType: int (0x74) 54*9880d681SAndroid Build Coastguard Worker; OBJ: Modifiers [ (0x1) 55*9880d681SAndroid Build Coastguard Worker; OBJ: Const (0x1) 56*9880d681SAndroid Build Coastguard Worker; OBJ: ] 57*9880d681SAndroid Build Coastguard Worker; OBJ: } 58*9880d681SAndroid Build Coastguard Worker; OBJ: Pointer (0x1001) { 59*9880d681SAndroid Build Coastguard Worker; OBJ: TypeLeafKind: LF_POINTER (0x1002) 60*9880d681SAndroid Build Coastguard Worker; OBJ: PointeeType: const int (0x1000) 61*9880d681SAndroid Build Coastguard Worker; OBJ: PointerAttributes: 0x1000C 62*9880d681SAndroid Build Coastguard Worker; OBJ: PtrType: Near64 (0xC) 63*9880d681SAndroid Build Coastguard Worker; OBJ: PtrMode: Pointer (0x0) 64*9880d681SAndroid Build Coastguard Worker; OBJ: IsFlat: 0 65*9880d681SAndroid Build Coastguard Worker; OBJ: IsConst: 0 66*9880d681SAndroid Build Coastguard Worker; OBJ: IsVolatile: 0 67*9880d681SAndroid Build Coastguard Worker; OBJ: IsUnaligned: 0 68*9880d681SAndroid Build Coastguard Worker; OBJ: } 69*9880d681SAndroid Build Coastguard Worker; OBJ: ] 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker; OBJ: CodeViewDebugInfo [ 72*9880d681SAndroid Build Coastguard Worker; OBJ: Section: .debug$S 73*9880d681SAndroid Build Coastguard Worker; OBJ: Magic: 0x4 74*9880d681SAndroid Build Coastguard Worker; OBJ: Subsection [ 75*9880d681SAndroid Build Coastguard Worker; OBJ: SubSectionType: Symbols (0xF1) 76*9880d681SAndroid Build Coastguard Worker; OBJ: DataSym { 77*9880d681SAndroid Build Coastguard Worker; OBJ: Kind: S_LDATA32 (0x110C) 78*9880d681SAndroid Build Coastguard Worker; OBJ: DataOffset: ?first@@3HA+0x0 79*9880d681SAndroid Build Coastguard Worker; OBJ: Type: int (0x74) 80*9880d681SAndroid Build Coastguard Worker; OBJ: DisplayName: first 81*9880d681SAndroid Build Coastguard Worker; OBJ: LinkageName: ?first@@3HA 82*9880d681SAndroid Build Coastguard Worker; OBJ: } 83*9880d681SAndroid Build Coastguard Worker; OBJ: ThreadLocalDataSym { 84*9880d681SAndroid Build Coastguard Worker; OBJ: DataOffset: ?middle@@3PEBHEB+0x0 85*9880d681SAndroid Build Coastguard Worker; OBJ: Type: const int* (0x1001) 86*9880d681SAndroid Build Coastguard Worker; OBJ: DisplayName: middle 87*9880d681SAndroid Build Coastguard Worker; OBJ: LinkageName: ?middle@@3PEBHEB 88*9880d681SAndroid Build Coastguard Worker; OBJ: } 89*9880d681SAndroid Build Coastguard Worker; OBJ: DataSym { 90*9880d681SAndroid Build Coastguard Worker; OBJ: Kind: S_GDATA32 (0x110D) 91*9880d681SAndroid Build Coastguard Worker; OBJ: DataOffset: ?last@@3HA+0x0 92*9880d681SAndroid Build Coastguard Worker; OBJ: Type: int (0x74) 93*9880d681SAndroid Build Coastguard Worker; OBJ: DisplayName: last 94*9880d681SAndroid Build Coastguard Worker; OBJ: LinkageName: ?last@@3HA 95*9880d681SAndroid Build Coastguard Worker; OBJ: } 96*9880d681SAndroid Build Coastguard Worker; OBJ: ] 97*9880d681SAndroid Build Coastguard Worker; OBJ: ] 98*9880d681SAndroid Build Coastguard Worker; OBJ: CodeViewDebugInfo [ 99*9880d681SAndroid Build Coastguard Worker; OBJ: Section: .debug$S (7) 100*9880d681SAndroid Build Coastguard Worker; OBJ: Magic: 0x4 101*9880d681SAndroid Build Coastguard Worker; OBJ: Subsection [ 102*9880d681SAndroid Build Coastguard Worker; OBJ: SubSectionType: Symbols (0xF1) 103*9880d681SAndroid Build Coastguard Worker; OBJ: SubSectionSize: 0x15 104*9880d681SAndroid Build Coastguard Worker; OBJ: DataSym { 105*9880d681SAndroid Build Coastguard Worker; OBJ: DataOffset: ?comdat@?$A@X@@2HB+0x0 106*9880d681SAndroid Build Coastguard Worker; OBJ: Type: const int (0x1000) 107*9880d681SAndroid Build Coastguard Worker; OBJ: DisplayName: comdat 108*9880d681SAndroid Build Coastguard Worker; OBJ: LinkageName: ?comdat@?$A@X@@2HB 109*9880d681SAndroid Build Coastguard Worker; OBJ: } 110*9880d681SAndroid Build Coastguard Worker; OBJ: ] 111*9880d681SAndroid Build Coastguard Worker; OBJ: ] 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker; ModuleID = 't.cpp' 114*9880d681SAndroid Build Coastguard Workersource_filename = "t.cpp" 115*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" 116*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-pc-windows-msvc19.0.23918" 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Worker$"\01?comdat@?$A@X@@2HB" = comdat any 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker@"\01?first@@3HA" = internal global i32 0, align 4 121*9880d681SAndroid Build Coastguard Worker@"\01?comdat@?$A@X@@2HB" = linkonce_odr constant i32 3, comdat, align 4 122*9880d681SAndroid Build Coastguard Worker@"\01?middle@@3PEBHEB" = thread_local global i32* @"\01?comdat@?$A@X@@2HB", align 8 123*9880d681SAndroid Build Coastguard Worker@"\01?last@@3HA" = global i32 0, align 4 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker!llvm.dbg.cu = !{!0} 126*9880d681SAndroid Build Coastguard Worker!llvm.module.flags = !{!16, !17, !18} 127*9880d681SAndroid Build Coastguard Worker!llvm.ident = !{!19} 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.9.0 (trunk 271937)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !3) 130*9880d681SAndroid Build Coastguard Worker!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild") 131*9880d681SAndroid Build Coastguard Worker!2 = !{} 132*9880d681SAndroid Build Coastguard Worker!3 = !{!4, !6, !13, !15} 133*9880d681SAndroid Build Coastguard Worker!4 = distinct !DIGlobalVariable(name: "first", linkageName: "\01?first@@3HA", scope: !0, file: !1, line: 1, type: !5, isLocal: true, isDefinition: true, variable: i32* @"\01?first@@3HA") 134*9880d681SAndroid Build Coastguard Worker!5 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) 135*9880d681SAndroid Build Coastguard Worker!6 = distinct !DIGlobalVariable(name: "comdat", linkageName: "\01?comdat@?$A@X@@2HB", scope: !0, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, variable: i32* @"\01?comdat@?$A@X@@2HB", declaration: !8) 136*9880d681SAndroid Build Coastguard Worker!7 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !5) 137*9880d681SAndroid Build Coastguard Worker!8 = !DIDerivedType(tag: DW_TAG_member, name: "comdat", scope: !9, file: !1, line: 2, baseType: !7, flags: DIFlagStaticMember, extraData: i32 3) 138*9880d681SAndroid Build Coastguard Worker!9 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A<void>", file: !1, line: 2, size: 8, align: 8, elements: !10, templateParams: !11) 139*9880d681SAndroid Build Coastguard Worker!10 = !{!8} 140*9880d681SAndroid Build Coastguard Worker!11 = !{!12} 141*9880d681SAndroid Build Coastguard Worker!12 = !DITemplateTypeParameter(name: "T", type: null) 142*9880d681SAndroid Build Coastguard Worker!13 = distinct !DIGlobalVariable(name: "middle", linkageName: "\01?middle@@3PEBHEB", scope: !0, file: !1, line: 3, type: !14, isLocal: false, isDefinition: true, variable: i32** @"\01?middle@@3PEBHEB") 143*9880d681SAndroid Build Coastguard Worker!14 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64, align: 64) 144*9880d681SAndroid Build Coastguard Worker!15 = distinct !DIGlobalVariable(name: "last", linkageName: "\01?last@@3HA", scope: !0, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true, variable: i32* @"\01?last@@3HA") 145*9880d681SAndroid Build Coastguard Worker!16 = !{i32 2, !"CodeView", i32 1} 146*9880d681SAndroid Build Coastguard Worker!17 = !{i32 2, !"Debug Info Version", i32 3} 147*9880d681SAndroid Build Coastguard Worker!18 = !{i32 1, !"PIC Level", i32 2} 148*9880d681SAndroid Build Coastguard Worker!19 = !{!"clang version 3.9.0 (trunk 271937)"} 149