xref: /llvm-project/llvm/test/DebugInfo/COFF/class-options-common.ll (revision 10b03e66629aedad79a804e22d23b575077303b3)
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
4;
5; Same as above, with experimental debuginfo iterators.
6; RUN: llc --try-experimental-debuginfo-iterators < %s -filetype=obj | llvm-readobj - --codeview | FileCheck %s
7; RUN: llc --try-experimental-debuginfo-iterators < %s | llvm-mc -filetype=obj --triple=x86_64-windows | llvm-readobj - --codeview | FileCheck %s
8; RUN: llc --try-experimental-debuginfo-iterators < %s | FileCheck %s --check-prefix=ASM-INLINE-COMMENTS
9;
10; Command to generate function-options.ll
11; $ clang++ class-options-common.cpp -S -emit-llvm -g -gcodeview -o class-options-common.ll
12
13
14
15; // Basically, there are two Property (class-options) expectations on each type:
16; // One for class forwarding reference, the other for class definition.
17;
18; #define DEFINE_FUNCTION(T) \
19;   T Func_##T(T &arg) { return arg; };
20;
21; class EmptyClass {}; // Expect: CO = ForwardReference | HasUniqueName
22;                      // Expect: CO = HasUniqueName
23; DEFINE_FUNCTION(EmptyClass);
24;
25; class ExplicitCtorClass { // Expect CO = ForwardReference | HasUniqueName
26;                           // Expect CO = HasConstructorOrDestructor | HasUniqueName
27; public:
28;   explicit ExplicitCtorClass();
29; };
30; DEFINE_FUNCTION(ExplicitCtorClass);
31;
32; class DefaultedCtorClass { // Expect: CO = ForwardReference | HasUniqueName
33;                            // Expect: CO = HasUniqueName
34; public:
35;   DefaultedCtorClass() = default;
36; };
37; DEFINE_FUNCTION(DefaultedCtorClass);
38;
39; class DefaultArgumentCtorClass { // Expect: CO = ForwardReference | HasUniqueName
40;                                  // Expect: CO = HasConstructorOrDestructor | HasUniqueName
41; public:
42;   DefaultArgumentCtorClass(int x = 0);
43; };
44; DEFINE_FUNCTION(DefaultArgumentCtorClass);
45;
46; class UserDtorClass { // Expect: CO = ForwardReference | HasUniqueName
47;                       // Expect: CO = HasConstructorOrDestructor| HasUniqueName
48; public:
49;   ~UserDtorClass() {}
50; };
51; DEFINE_FUNCTION(UserDtorClass);
52;
53; class DefaultedDtorClass { // Expect: CO = ForwardReference | HasUniqueName
54;                            // Expect: CO = HasUniqueName
55; public:
56;   ~DefaultedDtorClass() = default;
57; };
58; DEFINE_FUNCTION(DefaultedDtorClass);
59;
60; class AClass : public ExplicitCtorClass { // Expect: CO = ForwardReference | HasUniqueName
61;                                           // Expect: CO = HasConstructorOrDestructor | HasUniqueName
62; };
63; DEFINE_FUNCTION(AClass);
64;
65; class BClass { static int x; }; // Expect: CO = ForwardReference | HasUniqueName
66;                                 // Expect: CO = HasUniqueName
67; DEFINE_FUNCTION(BClass);
68;
69; struct Foo { // Expect: CO = ForwardReference | HasUniqueName
70;              // Expect: CO = HasUniqueName
71;   Foo() = default;
72;   Foo(const Foo &o) = default;
73;   int m;
74; } f;
75;
76; struct Bar { // Expect: CO = ForwardReference | HasUniqueName
77;              // Expect: CO = HasConstructorOrDestructor | HasUniqueName
78;   int m = 0;
79; } b;
80;
81; struct AStruct {}; // Expect: CO = ForwardReference | HasUniqueName
82;                    // Expect: CO = HasUniqueName
83; DEFINE_FUNCTION(AStruct);
84;
85; struct BStruct { BStruct(); }; // Expect: CO = ForwardReference | HasUniqueName
86;                                // Expect: CO = HasConstructorOrDestructor | HasUniqueName
87; DEFINE_FUNCTION(BStruct);
88;
89; void S() {
90;   struct ComplexStruct { // Expect: CO = ForwardReference | HasUniqueName | Scoped
91;                          // Expect: CO = ContainsNestedClass | HasConstructorOrDestructor | HasUniqueName | Scoped
92;
93;
94;     struct S {}; // Expect: CO = ForwardReference | HasUniqueName | Nested | Scoped
95;                  // Expect: CO = HasUniqueName | Nested | Scoped
96;
97;     S s;
98;   };
99;   ComplexStruct s;
100; }
101;
102; union AUnion {}; // Expect: CO = ForwardReference | HasUniqueName
103;                  // Expect: CO = HasUniqueName | Sealed
104; DEFINE_FUNCTION(AUnion);
105;
106; union BUnion { BUnion() = default; }; // Expect: CO = ForwardReference | HasUniqueName
107;                                       // Expect: CO = HasUniqueName | Sealed
108; DEFINE_FUNCTION(BUnion);
109;
110; void U() {
111;   union ComplexUnion { // Note clang not yiled 'HasUniqueName' for this type, but MSVC does.
112;                        // Expect: CO = ForwardReference | Scoped
113;                        // Expect: CO = ContainsNestedClass | Scoped | Sealed
114;
115;     union NestedUnion { int x; }; // Note clang not yiled 'HasUniqueName' for this type, but MSVC does.
116;                                   // Expect: CO = ForwardReference | Nested | Scoped
117;                                   // Expect: CO = Nested | Scoped | Sealed
118;     NestedUnion a;
119;     int b;
120;   };
121;   ComplexUnion c;
122; }
123
124
125
126; CHECK: Format: COFF-x86-64
127; CHECK: Arch: x86_64
128; CHECK: AddressSize: 64bit
129; CHECK: CodeViewTypes [
130; CHECK:   Section: .debug$T ({{.*}})
131; CHECK:   Magic: 0x4
132
133
134; CHECK:   Class (0x{{.*}}) {
135; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
136; CHECK:     MemberCount: 0
137; CHECK:     Properties [ (0x280)
138; CHECK:       ForwardReference (0x80)
139; CHECK:       HasUniqueName (0x200)
140; CHECK:     ]
141; CHECK:     FieldList: 0x0
142; CHECK:     DerivedFrom: 0x0
143; CHECK:     VShape: 0x0
144; CHECK:     SizeOf: 0
145; CHECK:     Name: EmptyClass
146; CHECK:     LinkageName: .?AVEmptyClass@@
147; CHECK:   }
148; CHECK:   Class (0x{{.*}}) {
149; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
150; CHECK:     MemberCount: 0
151; CHECK:     Properties [ (0x200)
152; CHECK:       HasUniqueName (0x200)
153; CHECK:     ]
154; CHECK:     FieldList: <field list> (0x{{.*}})
155; CHECK:     DerivedFrom: 0x0
156; CHECK:     VShape: 0x0
157; CHECK:     SizeOf: 1
158; CHECK:     Name: EmptyClass
159; CHECK:     LinkageName: .?AVEmptyClass@@
160; CHECK:   }
161
162
163; CHECK:   Class (0x{{.*}}) {
164; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
165; CHECK:     MemberCount: 0
166; CHECK:     Properties [ (0x280)
167; CHECK:       ForwardReference (0x80)
168; CHECK:       HasUniqueName (0x200)
169; CHECK:     ]
170; CHECK:     FieldList: 0x0
171; CHECK:     DerivedFrom: 0x0
172; CHECK:     VShape: 0x0
173; CHECK:     SizeOf: 0
174; CHECK:     Name: ExplicitCtorClass
175; CHECK:     LinkageName: .?AVExplicitCtorClass@@
176; CHECK:   }
177; CHECK:   Class (0x{{.*}}) {
178; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
179; CHECK:     MemberCount: 1
180; CHECK:     Properties [ (0x202)
181; CHECK:       HasConstructorOrDestructor (0x2)
182; CHECK:       HasUniqueName (0x200)
183; CHECK:     ]
184; CHECK:     FieldList: <field list> (0x{{.*}})
185; CHECK:     DerivedFrom: 0x0
186; CHECK:     VShape: 0x0
187; CHECK:     SizeOf: 1
188; CHECK:     Name: ExplicitCtorClass
189; CHECK:     LinkageName: .?AVExplicitCtorClass@@
190; CHECK:   }
191
192
193; CHECK:   Class (0x{{.*}}) {
194; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
195; CHECK:     MemberCount: 0
196; CHECK:     Properties [ (0x280)
197; CHECK:       ForwardReference (0x80)
198; CHECK:       HasUniqueName (0x200)
199; CHECK:     ]
200; CHECK:     FieldList: 0x0
201; CHECK:     DerivedFrom: 0x0
202; CHECK:     VShape: 0x0
203; CHECK:     SizeOf: 0
204; CHECK:     Name: DefaultedCtorClass
205; CHECK:     LinkageName: .?AVDefaultedCtorClass@@
206; CHECK:   }
207; CHECK:   Class (0x{{.*}}) {
208; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
209; CHECK:     MemberCount: 1
210; CHECK:     Properties [ (0x200)
211; CHECK:       HasUniqueName (0x200)
212; CHECK:     ]
213; CHECK:     FieldList: <field list> (0x{{.*}})
214; CHECK:     DerivedFrom: 0x0
215; CHECK:     VShape: 0x0
216; CHECK:     SizeOf: 1
217; CHECK:     Name: DefaultedCtorClass
218; CHECK:     LinkageName: .?AVDefaultedCtorClass@@
219; CHECK:   }
220
221
222; CHECK:   Class (0x{{.*}}) {
223; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
224; CHECK:     MemberCount: 0
225; CHECK:     Properties [ (0x280)
226; CHECK:       ForwardReference (0x80)
227; CHECK:       HasUniqueName (0x200)
228; CHECK:     ]
229; CHECK:     FieldList: 0x0
230; CHECK:     DerivedFrom: 0x0
231; CHECK:     VShape: 0x0
232; CHECK:     SizeOf: 0
233; CHECK:     Name: DefaultArgumentCtorClass
234; CHECK:     LinkageName: .?AVDefaultArgumentCtorClass@@
235; CHECK:   }
236; CHECK:   Class (0x{{.*}}) {
237; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
238; CHECK:     MemberCount: 1
239; CHECK:     Properties [ (0x202)
240; CHECK:       HasConstructorOrDestructor (0x2)
241; CHECK:       HasUniqueName (0x200)
242; CHECK:     ]
243; CHECK:     FieldList: <field list> (0x{{.*}})
244; CHECK:     DerivedFrom: 0x0
245; CHECK:     VShape: 0x0
246; CHECK:     SizeOf: 1
247; CHECK:     Name: DefaultArgumentCtorClass
248; CHECK:     LinkageName: .?AVDefaultArgumentCtorClass@@
249; CHECK:   }
250
251
252; CHECK:   Class (0x{{.*}}) {
253; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
254; CHECK:     MemberCount: 0
255; CHECK:     Properties [ (0x280)
256; CHECK:       ForwardReference (0x80)
257; CHECK:       HasUniqueName (0x200)
258; CHECK:     ]
259; CHECK:     FieldList: 0x0
260; CHECK:     DerivedFrom: 0x0
261; CHECK:     VShape: 0x0
262; CHECK:     SizeOf: 0
263; CHECK:     Name: UserDtorClass
264; CHECK:     LinkageName: .?AVUserDtorClass@@
265; CHECK:   }
266; CHECK:   Class (0x{{.*}}) {
267; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
268; CHECK:     MemberCount: 1
269; CHECK:     Properties [ (0x202)
270; CHECK:       HasConstructorOrDestructor (0x2)
271; CHECK:       HasUniqueName (0x200)
272; CHECK:     ]
273; CHECK:     FieldList: <field list> (0x{{.*}})
274; CHECK:     DerivedFrom: 0x0
275; CHECK:     VShape: 0x0
276; CHECK:     SizeOf: 1
277; CHECK:     Name: UserDtorClass
278; CHECK:     LinkageName: .?AVUserDtorClass@@
279; CHECK:   }
280
281
282; CHECK:   Class (0x{{.*}}) {
283; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
284; CHECK:     MemberCount: 0
285; CHECK:     Properties [ (0x280)
286; CHECK:       ForwardReference (0x80)
287; CHECK:       HasUniqueName (0x200)
288; CHECK:     ]
289; CHECK:     FieldList: 0x0
290; CHECK:     DerivedFrom: 0x0
291; CHECK:     VShape: 0x0
292; CHECK:     SizeOf: 0
293; CHECK:     Name: DefaultedDtorClass
294; CHECK:     LinkageName: .?AVDefaultedDtorClass@@
295; CHECK:   }
296; CHECK:   Class (0x{{.*}}) {
297; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
298; CHECK:     MemberCount: 1
299; CHECK:     Properties [ (0x200)
300; CHECK:       HasUniqueName (0x200)
301; CHECK:     ]
302; CHECK:     FieldList: <field list> (0x{{.*}})
303; CHECK:     DerivedFrom: 0x0
304; CHECK:     VShape: 0x0
305; CHECK:     SizeOf: 1
306; CHECK:     Name: DefaultedDtorClass
307; CHECK:     LinkageName: .?AVDefaultedDtorClass@@
308; CHECK:   }
309
310
311; CHECK:   Class (0x{{.*}}) {
312; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
313; CHECK:     MemberCount: 0
314; CHECK:     Properties [ (0x280)
315; CHECK:       ForwardReference (0x80)
316; CHECK:       HasUniqueName (0x200)
317; CHECK:     ]
318; CHECK:     FieldList: 0x0
319; CHECK:     DerivedFrom: 0x0
320; CHECK:     VShape: 0x0
321; CHECK:     SizeOf: 0
322; CHECK:     Name: AClass
323; CHECK:     LinkageName: .?AVAClass@@
324; CHECK:   }
325; CHECK:   Class (0x{{.*}}) {
326; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
327; CHECK:     MemberCount: 1
328; CHECK:     Properties [ (0x202)
329; CHECK:       HasConstructorOrDestructor (0x2)
330; CHECK:       HasUniqueName (0x200)
331; CHECK:     ]
332; CHECK:     FieldList: <field list> (0x{{.*}})
333; CHECK:     DerivedFrom: 0x0
334; CHECK:     VShape: 0x0
335; CHECK:     SizeOf: 1
336; CHECK:     Name: AClass
337; CHECK:     LinkageName: .?AVAClass@@
338; CHECK:   }
339
340
341; CHECK:   Class (0x{{.*}}) {
342; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
343; CHECK:     MemberCount: 0
344; CHECK:     Properties [ (0x280)
345; CHECK:       ForwardReference (0x80)
346; CHECK:       HasUniqueName (0x200)
347; CHECK:     ]
348; CHECK:     FieldList: 0x0
349; CHECK:     DerivedFrom: 0x0
350; CHECK:     VShape: 0x0
351; CHECK:     SizeOf: 0
352; CHECK:     Name: BClass
353; CHECK:     LinkageName: .?AVBClass@@
354; CHECK:   }
355; CHECK:   Class (0x{{.*}}) {
356; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
357; CHECK:     MemberCount: 1
358; CHECK:     Properties [ (0x200)
359; CHECK:       HasUniqueName (0x200)
360; CHECK:     ]
361; CHECK:     FieldList: <field list> (0x{{.*}})
362; CHECK:     DerivedFrom: 0x0
363; CHECK:     VShape: 0x0
364; CHECK:     SizeOf: 1
365; CHECK:     Name: BClass
366; CHECK:     LinkageName: .?AVBClass@@
367; CHECK:   }
368
369
370; CHECK:   Struct (0x{{.*}}) {
371; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
372; CHECK:     MemberCount: 0
373; CHECK:     Properties [ (0x280)
374; CHECK:       ForwardReference (0x80)
375; CHECK:       HasUniqueName (0x200)
376; CHECK:     ]
377; CHECK:     FieldList: 0x0
378; CHECK:     DerivedFrom: 0x0
379; CHECK:     VShape: 0x0
380; CHECK:     SizeOf: 0
381; CHECK:     Name: AStruct
382; CHECK:     LinkageName: .?AUAStruct@@
383; CHECK:   }
384; CHECK:   Struct (0x{{.*}}) {
385; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
386; CHECK:     MemberCount: 0
387; CHECK:     Properties [ (0x200)
388; CHECK:       HasUniqueName (0x200)
389; CHECK:     ]
390; CHECK:     FieldList: <field list> (0x{{.*}})
391; CHECK:     DerivedFrom: 0x0
392; CHECK:     VShape: 0x0
393; CHECK:     SizeOf: 1
394; CHECK:     Name: AStruct
395; CHECK:     LinkageName: .?AUAStruct@@
396; CHECK:   }
397
398
399; CHECK:   Struct (0x{{.*}}) {
400; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
401; CHECK:     MemberCount: 0
402; CHECK:     Properties [ (0x280)
403; CHECK:       ForwardReference (0x80)
404; CHECK:       HasUniqueName (0x200)
405; CHECK:     ]
406; CHECK:     FieldList: 0x0
407; CHECK:     DerivedFrom: 0x0
408; CHECK:     VShape: 0x0
409; CHECK:     SizeOf: 0
410; CHECK:     Name: BStruct
411; CHECK:     LinkageName: .?AUBStruct@@
412; CHECK:   }
413; CHECK:   Struct (0x{{.*}}) {
414; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
415; CHECK:     MemberCount: 1
416; CHECK:     Properties [ (0x202)
417; CHECK:       HasConstructorOrDestructor (0x2)
418; CHECK:       HasUniqueName (0x200)
419; CHECK:     ]
420; CHECK:     FieldList: <field list> (0x{{.*}})
421; CHECK:     DerivedFrom: 0x0
422; CHECK:     VShape: 0x0
423; CHECK:     SizeOf: 1
424; CHECK:     Name: BStruct
425; CHECK:     LinkageName: .?AUBStruct@@
426; CHECK:   }
427
428
429; CHECK:   Struct (0x{{.*}}) {
430; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
431; CHECK:     MemberCount: 0
432; CHECK:     Properties [ (0x380)
433; CHECK:       ForwardReference (0x80)
434; CHECK:       HasUniqueName (0x200)
435; CHECK:       Scoped (0x100)
436; CHECK:     ]
437; CHECK:     FieldList: 0x0
438; CHECK:     DerivedFrom: 0x0
439; CHECK:     VShape: 0x0
440; CHECK:     SizeOf: 0
441; CHECK:     Name: S::ComplexStruct
442; CHECK:     LinkageName: .?AUComplexStruct@?1??S@@YAXXZ@
443; CHECK:   }
444; CHECK:   Struct (0x{{.*}}) {
445; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
446; CHECK:     MemberCount: 0
447; CHECK:     Properties [ (0x388)
448; CHECK:       ForwardReference (0x80)
449; CHECK:       HasUniqueName (0x200)
450; CHECK:       Nested (0x8)
451; CHECK:       Scoped (0x100)
452; CHECK:     ]
453; CHECK:     FieldList: 0x0
454; CHECK:     DerivedFrom: 0x0
455; CHECK:     VShape: 0x0
456; CHECK:     SizeOf: 0
457; CHECK:     Name: S::ComplexStruct::S
458; CHECK:     LinkageName: .?AUS@ComplexStruct@?1??0@YAXXZ@
459; CHECK:   }
460; CHECK:   Struct (0x{{.*}}) {
461; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
462; CHECK:     MemberCount: 2
463; CHECK:     Properties [ (0x310)
464; CHECK:       ContainsNestedClass (0x10)
465; CHECK:       HasUniqueName (0x200)
466; CHECK:       Scoped (0x100)
467; CHECK:     ]
468; CHECK:     FieldList: <field list> (0x{{.*}})
469; CHECK:     DerivedFrom: 0x0
470; CHECK:     VShape: 0x0
471; CHECK:     SizeOf: 1
472; CHECK:     Name: S::ComplexStruct
473; CHECK:     LinkageName: .?AUComplexStruct@?1??S@@YAXXZ@
474; CHECK:   }
475; CHECK:   Struct (0x{{.*}}) {
476; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
477; CHECK:     MemberCount: 0
478; CHECK:     Properties [ (0x308)
479; CHECK:       HasUniqueName (0x200)
480; CHECK:       Nested (0x8)
481; CHECK:       Scoped (0x100)
482; CHECK:     ]
483; CHECK:     FieldList: <field list> (0x{{.*}})
484; CHECK:     DerivedFrom: 0x0
485; CHECK:     VShape: 0x0
486; CHECK:     SizeOf: 1
487; CHECK:     Name: S::ComplexStruct::S
488; CHECK:     LinkageName: .?AUS@ComplexStruct@?1??0@YAXXZ@
489; CHECK:   }
490
491
492; CHECK:   Union (0x1067) {
493; CHECK:     TypeLeafKind: LF_UNION (0x1506)
494; CHECK:     MemberCount: 0
495; CHECK:     Properties [ (0x280)
496; CHECK:       ForwardReference (0x80)
497; CHECK:       HasUniqueName (0x200)
498; CHECK:     ]
499; CHECK:     FieldList: 0x0
500; CHECK:     SizeOf: 0
501; CHECK:     Name: AUnion
502; CHECK:     LinkageName: .?ATAUnion@@
503; CHECK:   }
504; CHECK:   Union (0x106B) {
505; CHECK:     TypeLeafKind: LF_UNION (0x1506)
506; CHECK:     MemberCount: 0
507; CHECK:     Properties [ (0x600)
508; CHECK:       HasUniqueName (0x200)
509; CHECK:       Sealed (0x400)
510; CHECK:     ]
511; CHECK:     FieldList: <field list> (0x{{.*}})
512; CHECK:     SizeOf: 1
513; CHECK:     Name: AUnion
514; CHECK:     LinkageName: .?ATAUnion@@
515; CHECK:   }
516
517
518; CHECK:   Union (0x106E) {
519; CHECK:     TypeLeafKind: LF_UNION (0x1506)
520; CHECK:     MemberCount: 0
521; CHECK:     Properties [ (0x280)
522; CHECK:       ForwardReference (0x80)
523; CHECK:       HasUniqueName (0x200)
524; CHECK:     ]
525; CHECK:     FieldList: 0x0
526; CHECK:     SizeOf: 0
527; CHECK:     Name: BUnion
528; CHECK:     LinkageName: .?ATBUnion@@
529; CHECK:   }
530; CHECK:   Union (0x1075) {
531; CHECK:     TypeLeafKind: LF_UNION (0x1506)
532; CHECK:     MemberCount: 1
533; CHECK:     Properties [ (0x600)
534; CHECK:       HasUniqueName (0x200)
535; CHECK:       Sealed (0x400)
536; CHECK:     ]
537; CHECK:     FieldList: <field list> (0x{{.*}})
538; CHECK:     SizeOf: 1
539; CHECK:     Name: BUnion
540; CHECK:     LinkageName: .?ATBUnion@@
541; CHECK:   }
542
543
544; CHECK:   Union (0x{{.*}}) {
545; CHECK:     TypeLeafKind: LF_UNION (0x1506)
546; CHECK:     MemberCount: 0
547; CHECK:     Properties [ (0x380)
548; CHECK:       ForwardReference (0x80)
549; CHECK:       HasUniqueName (0x200)
550; CHECK:       Scoped (0x100)
551; CHECK:     ]
552; CHECK:     FieldList: 0x0
553; CHECK:     SizeOf: 0
554; CHECK:     Name: U::ComplexUnion
555; CHECK:     LinkageName: .?ATComplexUnion@?1??U@@YAXXZ@
556; CHECK:   }
557; CHECK:   Union (0x{{.*}}) {
558; CHECK:     TypeLeafKind: LF_UNION (0x1506)
559; CHECK:     MemberCount: 0
560; CHECK:     Properties [ (0x388)
561; CHECK:       ForwardReference (0x80)
562; CHECK:       HasUniqueName (0x200)
563; CHECK:       Nested (0x8)
564; CHECK:       Scoped (0x100)
565; CHECK:     ]
566; CHECK:     FieldList: 0x0
567; CHECK:     SizeOf: 0
568; CHECK:     Name: U::ComplexUnion::NestedUnion
569; CHECK:     LinkageName: .?ATNestedUnion@ComplexUnion@?1??U@@YAXXZ@
570; CHECK:   }
571; CHECK:   Union (0x{{.*}}) {
572; CHECK:     TypeLeafKind: LF_UNION (0x1506)
573; CHECK:     MemberCount: 3
574; CHECK:     Properties [ (0x710)
575; CHECK:       ContainsNestedClass (0x10)
576; CHECK:       HasUniqueName (0x200)
577; CHECK:       Scoped (0x100)
578; CHECK:       Sealed (0x400)
579; CHECK:     ]
580; CHECK:     FieldList: <field list> (0x{{.*}})
581; CHECK:     SizeOf: 4
582; CHECK:     Name: U::ComplexUnion
583; CHECK:     LinkageName: .?ATComplexUnion@?1??U@@YAXXZ@
584; CHECK:   }
585; CHECK:   Union (0x{{.*}}) {
586; CHECK:     TypeLeafKind: LF_UNION (0x1506)
587; CHECK:     MemberCount: 1
588; CHECK:     Properties [ (0x708)
589; CHECK:       HasUniqueName (0x200)
590; CHECK:       Nested (0x8)
591; CHECK:       Scoped (0x100)
592; CHECK:       Sealed (0x400)
593; CHECK:     ]
594; CHECK:     FieldList: <field list> (0x{{.*}})
595; CHECK:     SizeOf: 4
596; CHECK:     Name: U::ComplexUnion::NestedUnion
597; CHECK:     LinkageName: .?ATNestedUnion@ComplexUnion@?1??U@@YAXXZ@
598; CHECK:   }
599
600
601; CHECK:   Struct (0x{{.*}}) {
602; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
603; CHECK:     MemberCount: 0
604; CHECK:     Properties [ (0x280)
605; CHECK:       ForwardReference (0x80)
606; CHECK:       HasUniqueName (0x200)
607; CHECK:     ]
608; CHECK:     FieldList: 0x0
609; CHECK:     DerivedFrom: 0x0
610; CHECK:     VShape: 0x0
611; CHECK:     SizeOf: 0
612; CHECK:     Name: Foo
613; CHECK:     LinkageName: .?AUFoo@@
614; CHECK:   }
615; CHECK:   Struct (0x{{.*}}) {
616; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
617; CHECK:     MemberCount: 3
618; CHECK:     Properties [ (0x200)
619; CHECK:       HasUniqueName (0x200)
620; CHECK:     ]
621; CHECK:     FieldList: <field list> (0x{{.*}})
622; CHECK:     DerivedFrom: 0x0
623; CHECK:     VShape: 0x0
624; CHECK:     SizeOf: 4
625; CHECK:     Name: Foo
626; CHECK:     LinkageName: .?AUFoo@@
627; CHECK:   }
628
629
630; CHECK:   Struct (0x{{.*}}) {
631; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
632; CHECK:     MemberCount: 0
633; CHECK:     Properties [ (0x280)
634; CHECK:       ForwardReference (0x80)
635; CHECK:       HasUniqueName (0x200)
636; CHECK:     ]
637; CHECK:     FieldList: 0x0
638; CHECK:     DerivedFrom: 0x0
639; CHECK:     VShape: 0x0
640; CHECK:     SizeOf: 0
641; CHECK:     Name: Bar
642; CHECK:     LinkageName: .?AUBar@@
643; CHECK:   }
644; CHECK:   Struct (0x{{.*}}) {
645; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
646; CHECK:     MemberCount: 1
647; CHECK:     Properties [ (0x202)
648; CHECK:       HasConstructorOrDestructor (0x2)
649; CHECK:       HasUniqueName (0x200)
650; CHECK:     ]
651; CHECK:     FieldList: <field list> (0x{{.*}})
652; CHECK:     DerivedFrom: 0x0
653; CHECK:     VShape: 0x0
654; CHECK:     SizeOf: 4
655; CHECK:     Name: Bar
656; CHECK:     LinkageName: .?AUBar@@
657; CHECK:   }
658; CHECK: ]
659
660; ASM-INLINE-COMMENTS: # MethodOverloadList (0x1088)
661; ASM-INLINE-COMMENTS: .short	0x12                    # Record length
662; ASM-INLINE-COMMENTS: .short	0x1206                  # Record kind: LF_METHODLIST
663; ASM-INLINE-COMMENTS: .short	0x3                     # Method
664; ASM-INLINE-COMMENTS:                                       # Attrs: Public
665; ASM-INLINE-COMMENTS: .short	0x0
666; ASM-INLINE-COMMENTS: .long	0x1083                  # Type: void Foo::()
667; ASM-INLINE-COMMENTS: .short	0x3                     # Attrs: Public
668; ASM-INLINE-COMMENTS: .short	0x0
669; ASM-INLINE-COMMENTS: .long	0x1087                  # Type: void Foo::(const Foo&)
670
671
672; ModuleID = 'class-options-common.cpp'
673source_filename = "class-options.cpp"
674target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
675target triple = "x86_64-pc-windows-msvc19.15.26729"
676
677%struct.Foo = type { i32 }
678%struct.Bar = type { i32 }
679%class.EmptyClass = type { i8 }
680%class.ExplicitCtorClass = type { i8 }
681%class.DefaultedCtorClass = type { i8 }
682%class.DefaultArgumentCtorClass = type { i8 }
683%class.UserDtorClass = type { i8 }
684%class.DefaultedDtorClass = type { i8 }
685%class.AClass = type { i8 }
686%class.BClass = type { i8 }
687%struct.AStruct = type { i8 }
688%struct.BStruct = type { i8 }
689%struct.ComplexStruct = type { %"struct.S()::ComplexStruct::S" }
690%"struct.S()::ComplexStruct::S" = type { i8 }
691%union.AUnion = type { i8 }
692%union.BUnion = type { i8 }
693%union.ComplexUnion = type { %"union.U()::ComplexUnion::NestedUnion" }
694%"union.U()::ComplexUnion::NestedUnion" = type { i32 }
695
696@"?f@@3UFoo@@A" = dso_local global %struct.Foo zeroinitializer, align 4, !dbg !0
697@"?b@@3UBar@@A" = dso_local global %struct.Bar zeroinitializer, align 4, !dbg !6
698
699; Function Attrs: noinline nounwind optnone uwtable
700define dso_local i8 @"?Func_EmptyClass@@YA?AVEmptyClass@@AEAV1@@Z"(ptr dereferenceable(1) %arg) #0 !dbg !30 {
701entry:
702  %retval = alloca %class.EmptyClass, align 1
703  %arg.addr = alloca ptr, align 8
704  store ptr %arg, ptr %arg.addr, align 8
705  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !35, metadata !DIExpression()), !dbg !36
706  %0 = load ptr, ptr %arg.addr, align 8, !dbg !36
707  %1 = load i8, ptr %retval, align 1, !dbg !36
708  ret i8 %1, !dbg !36
709}
710
711; Function Attrs: nounwind readnone speculatable
712declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
713
714; Function Attrs: noinline nounwind optnone uwtable
715define dso_local void @"?Func_ExplicitCtorClass@@YA?AVExplicitCtorClass@@AEAV1@@Z"(ptr noalias sret(%class.ExplicitCtorClass) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !37 {
716entry:
717  %arg.addr = alloca ptr, align 8
718  store ptr %arg, ptr %arg.addr, align 8
719  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !47, metadata !DIExpression()), !dbg !48
720  %0 = load ptr, ptr %arg.addr, align 8, !dbg !48
721  ret void, !dbg !48
722}
723
724; Function Attrs: noinline nounwind optnone uwtable
725define dso_local void @"?Func_DefaultedCtorClass@@YA?AVDefaultedCtorClass@@AEAV1@@Z"(ptr noalias sret(%class.DefaultedCtorClass) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !49 {
726entry:
727  %arg.addr = alloca ptr, align 8
728  store ptr %arg, ptr %arg.addr, align 8
729  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !59, metadata !DIExpression()), !dbg !60
730  %0 = load ptr, ptr %arg.addr, align 8, !dbg !60
731  ret void, !dbg !60
732}
733
734; Function Attrs: noinline nounwind optnone uwtable
735define dso_local void @"?Func_DefaultArgumentCtorClass@@YA?AVDefaultArgumentCtorClass@@AEAV1@@Z"(ptr noalias sret(%class.DefaultArgumentCtorClass) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !61 {
736entry:
737  %arg.addr = alloca ptr, align 8
738  store ptr %arg, ptr %arg.addr, align 8
739  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !71, metadata !DIExpression()), !dbg !72
740  %0 = load ptr, ptr %arg.addr, align 8, !dbg !72
741  ret void, !dbg !72
742}
743
744; Function Attrs: noinline nounwind optnone uwtable
745define dso_local void @"?Func_UserDtorClass@@YA?AVUserDtorClass@@AEAV1@@Z"(ptr noalias sret(%class.UserDtorClass) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !73 {
746entry:
747  %arg.addr = alloca ptr, align 8
748  store ptr %arg, ptr %arg.addr, align 8
749  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !83, metadata !DIExpression()), !dbg !84
750  %0 = load ptr, ptr %arg.addr, align 8, !dbg !84
751  ret void, !dbg !84
752}
753
754; Function Attrs: noinline nounwind optnone uwtable
755define dso_local void @"?Func_DefaultedDtorClass@@YA?AVDefaultedDtorClass@@AEAV1@@Z"(ptr noalias sret(%class.DefaultedDtorClass) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !85 {
756entry:
757  %arg.addr = alloca ptr, align 8
758  store ptr %arg, ptr %arg.addr, align 8
759  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !95, metadata !DIExpression()), !dbg !96
760  %0 = load ptr, ptr %arg.addr, align 8, !dbg !96
761  ret void, !dbg !96
762}
763
764; Function Attrs: noinline nounwind optnone uwtable
765define dso_local void @"?Func_AClass@@YA?AVAClass@@AEAV1@@Z"(ptr noalias sret(%class.AClass) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !97 {
766entry:
767  %arg.addr = alloca ptr, align 8
768  store ptr %arg, ptr %arg.addr, align 8
769  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !104, metadata !DIExpression()), !dbg !105
770  %0 = load ptr, ptr %arg.addr, align 8, !dbg !105
771  ret void, !dbg !105
772}
773
774; Function Attrs: noinline nounwind optnone uwtable
775define dso_local i8 @"?Func_BClass@@YA?AVBClass@@AEAV1@@Z"(ptr dereferenceable(1) %arg) #0 !dbg !106 {
776entry:
777  %retval = alloca %class.BClass, align 1
778  %arg.addr = alloca ptr, align 8
779  store ptr %arg, ptr %arg.addr, align 8
780  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !113, metadata !DIExpression()), !dbg !114
781  %0 = load ptr, ptr %arg.addr, align 8, !dbg !114
782  %1 = load i8, ptr %retval, align 1, !dbg !114
783  ret i8 %1, !dbg !114
784}
785
786; Function Attrs: noinline nounwind optnone uwtable
787define dso_local i8 @"?Func_AStruct@@YA?AUAStruct@@AEAU1@@Z"(ptr dereferenceable(1) %arg) #0 !dbg !115 {
788entry:
789  %retval = alloca %struct.AStruct, align 1
790  %arg.addr = alloca ptr, align 8
791  store ptr %arg, ptr %arg.addr, align 8
792  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !120, metadata !DIExpression()), !dbg !121
793  %0 = load ptr, ptr %arg.addr, align 8, !dbg !121
794  %1 = load i8, ptr %retval, align 1, !dbg !121
795  ret i8 %1, !dbg !121
796}
797
798; Function Attrs: noinline nounwind optnone uwtable
799define dso_local void @"?Func_BStruct@@YA?AUBStruct@@AEAU1@@Z"(ptr noalias sret(%struct.BStruct) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !122 {
800entry:
801  %arg.addr = alloca ptr, align 8
802  store ptr %arg, ptr %arg.addr, align 8
803  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !132, metadata !DIExpression()), !dbg !133
804  %0 = load ptr, ptr %arg.addr, align 8, !dbg !133
805  ret void, !dbg !133
806}
807
808; Function Attrs: noinline nounwind optnone uwtable
809define dso_local void @"?S@@YAXXZ"() #0 !dbg !134 {
810entry:
811  %s = alloca %struct.ComplexStruct, align 1
812  call void @llvm.dbg.declare(metadata ptr %s, metadata !137, metadata !DIExpression()), !dbg !142
813  ret void, !dbg !143
814}
815
816; Function Attrs: noinline nounwind optnone uwtable
817define dso_local i8 @"?Func_AUnion@@YA?ATAUnion@@AEAT1@@Z"(ptr dereferenceable(1) %arg) #0 !dbg !144 {
818entry:
819  %retval = alloca %union.AUnion, align 1
820  %arg.addr = alloca ptr, align 8
821  store ptr %arg, ptr %arg.addr, align 8
822  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !149, metadata !DIExpression()), !dbg !150
823  %0 = load ptr, ptr %arg.addr, align 8, !dbg !150
824  %1 = load i8, ptr %retval, align 1, !dbg !150
825  ret i8 %1, !dbg !150
826}
827
828; Function Attrs: noinline nounwind optnone uwtable
829define dso_local void @"?Func_BUnion@@YA?ATBUnion@@AEAT1@@Z"(ptr noalias sret(%union.BUnion) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !151 {
830entry:
831  %arg.addr = alloca ptr, align 8
832  store ptr %arg, ptr %arg.addr, align 8
833  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !161, metadata !DIExpression()), !dbg !162
834  %0 = load ptr, ptr %arg.addr, align 8, !dbg !162
835  ret void, !dbg !162
836}
837
838; Function Attrs: noinline nounwind optnone uwtable
839define dso_local void @"?U@@YAXXZ"() #0 !dbg !163 {
840entry:
841  %c = alloca %union.ComplexUnion, align 4
842  call void @llvm.dbg.declare(metadata ptr %c, metadata !164, metadata !DIExpression()), !dbg !172
843  ret void, !dbg !173
844}
845
846attributes #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" "frame-pointer"="none" "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" }
847attributes #1 = { nounwind readnone speculatable }
848
849!llvm.dbg.cu = !{!2}
850!llvm.module.flags = !{!25, !26, !27, !28}
851!llvm.ident = !{!29}
852
853!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
854!1 = distinct !DIGlobalVariable(name: "f", linkageName: "?f@@3UFoo@@A", scope: !2, file: !8, line: 60, type: !13, isLocal: false, isDefinition: true)
855!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)
856!3 = !DIFile(filename: "class-options-common.cpp", directory: "D:\5Cupstream\5Cllvm\5Ctest\5CDebugInfo\5CCOFF", checksumkind: CSK_MD5, checksum: "73d5c55a09899333f27526ae5ea8c878")
857!4 = !{}
858!5 = !{!0, !6}
859!6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression())
860!7 = distinct !DIGlobalVariable(name: "b", linkageName: "?b@@3UBar@@A", scope: !2, file: !8, line: 65, type: !9, isLocal: false, isDefinition: true)
861!8 = !DIFile(filename: "class-options.cpp", directory: "D:\5Cupstream\5Cllvm\5Ctest\5CDebugInfo\5CCOFF")
862!9 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Bar", file: !8, line: 62, size: 32, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !10, identifier: ".?AUBar@@")
863!10 = !{!11}
864!11 = !DIDerivedType(tag: DW_TAG_member, name: "m", scope: !9, file: !8, line: 64, baseType: !12, size: 32)
865!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
866!13 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", file: !8, line: 55, size: 32, flags: DIFlagTypePassByValue, elements: !14, identifier: ".?AUFoo@@")
867!14 = !{!15, !16, !20}
868!15 = !DIDerivedType(tag: DW_TAG_member, name: "m", scope: !13, file: !8, line: 59, baseType: !12, size: 32)
869!16 = !DISubprogram(name: "Foo", scope: !13, file: !8, line: 57, type: !17, isLocal: false, isDefinition: false, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false)
870!17 = !DISubroutineType(types: !18)
871!18 = !{null, !19}
872!19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
873!20 = !DISubprogram(name: "Foo", scope: !13, file: !8, line: 58, type: !21, isLocal: false, isDefinition: false, scopeLine: 58, flags: DIFlagPrototyped, isOptimized: false)
874!21 = !DISubroutineType(types: !22)
875!22 = !{null, !19, !23}
876!23 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !24, size: 64)
877!24 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !13)
878!25 = !{i32 2, !"CodeView", i32 1}
879!26 = !{i32 2, !"Debug Info Version", i32 3}
880!27 = !{i32 1, !"wchar_size", i32 2}
881!28 = !{i32 7, !"PIC Level", i32 2}
882!29 = !{!"clang version 8.0.0 "}
883!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)
884!31 = !DISubroutineType(types: !32)
885!32 = !{!33, !34}
886!33 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "EmptyClass", file: !8, line: 7, size: 8, flags: DIFlagTypePassByValue, elements: !4, identifier: ".?AVEmptyClass@@")
887!34 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !33, size: 64)
888!35 = !DILocalVariable(name: "arg", arg: 1, scope: !30, file: !8, line: 9, type: !34)
889!36 = !DILocation(line: 9, scope: !30)
890!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)
891!38 = !DISubroutineType(types: !39)
892!39 = !{!40, !46}
893!40 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "ExplicitCtorClass", file: !8, line: 11, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !41, identifier: ".?AVExplicitCtorClass@@")
894!41 = !{!42}
895!42 = !DISubprogram(name: "ExplicitCtorClass", scope: !40, file: !8, line: 14, type: !43, isLocal: false, isDefinition: false, scopeLine: 14, flags: DIFlagPublic | DIFlagExplicit | DIFlagPrototyped, isOptimized: false)
896!43 = !DISubroutineType(types: !44)
897!44 = !{null, !45}
898!45 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !40, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
899!46 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !40, size: 64)
900!47 = !DILocalVariable(name: "arg", arg: 1, scope: !37, file: !8, line: 16, type: !46)
901!48 = !DILocation(line: 16, scope: !37)
902!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)
903!50 = !DISubroutineType(types: !51)
904!51 = !{!52, !58}
905!52 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "DefaultedCtorClass", file: !8, line: 18, size: 8, flags: DIFlagTypePassByValue, elements: !53, identifier: ".?AVDefaultedCtorClass@@")
906!53 = !{!54}
907!54 = !DISubprogram(name: "DefaultedCtorClass", scope: !52, file: !8, line: 21, type: !55, isLocal: false, isDefinition: false, scopeLine: 21, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: false)
908!55 = !DISubroutineType(types: !56)
909!56 = !{null, !57}
910!57 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !52, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
911!58 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !52, size: 64)
912!59 = !DILocalVariable(name: "arg", arg: 1, scope: !49, file: !8, line: 23, type: !58)
913!60 = !DILocation(line: 23, scope: !49)
914!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)
915!62 = !DISubroutineType(types: !63)
916!63 = !{!64, !70}
917!64 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "DefaultArgumentCtorClass", file: !8, line: 25, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !65, identifier: ".?AVDefaultArgumentCtorClass@@")
918!65 = !{!66}
919!66 = !DISubprogram(name: "DefaultArgumentCtorClass", scope: !64, file: !8, line: 28, type: !67, isLocal: false, isDefinition: false, scopeLine: 28, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: false)
920!67 = !DISubroutineType(types: !68)
921!68 = !{null, !69, !12}
922!69 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !64, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
923!70 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !64, size: 64)
924!71 = !DILocalVariable(name: "arg", arg: 1, scope: !61, file: !8, line: 30, type: !70)
925!72 = !DILocation(line: 30, scope: !61)
926!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)
927!74 = !DISubroutineType(types: !75)
928!75 = !{!76, !82}
929!76 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "UserDtorClass", file: !8, line: 32, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !77, identifier: ".?AVUserDtorClass@@")
930!77 = !{!78}
931!78 = !DISubprogram(name: "~UserDtorClass", scope: !76, file: !8, line: 35, type: !79, isLocal: false, isDefinition: false, scopeLine: 35, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: false)
932!79 = !DISubroutineType(types: !80)
933!80 = !{null, !81}
934!81 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !76, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
935!82 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !76, size: 64)
936!83 = !DILocalVariable(name: "arg", arg: 1, scope: !73, file: !8, line: 37, type: !82)
937!84 = !DILocation(line: 37, scope: !73)
938!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)
939!86 = !DISubroutineType(types: !87)
940!87 = !{!88, !94}
941!88 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "DefaultedDtorClass", file: !8, line: 39, size: 8, flags: DIFlagTypePassByValue, elements: !89, identifier: ".?AVDefaultedDtorClass@@")
942!89 = !{!90}
943!90 = !DISubprogram(name: "~DefaultedDtorClass", scope: !88, file: !8, line: 42, type: !91, isLocal: false, isDefinition: false, scopeLine: 42, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: false)
944!91 = !DISubroutineType(types: !92)
945!92 = !{null, !93}
946!93 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !88, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
947!94 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !88, size: 64)
948!95 = !DILocalVariable(name: "arg", arg: 1, scope: !85, file: !8, line: 44, type: !94)
949!96 = !DILocation(line: 44, scope: !85)
950!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)
951!98 = !DISubroutineType(types: !99)
952!99 = !{!100, !103}
953!100 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "AClass", file: !8, line: 46, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !101, identifier: ".?AVAClass@@")
954!101 = !{!102}
955!102 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !100, baseType: !40, flags: DIFlagPublic, extraData: i32 0)
956!103 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !100, size: 64)
957!104 = !DILocalVariable(name: "arg", arg: 1, scope: !97, file: !8, line: 49, type: !103)
958!105 = !DILocation(line: 49, scope: !97)
959!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)
960!107 = !DISubroutineType(types: !108)
961!108 = !{!109, !112}
962!109 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "BClass", file: !8, line: 51, size: 8, flags: DIFlagTypePassByValue, elements: !110, identifier: ".?AVBClass@@")
963!110 = !{!111}
964!111 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !109, file: !8, line: 51, baseType: !12, flags: DIFlagStaticMember)
965!112 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !109, size: 64)
966!113 = !DILocalVariable(name: "arg", arg: 1, scope: !106, file: !8, line: 53, type: !112)
967!114 = !DILocation(line: 53, scope: !106)
968!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)
969!116 = !DISubroutineType(types: !117)
970!117 = !{!118, !119}
971!118 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "AStruct", file: !8, line: 67, size: 8, flags: DIFlagTypePassByValue, elements: !4, identifier: ".?AUAStruct@@")
972!119 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !118, size: 64)
973!120 = !DILocalVariable(name: "arg", arg: 1, scope: !115, file: !8, line: 69, type: !119)
974!121 = !DILocation(line: 69, scope: !115)
975!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)
976!123 = !DISubroutineType(types: !124)
977!124 = !{!125, !131}
978!125 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "BStruct", file: !8, line: 71, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !126, identifier: ".?AUBStruct@@")
979!126 = !{!127}
980!127 = !DISubprogram(name: "BStruct", scope: !125, file: !8, line: 71, type: !128, isLocal: false, isDefinition: false, scopeLine: 71, flags: DIFlagPrototyped, isOptimized: false)
981!128 = !DISubroutineType(types: !129)
982!129 = !{null, !130}
983!130 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !125, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
984!131 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !125, size: 64)
985!132 = !DILocalVariable(name: "arg", arg: 1, scope: !122, file: !8, line: 73, type: !131)
986!133 = !DILocation(line: 73, scope: !122)
987!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)
988!135 = !DISubroutineType(types: !136)
989!136 = !{null}
990!137 = !DILocalVariable(name: "s", scope: !134, file: !8, line: 85, type: !138)
991!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!139 = !{!140, !141}
993!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@")
994!141 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !138, file: !8, line: 83, baseType: !140, size: 8)
995!142 = !DILocation(line: 85, scope: !134)
996!143 = !DILocation(line: 86, scope: !134)
997!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)
998!145 = !DISubroutineType(types: !146)
999!146 = !{!147, !148}
1000!147 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "AUnion", file: !8, line: 88, size: 8, flags: DIFlagTypePassByValue, elements: !4, identifier: ".?ATAUnion@@")
1001!148 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !147, size: 64)
1002!149 = !DILocalVariable(name: "arg", arg: 1, scope: !144, file: !8, line: 90, type: !148)
1003!150 = !DILocation(line: 90, scope: !144)
1004!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)
1005!152 = !DISubroutineType(types: !153)
1006!153 = !{!154, !160}
1007!154 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "BUnion", file: !8, line: 92, size: 8, flags: DIFlagTypePassByValue, elements: !155, identifier: ".?ATBUnion@@")
1008!155 = !{!156}
1009!156 = !DISubprogram(name: "BUnion", scope: !154, file: !8, line: 92, type: !157, isLocal: false, isDefinition: false, scopeLine: 92, flags: DIFlagPrototyped, isOptimized: false)
1010!157 = !DISubroutineType(types: !158)
1011!158 = !{null, !159}
1012!159 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !154, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
1013!160 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !154, size: 64)
1014!161 = !DILocalVariable(name: "arg", arg: 1, scope: !151, file: !8, line: 94, type: !160)
1015!162 = !DILocation(line: 94, scope: !151)
1016!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)
1017!164 = !DILocalVariable(name: "c", scope: !163, file: !8, line: 105, type: !165)
1018!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@")
1019!166 = !{!167, !170, !171}
1020!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!168 = !{!169}
1022!169 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !167, file: !8, line: 100, baseType: !12, size: 32)
1023!170 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !165, file: !8, line: 102, baseType: !167, size: 32)
1024!171 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !165, file: !8, line: 103, baseType: !12, size: 32)
1025!172 = !DILocation(line: 105, scope: !163)
1026!173 = !DILocation(line: 106, scope: !163)
1027