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; Command to generate function-options.ll
6; $ clang++ class-options-common.cpp -S -emit-llvm -g -gcodeview -o class-options-common.ll
7
8
9
10; // Basically, there are two Property (class-options) expectations on each type:
11; // One for class forwarding reference, the other for class definition.
12;
13; #define DEFINE_FUNCTION(T) \
14;   T Func_##T(T &arg) { return arg; };
15;
16; class EmptyClass {}; // Expect: CO = ForwardReference | HasUniqueName
17;                      // Expect: CO = HasUniqueName
18; DEFINE_FUNCTION(EmptyClass);
19;
20; class ExplicitCtorClass { // Expect CO = ForwardReference | HasUniqueName
21;                           // Expect CO = HasConstructorOrDestructor | HasUniqueName
22; public:
23;   explicit ExplicitCtorClass();
24; };
25; DEFINE_FUNCTION(ExplicitCtorClass);
26;
27; class DefaultedCtorClass { // Expect: CO = ForwardReference | HasUniqueName
28;                            // Expect: CO = HasUniqueName
29; public:
30;   DefaultedCtorClass() = default;
31; };
32; DEFINE_FUNCTION(DefaultedCtorClass);
33;
34; class DefaultArgumentCtorClass { // Expect: CO = ForwardReference | HasUniqueName
35;                                  // Expect: CO = HasConstructorOrDestructor | HasUniqueName
36; public:
37;   DefaultArgumentCtorClass(int x = 0);
38; };
39; DEFINE_FUNCTION(DefaultArgumentCtorClass);
40;
41; class UserDtorClass { // Expect: CO = ForwardReference | HasUniqueName
42;                       // Expect: CO = HasConstructorOrDestructor| HasUniqueName
43; public:
44;   ~UserDtorClass() {}
45; };
46; DEFINE_FUNCTION(UserDtorClass);
47;
48; class DefaultedDtorClass { // Expect: CO = ForwardReference | HasUniqueName
49;                            // Expect: CO = HasUniqueName
50; public:
51;   ~DefaultedDtorClass() = default;
52; };
53; DEFINE_FUNCTION(DefaultedDtorClass);
54;
55; class AClass : public ExplicitCtorClass { // Expect: CO = ForwardReference | HasUniqueName
56;                                           // Expect: CO = HasConstructorOrDestructor | HasUniqueName
57; };
58; DEFINE_FUNCTION(AClass);
59;
60; class BClass { static int x; }; // Expect: CO = ForwardReference | HasUniqueName
61;                                 // Expect: CO = HasUniqueName
62; DEFINE_FUNCTION(BClass);
63;
64; struct Foo { // Expect: CO = ForwardReference | HasUniqueName
65;              // Expect: CO = HasUniqueName
66;   Foo() = default;
67;   Foo(const Foo &o) = default;
68;   int m;
69; } f;
70;
71; struct Bar { // Expect: CO = ForwardReference | HasUniqueName
72;              // Expect: CO = HasConstructorOrDestructor | HasUniqueName
73;   int m = 0;
74; } b;
75;
76; struct AStruct {}; // Expect: CO = ForwardReference | HasUniqueName
77;                    // Expect: CO = HasUniqueName
78; DEFINE_FUNCTION(AStruct);
79;
80; struct BStruct { BStruct(); }; // Expect: CO = ForwardReference | HasUniqueName
81;                                // Expect: CO = HasConstructorOrDestructor | HasUniqueName
82; DEFINE_FUNCTION(BStruct);
83;
84; void S() {
85;   struct ComplexStruct { // Expect: CO = ForwardReference | HasUniqueName | Scoped
86;                          // Expect: CO = ContainsNestedClass | HasConstructorOrDestructor | HasUniqueName | Scoped
87;
88;
89;     struct S {}; // Expect: CO = ForwardReference | HasUniqueName | Nested | Scoped
90;                  // Expect: CO = HasUniqueName | Nested | Scoped
91;
92;     S s;
93;   };
94;   ComplexStruct s;
95; }
96;
97; union AUnion {}; // Expect: CO = ForwardReference | HasUniqueName
98;                  // Expect: CO = HasUniqueName | Sealed
99; DEFINE_FUNCTION(AUnion);
100;
101; union BUnion { BUnion() = default; }; // Expect: CO = ForwardReference | HasUniqueName
102;                                       // Expect: CO = HasUniqueName | Sealed
103; DEFINE_FUNCTION(BUnion);
104;
105; void U() {
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
109;
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
113;     NestedUnion a;
114;     int b;
115;   };
116;   ComplexUnion c;
117; }
118
119
120
121; CHECK: Format: COFF-x86-64
122; CHECK: Arch: x86_64
123; CHECK: AddressSize: 64bit
124; CHECK: CodeViewTypes [
125; CHECK:   Section: .debug$T ({{.*}})
126; CHECK:   Magic: 0x4
127
128
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)
135; CHECK:     ]
136; CHECK:     FieldList: 0x0
137; CHECK:     DerivedFrom: 0x0
138; CHECK:     VShape: 0x0
139; CHECK:     SizeOf: 0
140; CHECK:     Name: EmptyClass
141; CHECK:     LinkageName: .?AVEmptyClass@@
142; CHECK:   }
143; CHECK:   Class (0x{{.*}}) {
144; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
145; CHECK:     MemberCount: 0
146; CHECK:     Properties [ (0x200)
147; CHECK:       HasUniqueName (0x200)
148; CHECK:     ]
149; CHECK:     FieldList: <field list> (0x{{.*}})
150; CHECK:     DerivedFrom: 0x0
151; CHECK:     VShape: 0x0
152; CHECK:     SizeOf: 1
153; CHECK:     Name: EmptyClass
154; CHECK:     LinkageName: .?AVEmptyClass@@
155; CHECK:   }
156
157
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)
164; CHECK:     ]
165; CHECK:     FieldList: 0x0
166; CHECK:     DerivedFrom: 0x0
167; CHECK:     VShape: 0x0
168; CHECK:     SizeOf: 0
169; CHECK:     Name: ExplicitCtorClass
170; CHECK:     LinkageName: .?AVExplicitCtorClass@@
171; CHECK:   }
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)
178; CHECK:     ]
179; CHECK:     FieldList: <field list> (0x{{.*}})
180; CHECK:     DerivedFrom: 0x0
181; CHECK:     VShape: 0x0
182; CHECK:     SizeOf: 1
183; CHECK:     Name: ExplicitCtorClass
184; CHECK:     LinkageName: .?AVExplicitCtorClass@@
185; CHECK:   }
186
187
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)
194; CHECK:     ]
195; CHECK:     FieldList: 0x0
196; CHECK:     DerivedFrom: 0x0
197; CHECK:     VShape: 0x0
198; CHECK:     SizeOf: 0
199; CHECK:     Name: DefaultedCtorClass
200; CHECK:     LinkageName: .?AVDefaultedCtorClass@@
201; CHECK:   }
202; CHECK:   Class (0x{{.*}}) {
203; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
204; CHECK:     MemberCount: 1
205; CHECK:     Properties [ (0x200)
206; CHECK:       HasUniqueName (0x200)
207; CHECK:     ]
208; CHECK:     FieldList: <field list> (0x{{.*}})
209; CHECK:     DerivedFrom: 0x0
210; CHECK:     VShape: 0x0
211; CHECK:     SizeOf: 1
212; CHECK:     Name: DefaultedCtorClass
213; CHECK:     LinkageName: .?AVDefaultedCtorClass@@
214; CHECK:   }
215
216
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)
223; CHECK:     ]
224; CHECK:     FieldList: 0x0
225; CHECK:     DerivedFrom: 0x0
226; CHECK:     VShape: 0x0
227; CHECK:     SizeOf: 0
228; CHECK:     Name: DefaultArgumentCtorClass
229; CHECK:     LinkageName: .?AVDefaultArgumentCtorClass@@
230; CHECK:   }
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)
237; CHECK:     ]
238; CHECK:     FieldList: <field list> (0x{{.*}})
239; CHECK:     DerivedFrom: 0x0
240; CHECK:     VShape: 0x0
241; CHECK:     SizeOf: 1
242; CHECK:     Name: DefaultArgumentCtorClass
243; CHECK:     LinkageName: .?AVDefaultArgumentCtorClass@@
244; CHECK:   }
245
246
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)
253; CHECK:     ]
254; CHECK:     FieldList: 0x0
255; CHECK:     DerivedFrom: 0x0
256; CHECK:     VShape: 0x0
257; CHECK:     SizeOf: 0
258; CHECK:     Name: UserDtorClass
259; CHECK:     LinkageName: .?AVUserDtorClass@@
260; CHECK:   }
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)
267; CHECK:     ]
268; CHECK:     FieldList: <field list> (0x{{.*}})
269; CHECK:     DerivedFrom: 0x0
270; CHECK:     VShape: 0x0
271; CHECK:     SizeOf: 1
272; CHECK:     Name: UserDtorClass
273; CHECK:     LinkageName: .?AVUserDtorClass@@
274; CHECK:   }
275
276
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)
283; CHECK:     ]
284; CHECK:     FieldList: 0x0
285; CHECK:     DerivedFrom: 0x0
286; CHECK:     VShape: 0x0
287; CHECK:     SizeOf: 0
288; CHECK:     Name: DefaultedDtorClass
289; CHECK:     LinkageName: .?AVDefaultedDtorClass@@
290; CHECK:   }
291; CHECK:   Class (0x{{.*}}) {
292; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
293; CHECK:     MemberCount: 1
294; CHECK:     Properties [ (0x200)
295; CHECK:       HasUniqueName (0x200)
296; CHECK:     ]
297; CHECK:     FieldList: <field list> (0x{{.*}})
298; CHECK:     DerivedFrom: 0x0
299; CHECK:     VShape: 0x0
300; CHECK:     SizeOf: 1
301; CHECK:     Name: DefaultedDtorClass
302; CHECK:     LinkageName: .?AVDefaultedDtorClass@@
303; CHECK:   }
304
305
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)
312; CHECK:     ]
313; CHECK:     FieldList: 0x0
314; CHECK:     DerivedFrom: 0x0
315; CHECK:     VShape: 0x0
316; CHECK:     SizeOf: 0
317; CHECK:     Name: AClass
318; CHECK:     LinkageName: .?AVAClass@@
319; CHECK:   }
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)
326; CHECK:     ]
327; CHECK:     FieldList: <field list> (0x{{.*}})
328; CHECK:     DerivedFrom: 0x0
329; CHECK:     VShape: 0x0
330; CHECK:     SizeOf: 1
331; CHECK:     Name: AClass
332; CHECK:     LinkageName: .?AVAClass@@
333; CHECK:   }
334
335
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)
342; CHECK:     ]
343; CHECK:     FieldList: 0x0
344; CHECK:     DerivedFrom: 0x0
345; CHECK:     VShape: 0x0
346; CHECK:     SizeOf: 0
347; CHECK:     Name: BClass
348; CHECK:     LinkageName: .?AVBClass@@
349; CHECK:   }
350; CHECK:   Class (0x{{.*}}) {
351; CHECK:     TypeLeafKind: LF_CLASS (0x1504)
352; CHECK:     MemberCount: 1
353; CHECK:     Properties [ (0x200)
354; CHECK:       HasUniqueName (0x200)
355; CHECK:     ]
356; CHECK:     FieldList: <field list> (0x{{.*}})
357; CHECK:     DerivedFrom: 0x0
358; CHECK:     VShape: 0x0
359; CHECK:     SizeOf: 1
360; CHECK:     Name: BClass
361; CHECK:     LinkageName: .?AVBClass@@
362; CHECK:   }
363
364
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)
371; CHECK:     ]
372; CHECK:     FieldList: 0x0
373; CHECK:     DerivedFrom: 0x0
374; CHECK:     VShape: 0x0
375; CHECK:     SizeOf: 0
376; CHECK:     Name: AStruct
377; CHECK:     LinkageName: .?AUAStruct@@
378; CHECK:   }
379; CHECK:   Struct (0x{{.*}}) {
380; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
381; CHECK:     MemberCount: 0
382; CHECK:     Properties [ (0x200)
383; CHECK:       HasUniqueName (0x200)
384; CHECK:     ]
385; CHECK:     FieldList: <field list> (0x{{.*}})
386; CHECK:     DerivedFrom: 0x0
387; CHECK:     VShape: 0x0
388; CHECK:     SizeOf: 1
389; CHECK:     Name: AStruct
390; CHECK:     LinkageName: .?AUAStruct@@
391; CHECK:   }
392
393
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)
400; CHECK:     ]
401; CHECK:     FieldList: 0x0
402; CHECK:     DerivedFrom: 0x0
403; CHECK:     VShape: 0x0
404; CHECK:     SizeOf: 0
405; CHECK:     Name: BStruct
406; CHECK:     LinkageName: .?AUBStruct@@
407; CHECK:   }
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)
414; CHECK:     ]
415; CHECK:     FieldList: <field list> (0x{{.*}})
416; CHECK:     DerivedFrom: 0x0
417; CHECK:     VShape: 0x0
418; CHECK:     SizeOf: 1
419; CHECK:     Name: BStruct
420; CHECK:     LinkageName: .?AUBStruct@@
421; CHECK:   }
422
423
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)
431; CHECK:     ]
432; CHECK:     FieldList: 0x0
433; CHECK:     DerivedFrom: 0x0
434; CHECK:     VShape: 0x0
435; CHECK:     SizeOf: 0
436; CHECK:     Name: S::ComplexStruct
437; CHECK:     LinkageName: .?AUComplexStruct@?1??S@@YAXXZ@
438; CHECK:   }
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)
447; CHECK:     ]
448; CHECK:     FieldList: 0x0
449; CHECK:     DerivedFrom: 0x0
450; CHECK:     VShape: 0x0
451; CHECK:     SizeOf: 0
452; CHECK:     Name: S::ComplexStruct::S
453; CHECK:     LinkageName: .?AUS@ComplexStruct@?1??0@YAXXZ@
454; CHECK:   }
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)
462; CHECK:     ]
463; CHECK:     FieldList: <field list> (0x{{.*}})
464; CHECK:     DerivedFrom: 0x0
465; CHECK:     VShape: 0x0
466; CHECK:     SizeOf: 1
467; CHECK:     Name: S::ComplexStruct
468; CHECK:     LinkageName: .?AUComplexStruct@?1??S@@YAXXZ@
469; CHECK:   }
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)
477; CHECK:     ]
478; CHECK:     FieldList: <field list> (0x{{.*}})
479; CHECK:     DerivedFrom: 0x0
480; CHECK:     VShape: 0x0
481; CHECK:     SizeOf: 1
482; CHECK:     Name: S::ComplexStruct::S
483; CHECK:     LinkageName: .?AUS@ComplexStruct@?1??0@YAXXZ@
484; CHECK:   }
485
486
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)
493; CHECK:     ]
494; CHECK:     FieldList: 0x0
495; CHECK:     SizeOf: 0
496; CHECK:     Name: AUnion
497; CHECK:     LinkageName: .?ATAUnion@@
498; CHECK:   }
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)
505; CHECK:     ]
506; CHECK:     FieldList: <field list> (0x{{.*}})
507; CHECK:     SizeOf: 1
508; CHECK:     Name: AUnion
509; CHECK:     LinkageName: .?ATAUnion@@
510; CHECK:   }
511
512
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)
519; CHECK:     ]
520; CHECK:     FieldList: 0x0
521; CHECK:     SizeOf: 0
522; CHECK:     Name: BUnion
523; CHECK:     LinkageName: .?ATBUnion@@
524; CHECK:   }
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)
531; CHECK:     ]
532; CHECK:     FieldList: <field list> (0x{{.*}})
533; CHECK:     SizeOf: 1
534; CHECK:     Name: BUnion
535; CHECK:     LinkageName: .?ATBUnion@@
536; CHECK:   }
537
538
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)
546; CHECK:     ]
547; CHECK:     FieldList: 0x0
548; CHECK:     SizeOf: 0
549; CHECK:     Name: U::ComplexUnion
550; CHECK:     LinkageName: .?ATComplexUnion@?1??U@@YAXXZ@
551; CHECK:   }
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)
560; CHECK:     ]
561; CHECK:     FieldList: 0x0
562; CHECK:     SizeOf: 0
563; CHECK:     Name: U::ComplexUnion::NestedUnion
564; CHECK:     LinkageName: .?ATNestedUnion@ComplexUnion@?1??U@@YAXXZ@
565; CHECK:   }
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)
574; CHECK:     ]
575; CHECK:     FieldList: <field list> (0x{{.*}})
576; CHECK:     SizeOf: 4
577; CHECK:     Name: U::ComplexUnion
578; CHECK:     LinkageName: .?ATComplexUnion@?1??U@@YAXXZ@
579; CHECK:   }
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)
588; CHECK:     ]
589; CHECK:     FieldList: <field list> (0x{{.*}})
590; CHECK:     SizeOf: 4
591; CHECK:     Name: U::ComplexUnion::NestedUnion
592; CHECK:     LinkageName: .?ATNestedUnion@ComplexUnion@?1??U@@YAXXZ@
593; CHECK:   }
594
595
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)
602; CHECK:     ]
603; CHECK:     FieldList: 0x0
604; CHECK:     DerivedFrom: 0x0
605; CHECK:     VShape: 0x0
606; CHECK:     SizeOf: 0
607; CHECK:     Name: Foo
608; CHECK:     LinkageName: .?AUFoo@@
609; CHECK:   }
610; CHECK:   Struct (0x{{.*}}) {
611; CHECK:     TypeLeafKind: LF_STRUCTURE (0x1505)
612; CHECK:     MemberCount: 3
613; CHECK:     Properties [ (0x200)
614; CHECK:       HasUniqueName (0x200)
615; CHECK:     ]
616; CHECK:     FieldList: <field list> (0x{{.*}})
617; CHECK:     DerivedFrom: 0x0
618; CHECK:     VShape: 0x0
619; CHECK:     SizeOf: 4
620; CHECK:     Name: Foo
621; CHECK:     LinkageName: .?AUFoo@@
622; CHECK:   }
623
624
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)
631; CHECK:     ]
632; CHECK:     FieldList: 0x0
633; CHECK:     DerivedFrom: 0x0
634; CHECK:     VShape: 0x0
635; CHECK:     SizeOf: 0
636; CHECK:     Name: Bar
637; CHECK:     LinkageName: .?AUBar@@
638; CHECK:   }
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)
645; CHECK:     ]
646; CHECK:     FieldList: <field list> (0x{{.*}})
647; CHECK:     DerivedFrom: 0x0
648; CHECK:     VShape: 0x0
649; CHECK:     SizeOf: 4
650; CHECK:     Name: Bar
651; CHECK:     LinkageName: .?AUBar@@
652; CHECK:   }
653; CHECK: ]
654
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&)
665
666
667; ModuleID = 'class-options-common.cpp'
668source_filename = "class-options.cpp"
669target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
670target triple = "x86_64-pc-windows-msvc19.15.26729"
671
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 }
690
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
693
694; Function Attrs: noinline nounwind optnone uwtable
695define dso_local i8 @"?Func_EmptyClass@@YA?AVEmptyClass@@AEAV1@@Z"(%class.EmptyClass* dereferenceable(1) %arg) #0 !dbg !30 {
696entry:
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
704  ret i8 %1, !dbg !36
705}
706
707; Function Attrs: nounwind readnone speculatable
708declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
709
710; Function Attrs: noinline nounwind optnone uwtable
711define dso_local void @"?Func_ExplicitCtorClass@@YA?AVExplicitCtorClass@@AEAV1@@Z"(%class.ExplicitCtorClass* noalias sret %agg.result, %class.ExplicitCtorClass* dereferenceable(1) %arg) #0 !dbg !37 {
712entry:
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
717  ret void, !dbg !48
718}
719
720; Function Attrs: noinline nounwind optnone uwtable
721define dso_local void @"?Func_DefaultedCtorClass@@YA?AVDefaultedCtorClass@@AEAV1@@Z"(%class.DefaultedCtorClass* noalias sret %agg.result, %class.DefaultedCtorClass* dereferenceable(1) %arg) #0 !dbg !49 {
722entry:
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
727  ret void, !dbg !60
728}
729
730; Function Attrs: noinline nounwind optnone uwtable
731define dso_local void @"?Func_DefaultArgumentCtorClass@@YA?AVDefaultArgumentCtorClass@@AEAV1@@Z"(%class.DefaultArgumentCtorClass* noalias sret %agg.result, %class.DefaultArgumentCtorClass* dereferenceable(1) %arg) #0 !dbg !61 {
732entry:
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
737  ret void, !dbg !72
738}
739
740; Function Attrs: noinline nounwind optnone uwtable
741define dso_local void @"?Func_UserDtorClass@@YA?AVUserDtorClass@@AEAV1@@Z"(%class.UserDtorClass* noalias sret %agg.result, %class.UserDtorClass* dereferenceable(1) %arg) #0 !dbg !73 {
742entry:
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
747  ret void, !dbg !84
748}
749
750; Function Attrs: noinline nounwind optnone uwtable
751define dso_local void @"?Func_DefaultedDtorClass@@YA?AVDefaultedDtorClass@@AEAV1@@Z"(%class.DefaultedDtorClass* noalias sret %agg.result, %class.DefaultedDtorClass* dereferenceable(1) %arg) #0 !dbg !85 {
752entry:
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
757  ret void, !dbg !96
758}
759
760; Function Attrs: noinline nounwind optnone uwtable
761define dso_local void @"?Func_AClass@@YA?AVAClass@@AEAV1@@Z"(%class.AClass* noalias sret %agg.result, %class.AClass* dereferenceable(1) %arg) #0 !dbg !97 {
762entry:
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
767  ret void, !dbg !105
768}
769
770; Function Attrs: noinline nounwind optnone uwtable
771define dso_local i8 @"?Func_BClass@@YA?AVBClass@@AEAV1@@Z"(%class.BClass* dereferenceable(1) %arg) #0 !dbg !106 {
772entry:
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
780  ret i8 %1, !dbg !114
781}
782
783; Function Attrs: noinline nounwind optnone uwtable
784define dso_local i8 @"?Func_AStruct@@YA?AUAStruct@@AEAU1@@Z"(%struct.AStruct* dereferenceable(1) %arg) #0 !dbg !115 {
785entry:
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
793  ret i8 %1, !dbg !121
794}
795
796; Function Attrs: noinline nounwind optnone uwtable
797define dso_local void @"?Func_BStruct@@YA?AUBStruct@@AEAU1@@Z"(%struct.BStruct* noalias sret %agg.result, %struct.BStruct* dereferenceable(1) %arg) #0 !dbg !122 {
798entry:
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
803  ret void, !dbg !133
804}
805
806; Function Attrs: noinline nounwind optnone uwtable
807define dso_local void @"?S@@YAXXZ"() #0 !dbg !134 {
808entry:
809  %s = alloca %struct.ComplexStruct, align 1
810  call void @llvm.dbg.declare(metadata %struct.ComplexStruct* %s, metadata !137, metadata !DIExpression()), !dbg !142
811  ret void, !dbg !143
812}
813
814; Function Attrs: noinline nounwind optnone uwtable
815define dso_local i8 @"?Func_AUnion@@YA?ATAUnion@@AEAT1@@Z"(%union.AUnion* dereferenceable(1) %arg) #0 !dbg !144 {
816entry:
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
824  ret i8 %1, !dbg !150
825}
826
827; Function Attrs: noinline nounwind optnone uwtable
828define dso_local void @"?Func_BUnion@@YA?ATBUnion@@AEAT1@@Z"(%union.BUnion* noalias sret %agg.result, %union.BUnion* dereferenceable(1) %arg) #0 !dbg !151 {
829entry:
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
834  ret void, !dbg !162
835}
836
837; Function Attrs: noinline nounwind optnone uwtable
838define dso_local void @"?U@@YAXXZ"() #0 !dbg !163 {
839entry:
840  %c = alloca %union.ComplexUnion, align 4
841  call void @llvm.dbg.declare(metadata %union.ComplexUnion* %c, metadata !164, metadata !DIExpression()), !dbg !172
842  ret void, !dbg !173
843}
844
845attributes #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" }
846attributes #1 = { nounwind readnone speculatable }
847
848!llvm.dbg.cu = !{!2}
849!llvm.module.flags = !{!25, !26, !27, !28}
850!llvm.ident = !{!29}
851
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")
856!4 = !{}
857!5 = !{!0, !6}
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@@")
862!10 = !{!11}
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)
870!18 = !{null, !19}
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)
884!32 = !{!33, !34}
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)
891!39 = !{!40, !46}
892!40 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "ExplicitCtorClass", file: !8, line: 11, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !41, identifier: ".?AVExplicitCtorClass@@")
893!41 = !{!42}
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)
896!44 = !{null, !45}
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)
903!51 = !{!52, !58}
904!52 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "DefaultedCtorClass", file: !8, line: 18, size: 8, flags: DIFlagTypePassByValue, elements: !53, identifier: ".?AVDefaultedCtorClass@@")
905!53 = !{!54}
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)
908!56 = !{null, !57}
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)
915!63 = !{!64, !70}
916!64 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "DefaultArgumentCtorClass", file: !8, line: 25, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !65, identifier: ".?AVDefaultArgumentCtorClass@@")
917!65 = !{!66}
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)
927!75 = !{!76, !82}
928!76 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "UserDtorClass", file: !8, line: 32, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !77, identifier: ".?AVUserDtorClass@@")
929!77 = !{!78}
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)
932!80 = !{null, !81}
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)
939!87 = !{!88, !94}
940!88 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "DefaultedDtorClass", file: !8, line: 39, size: 8, flags: DIFlagTypePassByValue, elements: !89, identifier: ".?AVDefaultedDtorClass@@")
941!89 = !{!90}
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)
944!92 = !{null, !93}
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)
951!99 = !{!100, !103}
952!100 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "AClass", file: !8, line: 46, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !101, identifier: ".?AVAClass@@")
953!101 = !{!102}
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)
960!108 = !{!109, !112}
961!109 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "BClass", file: !8, line: 51, size: 8, flags: DIFlagTypePassByValue, elements: !110, identifier: ".?AVBClass@@")
962!110 = !{!111}
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)
969!117 = !{!118, !119}
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)
976!124 = !{!125, !131}
977!125 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "BStruct", file: !8, line: 71, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !126, identifier: ".?AUBStruct@@")
978!126 = !{!127}
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)
981!129 = !{null, !130}
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)
988!136 = !{null}
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@")
991!139 = !{!140, !141}
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)
998!146 = !{!147, !148}
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@@")
1007!155 = !{!156}
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@")
1020!168 = !{!169}
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)
1026