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