1; RUN: llc < %s -filetype=obj | llvm-readobj - --codeview | FileCheck %s 2; RUN: llc < %s | llvm-mc -filetype=obj --triple=x86_64-windows | llvm-readobj - --codeview | FileCheck %s 3 4; C++ source to regenerate: 5; $ cat hello.cpp 6; struct A { 7; struct Nested {}; 8; } a; 9; $ clang hello.cpp -S -emit-llvm -g -gcodeview -o t.ll 10 11; CHECK: CodeViewTypes [ 12; CHECK: Section: .debug$T (5) 13; CHECK: Magic: 0x4 14; CHECK: Struct (0x1000) { 15; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) 16; CHECK: MemberCount: 0 17; CHECK: Properties [ (0x280) 18; CHECK: ForwardReference (0x80) 19; CHECK: HasUniqueName (0x200) 20; CHECK: ] 21; CHECK: FieldList: 0x0 22; CHECK: DerivedFrom: 0x0 23; CHECK: VShape: 0x0 24; CHECK: SizeOf: 0 25; CHECK: Name: A 26; CHECK: LinkageName: .?AUA@@ 27; CHECK: } 28; CHECK: Struct (0x1001) { 29; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) 30; CHECK: MemberCount: 0 31; CHECK: Properties [ (0x288) 32; CHECK: ForwardReference (0x80) 33; CHECK: HasUniqueName (0x200) 34; CHECK: ] 35; CHECK: FieldList: 0x0 36; CHECK: DerivedFrom: 0x0 37; CHECK: VShape: 0x0 38; CHECK: SizeOf: 0 39; CHECK: Name: A::Nested 40; CHECK: LinkageName: .?AUNested@A@@ 41; CHECK: } 42; CHECK: FieldList (0x1002) { 43; CHECK: TypeLeafKind: LF_FIELDLIST (0x1203) 44; CHECK: NestedType { 45; CHECK: Type: A::Nested (0x1001) 46; CHECK: Name: Nested 47; CHECK: } 48; CHECK: } 49; CHECK: Struct (0x1003) { 50; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) 51; CHECK: MemberCount: 1 52; CHECK: Properties [ (0x210) 53; CHECK: ContainsNestedClass (0x10) 54; CHECK: HasUniqueName (0x200) 55; CHECK: ] 56; CHECK: FieldList: <field list> (0x1002) 57; CHECK: DerivedFrom: 0x0 58; CHECK: VShape: 0x0 59; CHECK: SizeOf: 1 60; CHECK: Name: A 61; CHECK: LinkageName: .?AUA@@ 62; CHECK: } 63; CHECK: StringId (0x1004) { 64; CHECK: TypeLeafKind: LF_STRING_ID (0x1605) 65; CHECK: Id: 0x0 66; CHECK: StringData: D:\src\hello\hello.cpp 67; CHECK: } 68; CHECK: UdtSourceLine (0x1005) { 69; CHECK: TypeLeafKind: LF_UDT_SRC_LINE (0x1606) 70; CHECK: UDT: A (0x1003) 71; CHECK: SourceFile: D:\src\hello\hello.cpp (0x1004) 72; CHECK: LineNumber: 1 73; CHECK: } 74; CHECK: ] 75 76; ModuleID = 'hello.cpp' 77source_filename = "hello.cpp" 78target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" 79target triple = "i686-pc-windows-msvc19.0.23918" 80 81%struct.A = type { i8 } 82 83@"\01?a@@3UA@@A" = global %struct.A zeroinitializer, align 1, !dbg !0 84 85!llvm.dbg.cu = !{!2} 86!llvm.module.flags = !{!9, !10} 87!llvm.ident = !{!11} 88 89!0 = distinct !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) 90!1 = !DIGlobalVariable(name: "a", linkageName: "\01?a@@3UA@@A", scope: !2, file: !3, line: 3, type: !6, isLocal: false, isDefinition: true) 91!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 3.9.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5) 92!3 = !DIFile(filename: "hello.cpp", directory: "D:\5Csrc\5Chello") 93!4 = !{} 94!5 = !{!0} 95!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !3, line: 1, size: 8, align: 8, elements: !7, identifier: ".?AUA@@") 96!7 = !{!8} 97!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "Nested", scope: !6, file: !3, line: 2, size: 8, align: 8, flags: DIFlagFwdDecl, identifier: ".?AUNested@A@@") 98!9 = !{i32 2, !"CodeView", i32 1} 99!10 = !{i32 2, !"Debug Info Version", i32 3} 100!11 = !{!"clang version 3.9.0 "} 101 102