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