Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / DebugInfo / COFF / types-data-members.ll
blobe82a9370f66d11168e50d859bd43cac20fc02006
1 ; RUN: llc < %s -filetype=obj | llvm-readobj - -codeview | FileCheck %s
3 ; C++ source to regenerate:
4 ; $ cat t.cpp
5 ; struct Struct {
6 ;   int s1;
7 ;   int s2;
8 ;   int s3;
9 ;   static const int sdm = 3;
10 ; };
11 ; union Union {
12 ;   int a;
13 ;   float b;
14 ; };
15 ; class Class {
16 ; public:
17 ;   int pub;
18 ;   struct Nested;
19 ; private:
20 ;   int priv;
21 ; protected:
22 ;   int prot;
23 ; };
24 ; struct DerivedClass : Struct, virtual Class {
25 ;   int d;
26 ; };
27 ; struct Class::Nested {
28 ;   int n;
29 ; };
30 ; void UseTypes() {
31 ;   Struct s;
32 ;   Union u;
33 ;   Class c;
34 ;   DerivedClass dc;
35 ;   Class::Nested n;
36 ; }
37 ; $ clang t.cpp -S -emit-llvm -g -gcodeview -o t.ll
39 ; CHECK: CodeViewTypes [
40 ; CHECK:   Section: .debug$T (8)
41 ; CHECK:   Magic: 0x4
42 ; CHECK:   ArgList (0x1000) {
43 ; CHECK:     TypeLeafKind: LF_ARGLIST (0x1201)
44 ; CHECK:     NumArgs: 0
45 ; CHECK:     Arguments [
46 ; CHECK:     ]
47 ; CHECK:   }
48 ; CHECK:   Procedure (0x1001) {
49 ; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)
50 ; CHECK:     ReturnType: void (0x3)
51 ; CHECK:     CallingConvention: NearC (0x0)
52 ; CHECK:     FunctionOptions [ (0x0)
53 ; CHECK:     ]
54 ; CHECK:     NumParameters: 0
55 ; CHECK:     ArgListType: () (0x1000)
56 ; CHECK:   }
57 ; CHECK:   FuncId (0x1002) {
58 ; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)
59 ; CHECK:     ParentScope: 0x0
60 ; CHECK:     FunctionType: void () (0x1001)
61 ; CHECK:     Name: UseTypes
62 ; CHECK:   }
63 ; CHECK:   Struct (0x1003) {
64 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
65 ; CHECK:     MemberCount: 0
66 ; CHECK:     Properties [ (0x280)
67 ; CHECK:       ForwardReference (0x80)
68 ; CHECK:       HasUniqueName (0x200)
69 ; CHECK:     ]
70 ; CHECK:     FieldList: 0x0
71 ; CHECK:     DerivedFrom: 0x0
72 ; CHECK:     VShape: 0x0
73 ; CHECK:     SizeOf: 0
74 ; CHECK:     Name: Struct
75 ; CHECK:     LinkageName: .?AUStruct@@
76 ; CHECK:   }
77 ; CHECK:   Modifier (0x1004) {
78 ; CHECK:     TypeLeafKind: LF_MODIFIER (0x1001)
79 ; CHECK:     ModifiedType: int (0x74)
80 ; CHECK:     Modifiers [ (0x1)
81 ; CHECK:       Const (0x1)
82 ; CHECK:     ]
83 ; CHECK:   }
84 ; CHECK:   FieldList (0x1005) {
85 ; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)
86 ; CHECK:     DataMember {
87 ; CHECK:       AccessSpecifier: Public (0x3)
88 ; CHECK:       Type: int (0x74)
89 ; CHECK:       FieldOffset: 0x0
90 ; CHECK:       Name: s1
91 ; CHECK:     }
92 ; CHECK:     DataMember {
93 ; CHECK:       AccessSpecifier: Public (0x3)
94 ; CHECK:       Type: int (0x74)
95 ; CHECK:       FieldOffset: 0x4
96 ; CHECK:       Name: s2
97 ; CHECK:     }
98 ; CHECK:     DataMember {
99 ; CHECK:       AccessSpecifier: Public (0x3)
100 ; CHECK:       Type: int (0x74)
101 ; CHECK:       FieldOffset: 0x8
102 ; CHECK:       Name: s3
103 ; CHECK:     }
104 ; CHECK:     StaticDataMember {
105 ; CHECK:       AccessSpecifier: Public (0x3)
106 ; CHECK:       Type: const int (0x1004)
107 ; CHECK:       Name: sdm
108 ; CHECK:     }
109 ; CHECK:   }
110 ; CHECK:   Struct (0x1006) {
111 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
112 ; CHECK:     MemberCount: 4
113 ; CHECK:     Properties [ (0x200)
114 ; CHECK:       HasUniqueName (0x200)
115 ; CHECK:     ]
116 ; CHECK:     FieldList: <field list> (0x1005)
117 ; CHECK:     DerivedFrom: 0x0
118 ; CHECK:     VShape: 0x0
119 ; CHECK:     SizeOf: 12
120 ; CHECK:     Name: Struct
121 ; CHECK:     LinkageName: .?AUStruct@@
122 ; CHECK:   }
123 ; CHECK:   StringId (0x1007) {
124 ; CHECK:     TypeLeafKind: LF_STRING_ID (0x1605)
125 ; CHECK:     Id: 0x0
126 ; CHECK:     StringData: D:\src\llvm\build\t.cpp
127 ; CHECK:   }
128 ; CHECK:   UdtSourceLine (0x1008) {
129 ; CHECK:     TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
130 ; CHECK:     UDT: Struct (0x1006)
131 ; CHECK:     SourceFile: D:\src\llvm\build\t.cpp (0x1007)
132 ; CHECK:     LineNumber: 1
133 ; CHECK:   }
134 ; CHECK:   Union (0x1009) {
135 ; CHECK:     TypeLeafKind: LF_UNION (0x1506)
136 ; CHECK:     MemberCount: 0
137 ; CHECK:     Properties [ (0x280)
138 ; CHECK:       ForwardReference (0x80)
139 ; CHECK:       HasUniqueName (0x200)
140 ; CHECK:     ]
141 ; CHECK:     FieldList: 0x0
142 ; CHECK:     SizeOf: 0
143 ; CHECK:     Name: Union
144 ; CHECK:     LinkageName: .?ATUnion@@
145 ; CHECK:   }
146 ; CHECK:   FieldList (0x100A) {
147 ; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)
148 ; CHECK:     DataMember {
149 ; CHECK:       AccessSpecifier: Public (0x3)
150 ; CHECK:       Type: int (0x74)
151 ; CHECK:       FieldOffset: 0x0
152 ; CHECK:       Name: a
153 ; CHECK:     }
154 ; CHECK:     DataMember {
155 ; CHECK:       AccessSpecifier: Public (0x3)
156 ; CHECK:       Type: float (0x40)
157 ; CHECK:       FieldOffset: 0x0
158 ; CHECK:       Name: b
159 ; CHECK:     }
160 ; CHECK:   }
161 ; CHECK:   Union (0x100B) {
162 ; CHECK:     TypeLeafKind: LF_UNION (0x1506)
163 ; CHECK:     MemberCount: 2
164 ; CHECK:     Properties [ (0x600)
165 ; CHECK:       HasUniqueName (0x200)
166 ; CHECK:       Sealed (0x400)
167 ; CHECK:     ]
168 ; CHECK:     FieldList: <field list> (0x100A)
169 ; CHECK:     SizeOf: 4
170 ; CHECK:     Name: Union
171 ; CHECK:     LinkageName: .?ATUnion@@
172 ; CHECK:   }
173 ; CHECK:   UdtSourceLine (0x100C) {
174 ; CHECK:     TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
175 ; CHECK:     UDT: Union (0x100B)
176 ; CHECK:     SourceFile: D:\src\llvm\build\t.cpp (0x1007)
177 ; CHECK:     LineNumber: 7
178 ; CHECK:   }
179 ; CHECK:   Class (0x100D) {
180 ; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
181 ; CHECK:     MemberCount: 0
182 ; CHECK:     Properties [ (0x280)
183 ; CHECK:       ForwardReference (0x80)
184 ; CHECK:       HasUniqueName (0x200)
185 ; CHECK:     ]
186 ; CHECK:     FieldList: 0x0
187 ; CHECK:     DerivedFrom: 0x0
188 ; CHECK:     VShape: 0x0
189 ; CHECK:     SizeOf: 0
190 ; CHECK:     Name: Class
191 ; CHECK:     LinkageName: .?AVClass@@
192 ; CHECK:   }
193 ; CHECK:   FieldList (0x100E) {
194 ; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)
195 ; CHECK:     DataMember {
196 ; CHECK:       AccessSpecifier: Public (0x3)
197 ; CHECK:       Type: int (0x74)
198 ; CHECK:       FieldOffset: 0x0
199 ; CHECK:       Name: pub
200 ; CHECK:     }
201 ; CHECK:     DataMember {
202 ; CHECK:       AccessSpecifier: Private (0x1)
203 ; CHECK:       Type: int (0x74)
204 ; CHECK:       FieldOffset: 0x4
205 ; CHECK:       Name: priv
206 ; CHECK:     }
207 ; CHECK:     DataMember {
208 ; CHECK:       AccessSpecifier: Protected (0x2)
209 ; CHECK:       Type: int (0x74)
210 ; CHECK:       FieldOffset: 0x8
211 ; CHECK:       Name: prot
212 ; CHECK:     }
213 ; CHECK:   }
214 ; CHECK:   Class (0x100F) {
215 ; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
216 ; CHECK:     MemberCount: 3
217 ; CHECK:     Properties [ (0x200)
218 ; CHECK:       HasUniqueName (0x200)
219 ; CHECK:     ]
220 ; CHECK:     FieldList: <field list> (0x100E)
221 ; CHECK:     DerivedFrom: 0x0
222 ; CHECK:     VShape: 0x0
223 ; CHECK:     SizeOf: 12
224 ; CHECK:     Name: Class
225 ; CHECK:     LinkageName: .?AVClass@@
226 ; CHECK:   }
227 ; CHECK:   UdtSourceLine (0x1010) {
228 ; CHECK:     TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
229 ; CHECK:     UDT: Class (0x100F)
230 ; CHECK:     SourceFile: D:\src\llvm\build\t.cpp (0x1007)
231 ; CHECK:     LineNumber: 11
232 ; CHECK:   }
233 ; CHECK:   Struct (0x1011) {
234 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
235 ; CHECK:     MemberCount: 0
236 ; CHECK:     Properties [ (0x280)
237 ; CHECK:       ForwardReference (0x80)
238 ; CHECK:       HasUniqueName (0x200)
239 ; CHECK:     ]
240 ; CHECK:     FieldList: 0x0
241 ; CHECK:     DerivedFrom: 0x0
242 ; CHECK:     VShape: 0x0
243 ; CHECK:     SizeOf: 0
244 ; CHECK:     Name: DerivedClass
245 ; CHECK:     LinkageName: .?AUDerivedClass@@
246 ; CHECK:   }
247 ; CHECK:   Pointer (0x1012) {
248 ; CHECK:     TypeLeafKind: LF_POINTER (0x1002)
249 ; CHECK:     PointeeType: const int (0x1004)
250 ; CHECK:     PtrType: Near64 (0xC)
251 ; CHECK:     PtrMode: Pointer (0x0)
252 ; CHECK:     IsFlat: 0
253 ; CHECK:     IsConst: 0
254 ; CHECK:     IsVolatile: 0
255 ; CHECK:     IsUnaligned: 0
256 ; CHECK:     SizeOf: 8
257 ; CHECK:   }
258 ; CHECK:   VFTableShape (0x1013) {
259 ; CHECK:     TypeLeafKind: LF_VTSHAPE (0xA)
260 ; CHECK:     VFEntryCount: 1
261 ; CHECK:   }
262 ; CHECK:   Pointer (0x1014) {
263 ; CHECK:     TypeLeafKind: LF_POINTER (0x1002)
264 ; CHECK:     PointeeType: <vftable 1 methods> (0x1013)
265 ; CHECK:     PtrType: Near64 (0xC)
266 ; CHECK:     PtrMode: Pointer (0x0)
267 ; CHECK:     IsFlat: 0
268 ; CHECK:     IsConst: 0
269 ; CHECK:     IsVolatile: 0
270 ; CHECK:     IsUnaligned: 0
271 ; CHECK:     SizeOf: 8
272 ; CHECK:   }
273 ; CHECK:   FieldList (0x1015) {
274 ; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)
275 ; CHECK:     BaseClass {
276 ; CHECK:       AccessSpecifier: Public (0x3)
277 ; CHECK:       BaseType: Struct (0x1003)
278 ; CHECK:       BaseOffset: 0x0
279 ; CHECK:     }
280 ; CHECK:     VirtualBaseClass {
281 ; CHECK:       AccessSpecifier: Public (0x3)
282 ; CHECK:       BaseType: Class (0x100D)
283 ; CHECK:       VBPtrType: const int* (0x1012)
284 ; CHECK:       VBPtrOffset: 0x0
285 ; CHECK:       VBTableIndex: 0x1
286 ; CHECK:     }
287 ; CHECK:     VFPtr {
288 ; CHECK:       Type: <vftable 1 methods>* (0x1014)
289 ; CHECK:     }
290 ; CHECK:     DataMember {
291 ; CHECK:       AccessSpecifier: Public (0x3)
292 ; CHECK:       Type: int (0x74)
293 ; CHECK:       FieldOffset: 0x18
294 ; CHECK:       Name: d
295 ; CHECK:     }
296 ; CHECK:   }
297 ; CHECK:   Struct (0x1016) {
298 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
299 ; CHECK:     MemberCount: 4
300 ; CHECK:     Properties [ (0x200)
301 ; CHECK:       HasUniqueName (0x200)
302 ; CHECK:     ]
303 ; CHECK:     FieldList: <field list> (0x1015)
304 ; CHECK:     DerivedFrom: 0x0
305 ; CHECK:     VShape: 0x0
306 ; CHECK:     SizeOf: 48
307 ; CHECK:     Name: DerivedClass
308 ; CHECK:     LinkageName: .?AUDerivedClass@@
309 ; CHECK:   }
310 ; CHECK:   UdtSourceLine (0x1017) {
311 ; CHECK:     TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
312 ; CHECK:     UDT: DerivedClass (0x1016)
313 ; CHECK:     SourceFile: D:\src\llvm\build\t.cpp (0x1007)
314 ; CHECK:     LineNumber: 20
315 ; CHECK:   }
316 ; CHECK:   Struct (0x1018) {
317 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
318 ; CHECK:     MemberCount: 0
319 ; CHECK:     Properties [ (0x288)
320 ; CHECK:       ForwardReference (0x80)
321 ; CHECK:       HasUniqueName (0x200)
322 ; CHECK:       Nested (0x8)
323 ; CHECK:     ]
324 ; CHECK:     FieldList: 0x0
325 ; CHECK:     DerivedFrom: 0x0
326 ; CHECK:     VShape: 0x0
327 ; CHECK:     SizeOf: 0
328 ; CHECK:     Name: Class::Nested
329 ; CHECK:     LinkageName: .?AUNested@Class@@
330 ; CHECK:   }
331 ; CHECK:   FieldList (0x1019) {
332 ; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)
333 ; CHECK:     DataMember {
334 ; CHECK:       AccessSpecifier: Public (0x3)
335 ; CHECK:       Type: int (0x74)
336 ; CHECK:       FieldOffset: 0x0
337 ; CHECK:       Name: n
338 ; CHECK:     }
339 ; CHECK:   }
340 ; CHECK:   Struct (0x101A) {
341 ; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
342 ; CHECK:     MemberCount: 1
343 ; CHECK:     Properties [ (0x208)
344 ; CHECK:       HasUniqueName (0x200)
345 ; CHECK:       Nested (0x8)
346 ; CHECK:     ]
347 ; CHECK:     FieldList: <field list> (0x1019)
348 ; CHECK:     DerivedFrom: 0x0
349 ; CHECK:     VShape: 0x0
350 ; CHECK:     SizeOf: 4
351 ; CHECK:     Name: Class::Nested
352 ; CHECK:     LinkageName: .?AUNested@Class@@
353 ; CHECK:   }
354 ; CHECK:   UdtSourceLine (0x101B) {
355 ; CHECK:     TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
356 ; CHECK:     UDT: Class::Nested (0x101A)
357 ; CHECK:     SourceFile: D:\src\llvm\build\t.cpp (0x1007)
358 ; CHECK:     LineNumber: 23
359 ; CHECK:   }
360 ; CHECK:   Pointer (0x101C) {
361 ; CHECK:     TypeLeafKind: LF_POINTER (0x1002)
362 ; CHECK:     PointeeType: DerivedClass (0x1011)
363 ; CHECK:     PtrType: Near64 (0xC)
364 ; CHECK:     PtrMode: Pointer (0x0)
365 ; CHECK:     IsFlat: 0
366 ; CHECK:     IsConst: 1
367 ; CHECK:     IsVolatile: 0
368 ; CHECK:     IsUnaligned: 0
369 ; CHECK:     SizeOf: 8
370 ; CHECK:   }
371 ; CHECK:   MemberFunction (0x101D) {
372 ; CHECK:     TypeLeafKind: LF_MFUNCTION (0x1009)
373 ; CHECK:     ReturnType: void (0x3)
374 ; CHECK:     ClassType: DerivedClass (0x1011)
375 ; CHECK:     ThisType: DerivedClass* const (0x101C)
376 ; CHECK:     CallingConvention: NearC (0x0)
377 ; CHECK:     FunctionOptions [ (0x0)
378 ; CHECK:     ]
379 ; CHECK:     NumParameters: 0
380 ; CHECK:     ArgListType: () (0x1000)
381 ; CHECK:     ThisAdjustment: 0
382 ; CHECK:   }
383 ; CHECK:   MemberFuncId (0x101E) {
384 ; CHECK:     TypeLeafKind: LF_MFUNC_ID (0x1602)
385 ; CHECK:     ClassType: DerivedClass (0x1011)
386 ; CHECK:     FunctionType: void DerivedClass::() (0x101D)
387 ; CHECK:     Name: DerivedClass::DerivedClass
388 ; CHECK:   }
389 ; CHECK: ]
391 ; ModuleID = 't.cpp'
392 source_filename = "t.cpp"
393 target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
394 target triple = "x86_64-pc-windows-msvc19.0.23918"
396 %struct.Struct = type { i32, i32, i32 }
397 %union.Union = type { i32 }
398 %class.Class = type { i32, i32, i32 }
399 %struct.DerivedClass = type { %struct.Struct, i32*, i32, [4 x i8], %class.Class }
400 %"struct.Class::Nested" = type { i32 }
402 $"\01??0DerivedClass@@QEAA@XZ" = comdat any
404 $"\01??_8DerivedClass@@7B@" = comdat any
406 @"\01??_8DerivedClass@@7B@" = linkonce_odr unnamed_addr constant [2 x i32] [i32 -16, i32 16], comdat
408 ; Function Attrs: nounwind uwtable
409 define void @"\01?UseTypes@@YAXXZ"() #0 !dbg !7 {
410 entry:
411   %s = alloca %struct.Struct, align 4
412   %u = alloca %union.Union, align 4
413   %c = alloca %class.Class, align 4
414   %dc = alloca %struct.DerivedClass, align 8
415   %n = alloca %"struct.Class::Nested", align 4
416   call void @llvm.dbg.declare(metadata %struct.Struct* %s, metadata !10, metadata !19), !dbg !20
417   call void @llvm.dbg.declare(metadata %union.Union* %u, metadata !21, metadata !19), !dbg !27
418   call void @llvm.dbg.declare(metadata %class.Class* %c, metadata !28, metadata !19), !dbg !34
419   call void @llvm.dbg.declare(metadata %struct.DerivedClass* %dc, metadata !35, metadata !19), !dbg !46
420   %call = call %struct.DerivedClass* @"\01??0DerivedClass@@QEAA@XZ"(%struct.DerivedClass* %dc, i32 1) #3, !dbg !46
421   call void @llvm.dbg.declare(metadata %"struct.Class::Nested"* %n, metadata !47, metadata !19), !dbg !51
422   ret void, !dbg !52
425 ; Function Attrs: nounwind readnone
426 declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
428 ; Function Attrs: inlinehint nounwind uwtable
429 define linkonce_odr %struct.DerivedClass* @"\01??0DerivedClass@@QEAA@XZ"(%struct.DerivedClass* returned %this, i32 %is_most_derived) unnamed_addr #2 comdat align 2 !dbg !53 {
430 entry:
431   %retval = alloca %struct.DerivedClass*, align 8
432   %is_most_derived.addr = alloca i32, align 4
433   %this.addr = alloca %struct.DerivedClass*, align 8
434   store i32 %is_most_derived, i32* %is_most_derived.addr, align 4
435   call void @llvm.dbg.declare(metadata i32* %is_most_derived.addr, metadata !58, metadata !19), !dbg !59
436   store %struct.DerivedClass* %this, %struct.DerivedClass** %this.addr, align 8
437   call void @llvm.dbg.declare(metadata %struct.DerivedClass** %this.addr, metadata !60, metadata !19), !dbg !59
438   %this1 = load %struct.DerivedClass*, %struct.DerivedClass** %this.addr, align 8
439   store %struct.DerivedClass* %this1, %struct.DerivedClass** %retval, align 8
440   %is_most_derived2 = load i32, i32* %is_most_derived.addr, align 4
441   %is_complete_object = icmp ne i32 %is_most_derived2, 0, !dbg !62
442   br i1 %is_complete_object, label %ctor.init_vbases, label %ctor.skip_vbases, !dbg !62
444 ctor.init_vbases:                                 ; preds = %entry
445   %this.int8 = bitcast %struct.DerivedClass* %this1 to i8*, !dbg !62
446   %0 = getelementptr inbounds i8, i8* %this.int8, i64 16, !dbg !62
447   %vbptr.DerivedClass = bitcast i8* %0 to i32**, !dbg !62
448   store i32* getelementptr inbounds ([2 x i32], [2 x i32]* @"\01??_8DerivedClass@@7B@", i32 0, i32 0), i32** %vbptr.DerivedClass, align 8, !dbg !62
449   %1 = bitcast %struct.DerivedClass* %this1 to i8*, !dbg !62
450   %2 = getelementptr inbounds i8, i8* %1, i64 32, !dbg !62
451   %3 = bitcast i8* %2 to %class.Class*, !dbg !62
452   br label %ctor.skip_vbases, !dbg !62
454 ctor.skip_vbases:                                 ; preds = %ctor.init_vbases, %entry
455   %4 = bitcast %struct.DerivedClass* %this1 to %struct.Struct*, !dbg !62
456   %5 = load %struct.DerivedClass*, %struct.DerivedClass** %retval, align 8, !dbg !62
457   ret %struct.DerivedClass* %5, !dbg !62
460 attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
461 attributes #1 = { nounwind readnone }
462 attributes #2 = { inlinehint nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
463 attributes #3 = { nounwind }
465 !llvm.dbg.cu = !{!0}
466 !llvm.module.flags = !{!3, !4, !5}
467 !llvm.ident = !{!6}
469 !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.9.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
470 !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
471 !2 = !{}
472 !3 = !{i32 2, !"CodeView", i32 1}
473 !4 = !{i32 2, !"Debug Info Version", i32 3}
474 !5 = !{i32 1, !"PIC Level", i32 2}
475 !6 = !{!"clang version 3.9.0 "}
476 !7 = distinct !DISubprogram(name: "UseTypes", linkageName: "\01?UseTypes@@YAXXZ", scope: !1, file: !1, line: 26, type: !8, isLocal: false, isDefinition: true, scopeLine: 26, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
477 !8 = !DISubroutineType(types: !9)
478 !9 = !{null}
479 !10 = !DILocalVariable(name: "s", scope: !7, file: !1, line: 27, type: !11)
480 !11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Struct", file: !1, line: 1, size: 96, align: 32, elements: !12, identifier: ".?AUStruct@@")
481 !12 = !{!13, !15, !16, !17}
482 !13 = !DIDerivedType(tag: DW_TAG_member, name: "s1", scope: !11, file: !1, line: 2, baseType: !14, size: 32, align: 32)
483 !14 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
484 !15 = !DIDerivedType(tag: DW_TAG_member, name: "s2", scope: !11, file: !1, line: 3, baseType: !14, size: 32, align: 32, offset: 32)
485 !16 = !DIDerivedType(tag: DW_TAG_member, name: "s3", scope: !11, file: !1, line: 4, baseType: !14, size: 32, align: 32, offset: 64)
486 !17 = !DIDerivedType(tag: DW_TAG_member, name: "sdm", scope: !11, file: !1, line: 5, baseType: !18, flags: DIFlagStaticMember, extraData: i32 3)
487 !18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !14)
488 !19 = !DIExpression()
489 !20 = !DILocation(line: 27, column: 10, scope: !7)
490 !21 = !DILocalVariable(name: "u", scope: !7, file: !1, line: 28, type: !22)
491 !22 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "Union", file: !1, line: 7, size: 32, align: 32, elements: !23, identifier: ".?ATUnion@@")
492 !23 = !{!24, !25}
493 !24 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !22, file: !1, line: 8, baseType: !14, size: 32, align: 32)
494 !25 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !22, file: !1, line: 9, baseType: !26, size: 32, align: 32)
495 !26 = !DIBasicType(name: "float", size: 32, align: 32, encoding: DW_ATE_float)
496 !27 = !DILocation(line: 28, column: 9, scope: !7)
497 !28 = !DILocalVariable(name: "c", scope: !7, file: !1, line: 29, type: !29)
498 !29 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "Class", file: !1, line: 11, size: 96, align: 32, elements: !30, identifier: ".?AVClass@@")
499 !30 = !{!31, !32, !33}
500 !31 = !DIDerivedType(tag: DW_TAG_member, name: "pub", scope: !29, file: !1, line: 13, baseType: !14, size: 32, align: 32, flags: DIFlagPublic)
501 !32 = !DIDerivedType(tag: DW_TAG_member, name: "priv", scope: !29, file: !1, line: 16, baseType: !14, size: 32, align: 32, offset: 32)
502 !33 = !DIDerivedType(tag: DW_TAG_member, name: "prot", scope: !29, file: !1, line: 18, baseType: !14, size: 32, align: 32, offset: 64, flags: DIFlagProtected)
503 !34 = !DILocation(line: 29, column: 9, scope: !7)
504 !35 = !DILocalVariable(name: "dc", scope: !7, file: !1, line: 30, type: !36)
505 !36 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "DerivedClass", file: !1, line: 20, size: 384, align: 64, elements: !37, vtableHolder: !36, identifier: ".?AUDerivedClass@@")
506 !37 = !{!38, !39, !40, !45}
507 !38 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !36, baseType: !11)
508 !39 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !36, baseType: !29, offset: 4, flags: DIFlagVirtual)
509 !40 = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$DerivedClass", scope: !1, file: !1, baseType: !41, size: 64, flags: DIFlagArtificial)
510 !41 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !42, size: 64)
511 !42 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "__vtbl_ptr_type", baseType: !43, size: 64)
512 !43 = !DISubroutineType(types: !44)
513 !44 = !{!14}
514 !45 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !36, file: !1, line: 21, baseType: !14, size: 32, align: 32, offset: 192)
515 !46 = !DILocation(line: 30, column: 16, scope: !7)
516 !47 = !DILocalVariable(name: "n", scope: !7, file: !1, line: 31, type: !48)
517 !48 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Nested", scope: !29, file: !1, line: 23, size: 32, align: 32, elements: !49, identifier: ".?AUNested@Class@@")
518 !49 = !{!50}
519 !50 = !DIDerivedType(tag: DW_TAG_member, name: "n", scope: !48, file: !1, line: 24, baseType: !14, size: 32, align: 32)
520 !51 = !DILocation(line: 31, column: 17, scope: !7)
521 !52 = !DILocation(line: 32, column: 1, scope: !7)
522 !53 = distinct !DISubprogram(name: "DerivedClass::DerivedClass", linkageName: "\01??0DerivedClass@@QEAA@XZ", scope: !36, file: !1, line: 20, type: !54, isLocal: false, isDefinition: true, scopeLine: 20, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !57, retainedNodes: !2)
523 !54 = !DISubroutineType(types: !55)
524 !55 = !{null, !56}
525 !56 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !36, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
526 !57 = !DISubprogram(name: "DerivedClass::DerivedClass", scope: !36, type: !54, isLocal: false, isDefinition: false, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false)
527 !58 = !DILocalVariable(name: "is_most_derived", arg: 2, scope: !53, type: !14, flags: DIFlagArtificial)
528 !59 = !DILocation(line: 0, scope: !53)
529 !60 = !DILocalVariable(name: "this", arg: 1, scope: !53, type: !61, flags: DIFlagArtificial | DIFlagObjectPointer)
530 !61 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !36, size: 64, align: 64)
531 !62 = !DILocation(line: 20, column: 8, scope: !53)