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 ; RUN: llc < %s | FileCheck %s --check-prefix=ASM-INLINE-COMMENTS
5 ; Command to generate function-options.ll
6 ; $ clang++ class-options-common.cpp -S -emit-llvm -g -gcodeview -o class-options-common.ll
10 ; // Basically, there are two Property (class-options) expectations on each type:
11 ; // One for class forwarding reference, the other for class definition.
13 ; #define DEFINE_FUNCTION(T) \
14 ; T Func_##T(T &arg) { return arg; };
16 ; class EmptyClass {}; // Expect: CO = ForwardReference | HasUniqueName
17 ; // Expect: CO = HasUniqueName
18 ; DEFINE_FUNCTION(EmptyClass);
20 ; class ExplicitCtorClass { // Expect CO = ForwardReference | HasUniqueName
21 ; // Expect CO = HasConstructorOrDestructor | HasUniqueName
23 ; explicit ExplicitCtorClass();
25 ; DEFINE_FUNCTION(ExplicitCtorClass);
27 ; class DefaultedCtorClass { // Expect: CO = ForwardReference | HasUniqueName
28 ; // Expect: CO = HasUniqueName
30 ; DefaultedCtorClass() = default;
32 ; DEFINE_FUNCTION(DefaultedCtorClass);
34 ; class DefaultArgumentCtorClass { // Expect: CO = ForwardReference | HasUniqueName
35 ; // Expect: CO = HasConstructorOrDestructor | HasUniqueName
37 ; DefaultArgumentCtorClass(int x = 0);
39 ; DEFINE_FUNCTION(DefaultArgumentCtorClass);
41 ; class UserDtorClass { // Expect: CO = ForwardReference | HasUniqueName
42 ; // Expect: CO = HasConstructorOrDestructor| HasUniqueName
46 ; DEFINE_FUNCTION(UserDtorClass);
48 ; class DefaultedDtorClass { // Expect: CO = ForwardReference | HasUniqueName
49 ; // Expect: CO = HasUniqueName
51 ; ~DefaultedDtorClass() = default;
53 ; DEFINE_FUNCTION(DefaultedDtorClass);
55 ; class AClass : public ExplicitCtorClass { // Expect: CO = ForwardReference | HasUniqueName
56 ; // Expect: CO = HasConstructorOrDestructor | HasUniqueName
58 ; DEFINE_FUNCTION(AClass);
60 ; class BClass { static int x; }; // Expect: CO = ForwardReference | HasUniqueName
61 ; // Expect: CO = HasUniqueName
62 ; DEFINE_FUNCTION(BClass);
64 ; struct Foo { // Expect: CO = ForwardReference | HasUniqueName
65 ; // Expect: CO = HasUniqueName
67 ; Foo(const Foo &o) = default;
71 ; struct Bar { // Expect: CO = ForwardReference | HasUniqueName
72 ; // Expect: CO = HasConstructorOrDestructor | HasUniqueName
76 ; struct AStruct {}; // Expect: CO = ForwardReference | HasUniqueName
77 ; // Expect: CO = HasUniqueName
78 ; DEFINE_FUNCTION(AStruct);
80 ; struct BStruct { BStruct(); }; // Expect: CO = ForwardReference | HasUniqueName
81 ; // Expect: CO = HasConstructorOrDestructor | HasUniqueName
82 ; DEFINE_FUNCTION(BStruct);
85 ; struct ComplexStruct { // Expect: CO = ForwardReference | HasUniqueName | Scoped
86 ; // Expect: CO = ContainsNestedClass | HasConstructorOrDestructor | HasUniqueName | Scoped
89 ; struct S {}; // Expect: CO = ForwardReference | HasUniqueName | Nested | Scoped
90 ; // Expect: CO = HasUniqueName | Nested | Scoped
97 ; union AUnion {}; // Expect: CO = ForwardReference | HasUniqueName
98 ; // Expect: CO = HasUniqueName | Sealed
99 ; DEFINE_FUNCTION(AUnion);
101 ; union BUnion { BUnion() = default; }; // Expect: CO = ForwardReference | HasUniqueName
102 ; // Expect: CO = HasUniqueName | Sealed
103 ; DEFINE_FUNCTION(BUnion);
106 ; union ComplexUnion { // Note clang not yiled 'HasUniqueName' for this type, but MSVC does.
107 ; // Expect: CO = ForwardReference | Scoped
108 ; // Expect: CO = ContainsNestedClass | Scoped | Sealed
110 ; union NestedUnion { int x; }; // Note clang not yiled 'HasUniqueName' for this type, but MSVC does.
111 ; // Expect: CO = ForwardReference | Nested | Scoped
112 ; // Expect: CO = Nested | Scoped | Sealed
121 ; CHECK: Format: COFF-x86-64
122 ; CHECK: Arch: x86_64
123 ; CHECK: AddressSize: 64bit
124 ; CHECK: CodeViewTypes [
125 ; CHECK: Section: .debug$T ({{.*}})
129 ; CHECK: Class (0x{{.*}}) {
130 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
131 ; CHECK: MemberCount: 0
132 ; CHECK: Properties [ (0x280)
133 ; CHECK: ForwardReference (0x80)
134 ; CHECK: HasUniqueName (0x200)
136 ; CHECK: FieldList: 0x0
137 ; CHECK: DerivedFrom: 0x0
140 ; CHECK: Name: EmptyClass
141 ; CHECK: LinkageName: .?AVEmptyClass@@
143 ; CHECK: Class (0x{{.*}}) {
144 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
145 ; CHECK: MemberCount: 0
146 ; CHECK: Properties [ (0x200)
147 ; CHECK: HasUniqueName (0x200)
149 ; CHECK: FieldList: <field list> (0x{{.*}})
150 ; CHECK: DerivedFrom: 0x0
153 ; CHECK: Name: EmptyClass
154 ; CHECK: LinkageName: .?AVEmptyClass@@
158 ; CHECK: Class (0x{{.*}}) {
159 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
160 ; CHECK: MemberCount: 0
161 ; CHECK: Properties [ (0x280)
162 ; CHECK: ForwardReference (0x80)
163 ; CHECK: HasUniqueName (0x200)
165 ; CHECK: FieldList: 0x0
166 ; CHECK: DerivedFrom: 0x0
169 ; CHECK: Name: ExplicitCtorClass
170 ; CHECK: LinkageName: .?AVExplicitCtorClass@@
172 ; CHECK: Class (0x{{.*}}) {
173 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
174 ; CHECK: MemberCount: 1
175 ; CHECK: Properties [ (0x202)
176 ; CHECK: HasConstructorOrDestructor (0x2)
177 ; CHECK: HasUniqueName (0x200)
179 ; CHECK: FieldList: <field list> (0x{{.*}})
180 ; CHECK: DerivedFrom: 0x0
183 ; CHECK: Name: ExplicitCtorClass
184 ; CHECK: LinkageName: .?AVExplicitCtorClass@@
188 ; CHECK: Class (0x{{.*}}) {
189 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
190 ; CHECK: MemberCount: 0
191 ; CHECK: Properties [ (0x280)
192 ; CHECK: ForwardReference (0x80)
193 ; CHECK: HasUniqueName (0x200)
195 ; CHECK: FieldList: 0x0
196 ; CHECK: DerivedFrom: 0x0
199 ; CHECK: Name: DefaultedCtorClass
200 ; CHECK: LinkageName: .?AVDefaultedCtorClass@@
202 ; CHECK: Class (0x{{.*}}) {
203 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
204 ; CHECK: MemberCount: 1
205 ; CHECK: Properties [ (0x200)
206 ; CHECK: HasUniqueName (0x200)
208 ; CHECK: FieldList: <field list> (0x{{.*}})
209 ; CHECK: DerivedFrom: 0x0
212 ; CHECK: Name: DefaultedCtorClass
213 ; CHECK: LinkageName: .?AVDefaultedCtorClass@@
217 ; CHECK: Class (0x{{.*}}) {
218 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
219 ; CHECK: MemberCount: 0
220 ; CHECK: Properties [ (0x280)
221 ; CHECK: ForwardReference (0x80)
222 ; CHECK: HasUniqueName (0x200)
224 ; CHECK: FieldList: 0x0
225 ; CHECK: DerivedFrom: 0x0
228 ; CHECK: Name: DefaultArgumentCtorClass
229 ; CHECK: LinkageName: .?AVDefaultArgumentCtorClass@@
231 ; CHECK: Class (0x{{.*}}) {
232 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
233 ; CHECK: MemberCount: 1
234 ; CHECK: Properties [ (0x202)
235 ; CHECK: HasConstructorOrDestructor (0x2)
236 ; CHECK: HasUniqueName (0x200)
238 ; CHECK: FieldList: <field list> (0x{{.*}})
239 ; CHECK: DerivedFrom: 0x0
242 ; CHECK: Name: DefaultArgumentCtorClass
243 ; CHECK: LinkageName: .?AVDefaultArgumentCtorClass@@
247 ; CHECK: Class (0x{{.*}}) {
248 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
249 ; CHECK: MemberCount: 0
250 ; CHECK: Properties [ (0x280)
251 ; CHECK: ForwardReference (0x80)
252 ; CHECK: HasUniqueName (0x200)
254 ; CHECK: FieldList: 0x0
255 ; CHECK: DerivedFrom: 0x0
258 ; CHECK: Name: UserDtorClass
259 ; CHECK: LinkageName: .?AVUserDtorClass@@
261 ; CHECK: Class (0x{{.*}}) {
262 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
263 ; CHECK: MemberCount: 1
264 ; CHECK: Properties [ (0x202)
265 ; CHECK: HasConstructorOrDestructor (0x2)
266 ; CHECK: HasUniqueName (0x200)
268 ; CHECK: FieldList: <field list> (0x{{.*}})
269 ; CHECK: DerivedFrom: 0x0
272 ; CHECK: Name: UserDtorClass
273 ; CHECK: LinkageName: .?AVUserDtorClass@@
277 ; CHECK: Class (0x{{.*}}) {
278 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
279 ; CHECK: MemberCount: 0
280 ; CHECK: Properties [ (0x280)
281 ; CHECK: ForwardReference (0x80)
282 ; CHECK: HasUniqueName (0x200)
284 ; CHECK: FieldList: 0x0
285 ; CHECK: DerivedFrom: 0x0
288 ; CHECK: Name: DefaultedDtorClass
289 ; CHECK: LinkageName: .?AVDefaultedDtorClass@@
291 ; CHECK: Class (0x{{.*}}) {
292 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
293 ; CHECK: MemberCount: 1
294 ; CHECK: Properties [ (0x200)
295 ; CHECK: HasUniqueName (0x200)
297 ; CHECK: FieldList: <field list> (0x{{.*}})
298 ; CHECK: DerivedFrom: 0x0
301 ; CHECK: Name: DefaultedDtorClass
302 ; CHECK: LinkageName: .?AVDefaultedDtorClass@@
306 ; CHECK: Class (0x{{.*}}) {
307 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
308 ; CHECK: MemberCount: 0
309 ; CHECK: Properties [ (0x280)
310 ; CHECK: ForwardReference (0x80)
311 ; CHECK: HasUniqueName (0x200)
313 ; CHECK: FieldList: 0x0
314 ; CHECK: DerivedFrom: 0x0
317 ; CHECK: Name: AClass
318 ; CHECK: LinkageName: .?AVAClass@@
320 ; CHECK: Class (0x{{.*}}) {
321 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
322 ; CHECK: MemberCount: 1
323 ; CHECK: Properties [ (0x202)
324 ; CHECK: HasConstructorOrDestructor (0x2)
325 ; CHECK: HasUniqueName (0x200)
327 ; CHECK: FieldList: <field list> (0x{{.*}})
328 ; CHECK: DerivedFrom: 0x0
331 ; CHECK: Name: AClass
332 ; CHECK: LinkageName: .?AVAClass@@
336 ; CHECK: Class (0x{{.*}}) {
337 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
338 ; CHECK: MemberCount: 0
339 ; CHECK: Properties [ (0x280)
340 ; CHECK: ForwardReference (0x80)
341 ; CHECK: HasUniqueName (0x200)
343 ; CHECK: FieldList: 0x0
344 ; CHECK: DerivedFrom: 0x0
347 ; CHECK: Name: BClass
348 ; CHECK: LinkageName: .?AVBClass@@
350 ; CHECK: Class (0x{{.*}}) {
351 ; CHECK: TypeLeafKind: LF_CLASS (0x1504)
352 ; CHECK: MemberCount: 1
353 ; CHECK: Properties [ (0x200)
354 ; CHECK: HasUniqueName (0x200)
356 ; CHECK: FieldList: <field list> (0x{{.*}})
357 ; CHECK: DerivedFrom: 0x0
360 ; CHECK: Name: BClass
361 ; CHECK: LinkageName: .?AVBClass@@
365 ; CHECK: Struct (0x{{.*}}) {
366 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
367 ; CHECK: MemberCount: 0
368 ; CHECK: Properties [ (0x280)
369 ; CHECK: ForwardReference (0x80)
370 ; CHECK: HasUniqueName (0x200)
372 ; CHECK: FieldList: 0x0
373 ; CHECK: DerivedFrom: 0x0
376 ; CHECK: Name: AStruct
377 ; CHECK: LinkageName: .?AUAStruct@@
379 ; CHECK: Struct (0x{{.*}}) {
380 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
381 ; CHECK: MemberCount: 0
382 ; CHECK: Properties [ (0x200)
383 ; CHECK: HasUniqueName (0x200)
385 ; CHECK: FieldList: <field list> (0x{{.*}})
386 ; CHECK: DerivedFrom: 0x0
389 ; CHECK: Name: AStruct
390 ; CHECK: LinkageName: .?AUAStruct@@
394 ; CHECK: Struct (0x{{.*}}) {
395 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
396 ; CHECK: MemberCount: 0
397 ; CHECK: Properties [ (0x280)
398 ; CHECK: ForwardReference (0x80)
399 ; CHECK: HasUniqueName (0x200)
401 ; CHECK: FieldList: 0x0
402 ; CHECK: DerivedFrom: 0x0
405 ; CHECK: Name: BStruct
406 ; CHECK: LinkageName: .?AUBStruct@@
408 ; CHECK: Struct (0x{{.*}}) {
409 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
410 ; CHECK: MemberCount: 1
411 ; CHECK: Properties [ (0x202)
412 ; CHECK: HasConstructorOrDestructor (0x2)
413 ; CHECK: HasUniqueName (0x200)
415 ; CHECK: FieldList: <field list> (0x{{.*}})
416 ; CHECK: DerivedFrom: 0x0
419 ; CHECK: Name: BStruct
420 ; CHECK: LinkageName: .?AUBStruct@@
424 ; CHECK: Struct (0x{{.*}}) {
425 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
426 ; CHECK: MemberCount: 0
427 ; CHECK: Properties [ (0x380)
428 ; CHECK: ForwardReference (0x80)
429 ; CHECK: HasUniqueName (0x200)
430 ; CHECK: Scoped (0x100)
432 ; CHECK: FieldList: 0x0
433 ; CHECK: DerivedFrom: 0x0
436 ; CHECK: Name: S::ComplexStruct
437 ; CHECK: LinkageName: .?AUComplexStruct@?1??S@@YAXXZ@
439 ; CHECK: Struct (0x{{.*}}) {
440 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
441 ; CHECK: MemberCount: 0
442 ; CHECK: Properties [ (0x388)
443 ; CHECK: ForwardReference (0x80)
444 ; CHECK: HasUniqueName (0x200)
445 ; CHECK: Nested (0x8)
446 ; CHECK: Scoped (0x100)
448 ; CHECK: FieldList: 0x0
449 ; CHECK: DerivedFrom: 0x0
452 ; CHECK: Name: S::ComplexStruct::S
453 ; CHECK: LinkageName: .?AUS@ComplexStruct@?1??0@YAXXZ@
455 ; CHECK: Struct (0x{{.*}}) {
456 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
457 ; CHECK: MemberCount: 2
458 ; CHECK: Properties [ (0x310)
459 ; CHECK: ContainsNestedClass (0x10)
460 ; CHECK: HasUniqueName (0x200)
461 ; CHECK: Scoped (0x100)
463 ; CHECK: FieldList: <field list> (0x{{.*}})
464 ; CHECK: DerivedFrom: 0x0
467 ; CHECK: Name: S::ComplexStruct
468 ; CHECK: LinkageName: .?AUComplexStruct@?1??S@@YAXXZ@
470 ; CHECK: Struct (0x{{.*}}) {
471 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
472 ; CHECK: MemberCount: 0
473 ; CHECK: Properties [ (0x308)
474 ; CHECK: HasUniqueName (0x200)
475 ; CHECK: Nested (0x8)
476 ; CHECK: Scoped (0x100)
478 ; CHECK: FieldList: <field list> (0x{{.*}})
479 ; CHECK: DerivedFrom: 0x0
482 ; CHECK: Name: S::ComplexStruct::S
483 ; CHECK: LinkageName: .?AUS@ComplexStruct@?1??0@YAXXZ@
487 ; CHECK: Union (0x1067) {
488 ; CHECK: TypeLeafKind: LF_UNION (0x1506)
489 ; CHECK: MemberCount: 0
490 ; CHECK: Properties [ (0x280)
491 ; CHECK: ForwardReference (0x80)
492 ; CHECK: HasUniqueName (0x200)
494 ; CHECK: FieldList: 0x0
496 ; CHECK: Name: AUnion
497 ; CHECK: LinkageName: .?ATAUnion@@
499 ; CHECK: Union (0x106B) {
500 ; CHECK: TypeLeafKind: LF_UNION (0x1506)
501 ; CHECK: MemberCount: 0
502 ; CHECK: Properties [ (0x600)
503 ; CHECK: HasUniqueName (0x200)
504 ; CHECK: Sealed (0x400)
506 ; CHECK: FieldList: <field list> (0x{{.*}})
508 ; CHECK: Name: AUnion
509 ; CHECK: LinkageName: .?ATAUnion@@
513 ; CHECK: Union (0x106E) {
514 ; CHECK: TypeLeafKind: LF_UNION (0x1506)
515 ; CHECK: MemberCount: 0
516 ; CHECK: Properties [ (0x280)
517 ; CHECK: ForwardReference (0x80)
518 ; CHECK: HasUniqueName (0x200)
520 ; CHECK: FieldList: 0x0
522 ; CHECK: Name: BUnion
523 ; CHECK: LinkageName: .?ATBUnion@@
525 ; CHECK: Union (0x1075) {
526 ; CHECK: TypeLeafKind: LF_UNION (0x1506)
527 ; CHECK: MemberCount: 1
528 ; CHECK: Properties [ (0x600)
529 ; CHECK: HasUniqueName (0x200)
530 ; CHECK: Sealed (0x400)
532 ; CHECK: FieldList: <field list> (0x{{.*}})
534 ; CHECK: Name: BUnion
535 ; CHECK: LinkageName: .?ATBUnion@@
539 ; CHECK: Union (0x{{.*}}) {
540 ; CHECK: TypeLeafKind: LF_UNION (0x1506)
541 ; CHECK: MemberCount: 0
542 ; CHECK: Properties [ (0x380)
543 ; CHECK: ForwardReference (0x80)
544 ; CHECK: HasUniqueName (0x200)
545 ; CHECK: Scoped (0x100)
547 ; CHECK: FieldList: 0x0
549 ; CHECK: Name: U::ComplexUnion
550 ; CHECK: LinkageName: .?ATComplexUnion@?1??U@@YAXXZ@
552 ; CHECK: Union (0x{{.*}}) {
553 ; CHECK: TypeLeafKind: LF_UNION (0x1506)
554 ; CHECK: MemberCount: 0
555 ; CHECK: Properties [ (0x388)
556 ; CHECK: ForwardReference (0x80)
557 ; CHECK: HasUniqueName (0x200)
558 ; CHECK: Nested (0x8)
559 ; CHECK: Scoped (0x100)
561 ; CHECK: FieldList: 0x0
563 ; CHECK: Name: U::ComplexUnion::NestedUnion
564 ; CHECK: LinkageName: .?ATNestedUnion@ComplexUnion@?1??U@@YAXXZ@
566 ; CHECK: Union (0x{{.*}}) {
567 ; CHECK: TypeLeafKind: LF_UNION (0x1506)
568 ; CHECK: MemberCount: 3
569 ; CHECK: Properties [ (0x710)
570 ; CHECK: ContainsNestedClass (0x10)
571 ; CHECK: HasUniqueName (0x200)
572 ; CHECK: Scoped (0x100)
573 ; CHECK: Sealed (0x400)
575 ; CHECK: FieldList: <field list> (0x{{.*}})
577 ; CHECK: Name: U::ComplexUnion
578 ; CHECK: LinkageName: .?ATComplexUnion@?1??U@@YAXXZ@
580 ; CHECK: Union (0x{{.*}}) {
581 ; CHECK: TypeLeafKind: LF_UNION (0x1506)
582 ; CHECK: MemberCount: 1
583 ; CHECK: Properties [ (0x708)
584 ; CHECK: HasUniqueName (0x200)
585 ; CHECK: Nested (0x8)
586 ; CHECK: Scoped (0x100)
587 ; CHECK: Sealed (0x400)
589 ; CHECK: FieldList: <field list> (0x{{.*}})
591 ; CHECK: Name: U::ComplexUnion::NestedUnion
592 ; CHECK: LinkageName: .?ATNestedUnion@ComplexUnion@?1??U@@YAXXZ@
596 ; CHECK: Struct (0x{{.*}}) {
597 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
598 ; CHECK: MemberCount: 0
599 ; CHECK: Properties [ (0x280)
600 ; CHECK: ForwardReference (0x80)
601 ; CHECK: HasUniqueName (0x200)
603 ; CHECK: FieldList: 0x0
604 ; CHECK: DerivedFrom: 0x0
608 ; CHECK: LinkageName: .?AUFoo@@
610 ; CHECK: Struct (0x{{.*}}) {
611 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
612 ; CHECK: MemberCount: 3
613 ; CHECK: Properties [ (0x200)
614 ; CHECK: HasUniqueName (0x200)
616 ; CHECK: FieldList: <field list> (0x{{.*}})
617 ; CHECK: DerivedFrom: 0x0
621 ; CHECK: LinkageName: .?AUFoo@@
625 ; CHECK: Struct (0x{{.*}}) {
626 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
627 ; CHECK: MemberCount: 0
628 ; CHECK: Properties [ (0x280)
629 ; CHECK: ForwardReference (0x80)
630 ; CHECK: HasUniqueName (0x200)
632 ; CHECK: FieldList: 0x0
633 ; CHECK: DerivedFrom: 0x0
637 ; CHECK: LinkageName: .?AUBar@@
639 ; CHECK: Struct (0x{{.*}}) {
640 ; CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
641 ; CHECK: MemberCount: 1
642 ; CHECK: Properties [ (0x202)
643 ; CHECK: HasConstructorOrDestructor (0x2)
644 ; CHECK: HasUniqueName (0x200)
646 ; CHECK: FieldList: <field list> (0x{{.*}})
647 ; CHECK: DerivedFrom: 0x0
651 ; CHECK: LinkageName: .?AUBar@@
655 ; ASM-INLINE-COMMENTS: # MethodOverloadList (0x1088)
656 ; ASM-INLINE-COMMENTS: .short 0x12 # Record length
657 ; ASM-INLINE-COMMENTS: .short 0x1206 # Record kind: LF_METHODLIST
658 ; ASM-INLINE-COMMENTS: .short 0x3 # Method
659 ; ASM-INLINE-COMMENTS: # Attrs: Public
660 ; ASM-INLINE-COMMENTS: .short 0x0
661 ; ASM-INLINE-COMMENTS: .long 0x1083 # Type: void Foo::()
662 ; ASM-INLINE-COMMENTS: .short 0x3 # Attrs: Public
663 ; ASM-INLINE-COMMENTS: .short 0x0
664 ; ASM-INLINE-COMMENTS: .long 0x1087 # Type: void Foo::(const Foo&)
667 ; ModuleID = 'class-options-common.cpp'
668 source_filename = "class-options.cpp"
669 target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
670 target triple = "x86_64-pc-windows-msvc19.15.26729"
672 %struct.Foo = type { i32 }
673 %struct.Bar = type { i32 }
674 %class.EmptyClass = type { i8 }
675 %class.ExplicitCtorClass = type { i8 }
676 %class.DefaultedCtorClass = type { i8 }
677 %class.DefaultArgumentCtorClass = type { i8 }
678 %class.UserDtorClass = type { i8 }
679 %class.DefaultedDtorClass = type { i8 }
680 %class.AClass = type { i8 }
681 %class.BClass = type { i8 }
682 %struct.AStruct = type { i8 }
683 %struct.BStruct = type { i8 }
684 %struct.ComplexStruct = type { %"struct.S()::ComplexStruct::S" }
685 %"struct.S()::ComplexStruct::S" = type { i8 }
686 %union.AUnion = type { i8 }
687 %union.BUnion = type { i8 }
688 %union.ComplexUnion = type { %"union.U()::ComplexUnion::NestedUnion" }
689 %"union.U()::ComplexUnion::NestedUnion" = type { i32 }
691 @"?f@@3UFoo@@A" = dso_local global %struct.Foo zeroinitializer, align 4, !dbg !0
692 @"?b@@3UBar@@A" = dso_local global %struct.Bar zeroinitializer, align 4, !dbg !6
694 ; Function Attrs: noinline nounwind optnone uwtable
695 define dso_local i8 @"?Func_EmptyClass@@YA?AVEmptyClass@@AEAV1@@Z"(%class.EmptyClass* dereferenceable(1) %arg) #0 !dbg !30 {
697 %retval = alloca %class.EmptyClass, align 1
698 %arg.addr = alloca %class.EmptyClass*, align 8
699 store %class.EmptyClass* %arg, %class.EmptyClass** %arg.addr, align 8
700 call void @llvm.dbg.declare(metadata %class.EmptyClass** %arg.addr, metadata !35, metadata !DIExpression()), !dbg !36
701 %0 = load %class.EmptyClass*, %class.EmptyClass** %arg.addr, align 8, !dbg !36
702 %coerce.dive = getelementptr inbounds %class.EmptyClass, %class.EmptyClass* %retval, i32 0, i32 0, !dbg !36
703 %1 = load i8, i8* %coerce.dive, align 1, !dbg !36
707 ; Function Attrs: nounwind readnone speculatable
708 declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
710 ; Function Attrs: noinline nounwind optnone uwtable
711 define dso_local void @"?Func_ExplicitCtorClass@@YA?AVExplicitCtorClass@@AEAV1@@Z"(%class.ExplicitCtorClass* noalias sret %agg.result, %class.ExplicitCtorClass* dereferenceable(1) %arg) #0 !dbg !37 {
713 %arg.addr = alloca %class.ExplicitCtorClass*, align 8
714 store %class.ExplicitCtorClass* %arg, %class.ExplicitCtorClass** %arg.addr, align 8
715 call void @llvm.dbg.declare(metadata %class.ExplicitCtorClass** %arg.addr, metadata !47, metadata !DIExpression()), !dbg !48
716 %0 = load %class.ExplicitCtorClass*, %class.ExplicitCtorClass** %arg.addr, align 8, !dbg !48
720 ; Function Attrs: noinline nounwind optnone uwtable
721 define dso_local void @"?Func_DefaultedCtorClass@@YA?AVDefaultedCtorClass@@AEAV1@@Z"(%class.DefaultedCtorClass* noalias sret %agg.result, %class.DefaultedCtorClass* dereferenceable(1) %arg) #0 !dbg !49 {
723 %arg.addr = alloca %class.DefaultedCtorClass*, align 8
724 store %class.DefaultedCtorClass* %arg, %class.DefaultedCtorClass** %arg.addr, align 8
725 call void @llvm.dbg.declare(metadata %class.DefaultedCtorClass** %arg.addr, metadata !59, metadata !DIExpression()), !dbg !60
726 %0 = load %class.DefaultedCtorClass*, %class.DefaultedCtorClass** %arg.addr, align 8, !dbg !60
730 ; Function Attrs: noinline nounwind optnone uwtable
731 define dso_local void @"?Func_DefaultArgumentCtorClass@@YA?AVDefaultArgumentCtorClass@@AEAV1@@Z"(%class.DefaultArgumentCtorClass* noalias sret %agg.result, %class.DefaultArgumentCtorClass* dereferenceable(1) %arg) #0 !dbg !61 {
733 %arg.addr = alloca %class.DefaultArgumentCtorClass*, align 8
734 store %class.DefaultArgumentCtorClass* %arg, %class.DefaultArgumentCtorClass** %arg.addr, align 8
735 call void @llvm.dbg.declare(metadata %class.DefaultArgumentCtorClass** %arg.addr, metadata !71, metadata !DIExpression()), !dbg !72
736 %0 = load %class.DefaultArgumentCtorClass*, %class.DefaultArgumentCtorClass** %arg.addr, align 8, !dbg !72
740 ; Function Attrs: noinline nounwind optnone uwtable
741 define dso_local void @"?Func_UserDtorClass@@YA?AVUserDtorClass@@AEAV1@@Z"(%class.UserDtorClass* noalias sret %agg.result, %class.UserDtorClass* dereferenceable(1) %arg) #0 !dbg !73 {
743 %arg.addr = alloca %class.UserDtorClass*, align 8
744 store %class.UserDtorClass* %arg, %class.UserDtorClass** %arg.addr, align 8
745 call void @llvm.dbg.declare(metadata %class.UserDtorClass** %arg.addr, metadata !83, metadata !DIExpression()), !dbg !84
746 %0 = load %class.UserDtorClass*, %class.UserDtorClass** %arg.addr, align 8, !dbg !84
750 ; Function Attrs: noinline nounwind optnone uwtable
751 define dso_local void @"?Func_DefaultedDtorClass@@YA?AVDefaultedDtorClass@@AEAV1@@Z"(%class.DefaultedDtorClass* noalias sret %agg.result, %class.DefaultedDtorClass* dereferenceable(1) %arg) #0 !dbg !85 {
753 %arg.addr = alloca %class.DefaultedDtorClass*, align 8
754 store %class.DefaultedDtorClass* %arg, %class.DefaultedDtorClass** %arg.addr, align 8
755 call void @llvm.dbg.declare(metadata %class.DefaultedDtorClass** %arg.addr, metadata !95, metadata !DIExpression()), !dbg !96
756 %0 = load %class.DefaultedDtorClass*, %class.DefaultedDtorClass** %arg.addr, align 8, !dbg !96
760 ; Function Attrs: noinline nounwind optnone uwtable
761 define dso_local void @"?Func_AClass@@YA?AVAClass@@AEAV1@@Z"(%class.AClass* noalias sret %agg.result, %class.AClass* dereferenceable(1) %arg) #0 !dbg !97 {
763 %arg.addr = alloca %class.AClass*, align 8
764 store %class.AClass* %arg, %class.AClass** %arg.addr, align 8
765 call void @llvm.dbg.declare(metadata %class.AClass** %arg.addr, metadata !104, metadata !DIExpression()), !dbg !105
766 %0 = load %class.AClass*, %class.AClass** %arg.addr, align 8, !dbg !105
770 ; Function Attrs: noinline nounwind optnone uwtable
771 define dso_local i8 @"?Func_BClass@@YA?AVBClass@@AEAV1@@Z"(%class.BClass* dereferenceable(1) %arg) #0 !dbg !106 {
773 %retval = alloca %class.BClass, align 1
774 %arg.addr = alloca %class.BClass*, align 8
775 store %class.BClass* %arg, %class.BClass** %arg.addr, align 8
776 call void @llvm.dbg.declare(metadata %class.BClass** %arg.addr, metadata !113, metadata !DIExpression()), !dbg !114
777 %0 = load %class.BClass*, %class.BClass** %arg.addr, align 8, !dbg !114
778 %coerce.dive = getelementptr inbounds %class.BClass, %class.BClass* %retval, i32 0, i32 0, !dbg !114
779 %1 = load i8, i8* %coerce.dive, align 1, !dbg !114
783 ; Function Attrs: noinline nounwind optnone uwtable
784 define dso_local i8 @"?Func_AStruct@@YA?AUAStruct@@AEAU1@@Z"(%struct.AStruct* dereferenceable(1) %arg) #0 !dbg !115 {
786 %retval = alloca %struct.AStruct, align 1
787 %arg.addr = alloca %struct.AStruct*, align 8
788 store %struct.AStruct* %arg, %struct.AStruct** %arg.addr, align 8
789 call void @llvm.dbg.declare(metadata %struct.AStruct** %arg.addr, metadata !120, metadata !DIExpression()), !dbg !121
790 %0 = load %struct.AStruct*, %struct.AStruct** %arg.addr, align 8, !dbg !121
791 %coerce.dive = getelementptr inbounds %struct.AStruct, %struct.AStruct* %retval, i32 0, i32 0, !dbg !121
792 %1 = load i8, i8* %coerce.dive, align 1, !dbg !121
796 ; Function Attrs: noinline nounwind optnone uwtable
797 define dso_local void @"?Func_BStruct@@YA?AUBStruct@@AEAU1@@Z"(%struct.BStruct* noalias sret %agg.result, %struct.BStruct* dereferenceable(1) %arg) #0 !dbg !122 {
799 %arg.addr = alloca %struct.BStruct*, align 8
800 store %struct.BStruct* %arg, %struct.BStruct** %arg.addr, align 8
801 call void @llvm.dbg.declare(metadata %struct.BStruct** %arg.addr, metadata !132, metadata !DIExpression()), !dbg !133
802 %0 = load %struct.BStruct*, %struct.BStruct** %arg.addr, align 8, !dbg !133
806 ; Function Attrs: noinline nounwind optnone uwtable
807 define dso_local void @"?S@@YAXXZ"() #0 !dbg !134 {
809 %s = alloca %struct.ComplexStruct, align 1
810 call void @llvm.dbg.declare(metadata %struct.ComplexStruct* %s, metadata !137, metadata !DIExpression()), !dbg !142
814 ; Function Attrs: noinline nounwind optnone uwtable
815 define dso_local i8 @"?Func_AUnion@@YA?ATAUnion@@AEAT1@@Z"(%union.AUnion* dereferenceable(1) %arg) #0 !dbg !144 {
817 %retval = alloca %union.AUnion, align 1
818 %arg.addr = alloca %union.AUnion*, align 8
819 store %union.AUnion* %arg, %union.AUnion** %arg.addr, align 8
820 call void @llvm.dbg.declare(metadata %union.AUnion** %arg.addr, metadata !149, metadata !DIExpression()), !dbg !150
821 %0 = load %union.AUnion*, %union.AUnion** %arg.addr, align 8, !dbg !150
822 %coerce.dive = getelementptr inbounds %union.AUnion, %union.AUnion* %retval, i32 0, i32 0, !dbg !150
823 %1 = load i8, i8* %coerce.dive, align 1, !dbg !150
827 ; Function Attrs: noinline nounwind optnone uwtable
828 define dso_local void @"?Func_BUnion@@YA?ATBUnion@@AEAT1@@Z"(%union.BUnion* noalias sret %agg.result, %union.BUnion* dereferenceable(1) %arg) #0 !dbg !151 {
830 %arg.addr = alloca %union.BUnion*, align 8
831 store %union.BUnion* %arg, %union.BUnion** %arg.addr, align 8
832 call void @llvm.dbg.declare(metadata %union.BUnion** %arg.addr, metadata !161, metadata !DIExpression()), !dbg !162
833 %0 = load %union.BUnion*, %union.BUnion** %arg.addr, align 8, !dbg !162
837 ; Function Attrs: noinline nounwind optnone uwtable
838 define dso_local void @"?U@@YAXXZ"() #0 !dbg !163 {
840 %c = alloca %union.ComplexUnion, align 4
841 call void @llvm.dbg.declare(metadata %union.ComplexUnion* %c, metadata !164, metadata !DIExpression()), !dbg !172
845 attributes #0 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-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" }
846 attributes #1 = { nounwind readnone speculatable }
849 !llvm.module.flags = !{!25, !26, !27, !28}
852 !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
853 !1 = distinct !DIGlobalVariable(name: "f", linkageName: "?f@@3UFoo@@A", scope: !2, file: !8, line: 60, type: !13, isLocal: false, isDefinition: true)
854 !2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 8.0.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, nameTableKind: None)
855 !3 = !DIFile(filename: "class-options-common.cpp", directory: "D:\5Cupstream\5Cllvm\5Ctest\5CDebugInfo\5CCOFF", checksumkind: CSK_MD5, checksum: "73d5c55a09899333f27526ae5ea8c878")
858 !6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression())
859 !7 = distinct !DIGlobalVariable(name: "b", linkageName: "?b@@3UBar@@A", scope: !2, file: !8, line: 65, type: !9, isLocal: false, isDefinition: true)
860 !8 = !DIFile(filename: "class-options.cpp", directory: "D:\5Cupstream\5Cllvm\5Ctest\5CDebugInfo\5CCOFF")
861 !9 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Bar", file: !8, line: 62, size: 32, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !10, identifier: ".?AUBar@@")
863 !11 = !DIDerivedType(tag: DW_TAG_member, name: "m", scope: !9, file: !8, line: 64, baseType: !12, size: 32)
864 !12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
865 !13 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", file: !8, line: 55, size: 32, flags: DIFlagTypePassByValue, elements: !14, identifier: ".?AUFoo@@")
866 !14 = !{!15, !16, !20}
867 !15 = !DIDerivedType(tag: DW_TAG_member, name: "m", scope: !13, file: !8, line: 59, baseType: !12, size: 32)
868 !16 = !DISubprogram(name: "Foo", scope: !13, file: !8, line: 57, type: !17, isLocal: false, isDefinition: false, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false)
869 !17 = !DISubroutineType(types: !18)
871 !19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
872 !20 = !DISubprogram(name: "Foo", scope: !13, file: !8, line: 58, type: !21, isLocal: false, isDefinition: false, scopeLine: 58, flags: DIFlagPrototyped, isOptimized: false)
873 !21 = !DISubroutineType(types: !22)
874 !22 = !{null, !19, !23}
875 !23 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !24, size: 64)
876 !24 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !13)
877 !25 = !{i32 2, !"CodeView", i32 1}
878 !26 = !{i32 2, !"Debug Info Version", i32 3}
879 !27 = !{i32 1, !"wchar_size", i32 2}
880 !28 = !{i32 7, !"PIC Level", i32 2}
881 !29 = !{!"clang version 8.0.0 "}
882 !30 = distinct !DISubprogram(name: "Func_EmptyClass", linkageName: "?Func_EmptyClass@@YA?AVEmptyClass@@AEAV1@@Z", scope: !8, file: !8, line: 9, type: !31, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
883 !31 = !DISubroutineType(types: !32)
885 !33 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "EmptyClass", file: !8, line: 7, size: 8, flags: DIFlagTypePassByValue, elements: !4, identifier: ".?AVEmptyClass@@")
886 !34 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !33, size: 64)
887 !35 = !DILocalVariable(name: "arg", arg: 1, scope: !30, file: !8, line: 9, type: !34)
888 !36 = !DILocation(line: 9, scope: !30)
889 !37 = distinct !DISubprogram(name: "Func_ExplicitCtorClass", linkageName: "?Func_ExplicitCtorClass@@YA?AVExplicitCtorClass@@AEAV1@@Z", scope: !8, file: !8, line: 16, type: !38, isLocal: false, isDefinition: true, scopeLine: 16, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
890 !38 = !DISubroutineType(types: !39)
892 !40 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "ExplicitCtorClass", file: !8, line: 11, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !41, identifier: ".?AVExplicitCtorClass@@")
894 !42 = !DISubprogram(name: "ExplicitCtorClass", scope: !40, file: !8, line: 14, type: !43, isLocal: false, isDefinition: false, scopeLine: 14, flags: DIFlagPublic | DIFlagExplicit | DIFlagPrototyped, isOptimized: false)
895 !43 = !DISubroutineType(types: !44)
897 !45 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !40, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
898 !46 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !40, size: 64)
899 !47 = !DILocalVariable(name: "arg", arg: 1, scope: !37, file: !8, line: 16, type: !46)
900 !48 = !DILocation(line: 16, scope: !37)
901 !49 = distinct !DISubprogram(name: "Func_DefaultedCtorClass", linkageName: "?Func_DefaultedCtorClass@@YA?AVDefaultedCtorClass@@AEAV1@@Z", scope: !8, file: !8, line: 23, type: !50, isLocal: false, isDefinition: true, scopeLine: 23, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
902 !50 = !DISubroutineType(types: !51)
904 !52 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "DefaultedCtorClass", file: !8, line: 18, size: 8, flags: DIFlagTypePassByValue, elements: !53, identifier: ".?AVDefaultedCtorClass@@")
906 !54 = !DISubprogram(name: "DefaultedCtorClass", scope: !52, file: !8, line: 21, type: !55, isLocal: false, isDefinition: false, scopeLine: 21, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: false)
907 !55 = !DISubroutineType(types: !56)
909 !57 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !52, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
910 !58 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !52, size: 64)
911 !59 = !DILocalVariable(name: "arg", arg: 1, scope: !49, file: !8, line: 23, type: !58)
912 !60 = !DILocation(line: 23, scope: !49)
913 !61 = distinct !DISubprogram(name: "Func_DefaultArgumentCtorClass", linkageName: "?Func_DefaultArgumentCtorClass@@YA?AVDefaultArgumentCtorClass@@AEAV1@@Z", scope: !8, file: !8, line: 30, type: !62, isLocal: false, isDefinition: true, scopeLine: 30, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
914 !62 = !DISubroutineType(types: !63)
916 !64 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "DefaultArgumentCtorClass", file: !8, line: 25, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !65, identifier: ".?AVDefaultArgumentCtorClass@@")
918 !66 = !DISubprogram(name: "DefaultArgumentCtorClass", scope: !64, file: !8, line: 28, type: !67, isLocal: false, isDefinition: false, scopeLine: 28, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: false)
919 !67 = !DISubroutineType(types: !68)
920 !68 = !{null, !69, !12}
921 !69 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !64, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
922 !70 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !64, size: 64)
923 !71 = !DILocalVariable(name: "arg", arg: 1, scope: !61, file: !8, line: 30, type: !70)
924 !72 = !DILocation(line: 30, scope: !61)
925 !73 = distinct !DISubprogram(name: "Func_UserDtorClass", linkageName: "?Func_UserDtorClass@@YA?AVUserDtorClass@@AEAV1@@Z", scope: !8, file: !8, line: 37, type: !74, isLocal: false, isDefinition: true, scopeLine: 37, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
926 !74 = !DISubroutineType(types: !75)
928 !76 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "UserDtorClass", file: !8, line: 32, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !77, identifier: ".?AVUserDtorClass@@")
930 !78 = !DISubprogram(name: "~UserDtorClass", scope: !76, file: !8, line: 35, type: !79, isLocal: false, isDefinition: false, scopeLine: 35, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: false)
931 !79 = !DISubroutineType(types: !80)
933 !81 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !76, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
934 !82 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !76, size: 64)
935 !83 = !DILocalVariable(name: "arg", arg: 1, scope: !73, file: !8, line: 37, type: !82)
936 !84 = !DILocation(line: 37, scope: !73)
937 !85 = distinct !DISubprogram(name: "Func_DefaultedDtorClass", linkageName: "?Func_DefaultedDtorClass@@YA?AVDefaultedDtorClass@@AEAV1@@Z", scope: !8, file: !8, line: 44, type: !86, isLocal: false, isDefinition: true, scopeLine: 44, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
938 !86 = !DISubroutineType(types: !87)
940 !88 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "DefaultedDtorClass", file: !8, line: 39, size: 8, flags: DIFlagTypePassByValue, elements: !89, identifier: ".?AVDefaultedDtorClass@@")
942 !90 = !DISubprogram(name: "~DefaultedDtorClass", scope: !88, file: !8, line: 42, type: !91, isLocal: false, isDefinition: false, scopeLine: 42, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: false)
943 !91 = !DISubroutineType(types: !92)
945 !93 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !88, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
946 !94 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !88, size: 64)
947 !95 = !DILocalVariable(name: "arg", arg: 1, scope: !85, file: !8, line: 44, type: !94)
948 !96 = !DILocation(line: 44, scope: !85)
949 !97 = distinct !DISubprogram(name: "Func_AClass", linkageName: "?Func_AClass@@YA?AVAClass@@AEAV1@@Z", scope: !8, file: !8, line: 49, type: !98, isLocal: false, isDefinition: true, scopeLine: 49, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
950 !98 = !DISubroutineType(types: !99)
952 !100 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "AClass", file: !8, line: 46, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !101, identifier: ".?AVAClass@@")
954 !102 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !100, baseType: !40, flags: DIFlagPublic, extraData: i32 0)
955 !103 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !100, size: 64)
956 !104 = !DILocalVariable(name: "arg", arg: 1, scope: !97, file: !8, line: 49, type: !103)
957 !105 = !DILocation(line: 49, scope: !97)
958 !106 = distinct !DISubprogram(name: "Func_BClass", linkageName: "?Func_BClass@@YA?AVBClass@@AEAV1@@Z", scope: !8, file: !8, line: 53, type: !107, isLocal: false, isDefinition: true, scopeLine: 53, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
959 !107 = !DISubroutineType(types: !108)
961 !109 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "BClass", file: !8, line: 51, size: 8, flags: DIFlagTypePassByValue, elements: !110, identifier: ".?AVBClass@@")
963 !111 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !109, file: !8, line: 51, baseType: !12, flags: DIFlagStaticMember)
964 !112 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !109, size: 64)
965 !113 = !DILocalVariable(name: "arg", arg: 1, scope: !106, file: !8, line: 53, type: !112)
966 !114 = !DILocation(line: 53, scope: !106)
967 !115 = distinct !DISubprogram(name: "Func_AStruct", linkageName: "?Func_AStruct@@YA?AUAStruct@@AEAU1@@Z", scope: !8, file: !8, line: 69, type: !116, isLocal: false, isDefinition: true, scopeLine: 69, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
968 !116 = !DISubroutineType(types: !117)
970 !118 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "AStruct", file: !8, line: 67, size: 8, flags: DIFlagTypePassByValue, elements: !4, identifier: ".?AUAStruct@@")
971 !119 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !118, size: 64)
972 !120 = !DILocalVariable(name: "arg", arg: 1, scope: !115, file: !8, line: 69, type: !119)
973 !121 = !DILocation(line: 69, scope: !115)
974 !122 = distinct !DISubprogram(name: "Func_BStruct", linkageName: "?Func_BStruct@@YA?AUBStruct@@AEAU1@@Z", scope: !8, file: !8, line: 73, type: !123, isLocal: false, isDefinition: true, scopeLine: 73, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
975 !123 = !DISubroutineType(types: !124)
977 !125 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "BStruct", file: !8, line: 71, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !126, identifier: ".?AUBStruct@@")
979 !127 = !DISubprogram(name: "BStruct", scope: !125, file: !8, line: 71, type: !128, isLocal: false, isDefinition: false, scopeLine: 71, flags: DIFlagPrototyped, isOptimized: false)
980 !128 = !DISubroutineType(types: !129)
982 !130 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !125, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
983 !131 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !125, size: 64)
984 !132 = !DILocalVariable(name: "arg", arg: 1, scope: !122, file: !8, line: 73, type: !131)
985 !133 = !DILocation(line: 73, scope: !122)
986 !134 = distinct !DISubprogram(name: "S", linkageName: "?S@@YAXXZ", scope: !8, file: !8, line: 75, type: !135, isLocal: false, isDefinition: true, scopeLine: 75, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
987 !135 = !DISubroutineType(types: !136)
989 !137 = !DILocalVariable(name: "s", scope: !134, file: !8, line: 85, type: !138)
990 !138 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "ComplexStruct", scope: !134, file: !8, line: 76, size: 8, flags: DIFlagTypePassByValue, elements: !139, identifier: ".?AUComplexStruct@?1??S@@YAXXZ@")
992 !140 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", scope: !138, file: !8, line: 80, size: 8, flags: DIFlagTypePassByValue, elements: !4, identifier: ".?AUS@ComplexStruct@?1??0@YAXXZ@")
993 !141 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !138, file: !8, line: 83, baseType: !140, size: 8)
994 !142 = !DILocation(line: 85, scope: !134)
995 !143 = !DILocation(line: 86, scope: !134)
996 !144 = distinct !DISubprogram(name: "Func_AUnion", linkageName: "?Func_AUnion@@YA?ATAUnion@@AEAT1@@Z", scope: !8, file: !8, line: 90, type: !145, isLocal: false, isDefinition: true, scopeLine: 90, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
997 !145 = !DISubroutineType(types: !146)
999 !147 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "AUnion", file: !8, line: 88, size: 8, flags: DIFlagTypePassByValue, elements: !4, identifier: ".?ATAUnion@@")
1000 !148 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !147, size: 64)
1001 !149 = !DILocalVariable(name: "arg", arg: 1, scope: !144, file: !8, line: 90, type: !148)
1002 !150 = !DILocation(line: 90, scope: !144)
1003 !151 = distinct !DISubprogram(name: "Func_BUnion", linkageName: "?Func_BUnion@@YA?ATBUnion@@AEAT1@@Z", scope: !8, file: !8, line: 94, type: !152, isLocal: false, isDefinition: true, scopeLine: 94, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
1004 !152 = !DISubroutineType(types: !153)
1005 !153 = !{!154, !160}
1006 !154 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "BUnion", file: !8, line: 92, size: 8, flags: DIFlagTypePassByValue, elements: !155, identifier: ".?ATBUnion@@")
1008 !156 = !DISubprogram(name: "BUnion", scope: !154, file: !8, line: 92, type: !157, isLocal: false, isDefinition: false, scopeLine: 92, flags: DIFlagPrototyped, isOptimized: false)
1009 !157 = !DISubroutineType(types: !158)
1010 !158 = !{null, !159}
1011 !159 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !154, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
1012 !160 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !154, size: 64)
1013 !161 = !DILocalVariable(name: "arg", arg: 1, scope: !151, file: !8, line: 94, type: !160)
1014 !162 = !DILocation(line: 94, scope: !151)
1015 !163 = distinct !DISubprogram(name: "U", linkageName: "?U@@YAXXZ", scope: !8, file: !8, line: 96, type: !135, isLocal: false, isDefinition: true, scopeLine: 96, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
1016 !164 = !DILocalVariable(name: "c", scope: !163, file: !8, line: 105, type: !165)
1017 !165 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "ComplexUnion", scope: !163, file: !8, line: 97, size: 32, flags: DIFlagTypePassByValue, elements: !166, identifier: ".?ATComplexUnion@?1??U@@YAXXZ@")
1018 !166 = !{!167, !170, !171}
1019 !167 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "NestedUnion", scope: !165, file: !8, line: 100, size: 32, flags: DIFlagTypePassByValue, elements: !168, identifier: ".?ATNestedUnion@ComplexUnion@?1??U@@YAXXZ@")
1021 !169 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !167, file: !8, line: 100, baseType: !12, size: 32)
1022 !170 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !165, file: !8, line: 102, baseType: !167, size: 32)
1023 !171 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !165, file: !8, line: 103, baseType: !12, size: 32)
1024 !172 = !DILocation(line: 105, scope: !163)
1025 !173 = !DILocation(line: 106, scope: !163)