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