brintos

brintos / llvm-project-archived public Read only

0
0
Text · 34.2 KiB · 1cac141 Raw
755 lines · plain
1; RUN: llc < %s -filetype=obj | llvm-readobj - --codeview | FileCheck %s2; RUN: llc < %s | llvm-mc -filetype=obj --triple=x86_64-windows | llvm-readobj - --codeview | FileCheck %s3 4;5; Command to generate function-options.ll6; $ clang++ function-options.cpp -S -emit-llvm -g -gcodeview -o function-options.ll7;8; #define DEFINE_FUNCTION(T) \9;   T Func_##T(T &arg) { return arg; }10;11; class AClass {};12; DEFINE_FUNCTION(AClass); // Expect: FO = None13;14; class BClass {15; private:16;   explicit BClass(); // Expect ctor: FO = Constructor17; };18; DEFINE_FUNCTION(BClass); // Expect: FO = CxxReturnUdt19;20; class C1Class {21; public:22;   C1Class() = default; // Note: Clang generates one defaulted ctor (FO = None) while MSVC doesn't.23; };24; DEFINE_FUNCTION(C1Class); // Expect: FO = None25;26; class C2Class { // Note: MSVC-specific dtor, i.e. __vecDelDtor won't be verified in this case.27; public:28;   ~C2Class() {} // Expect ~C2Class: FO = None29; };30; DEFINE_FUNCTION(C2Class); // Expect: FO = CxxReturnUdt31;32; class DClass : public BClass {}; // Note: MSVC yields one compiler-generated ctor for DClass while clang doesn't.33; DEFINE_FUNCTION(DClass); // Expect: FO = CxxReturnUdt34;35; class FClass {36;   static int x;37;   AClass Member_AClass(AClass &);38;   BClass Member_BClass(BClass &);39; };40; DEFINE_FUNCTION(FClass); // Expect FO = None41; 42; struct AStruct {};43; DEFINE_FUNCTION(AStruct); // Expect FO = None44;45; struct BStruct { BStruct(); }; // Expect ctor: FO = Constructor46; DEFINE_FUNCTION(BStruct); // Expect FO = CxxReturnUdt47;48; union AUnion {};49; DEFINE_FUNCTION(AUnion); // Expect FO = None50;51; union BUnion { BUnion() = default; }; // Note: Clang generates one defaulted ctor (FO = None) while MSVC does not.52; DEFINE_FUNCTION(BUnion); // Expect FO = None53 54 55; CHECK: Format: COFF-x86-6456; CHECK: Arch: x86_6457; CHECK: AddressSize: 64bit58; CHECK: CodeViewTypes [59; CHECK:   Section: .debug$T ({{.*}})60; CHECK:   Magic: 0x461; CHECK:   Procedure ([[SP_A:.*]]) {62; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)63; CHECK:     ReturnType: AClass ({{.*}})64; CHECK:     CallingConvention: NearC (0x0)65; CHECK:     FunctionOptions [ (0x0)66; CHECK:     ]67; CHECK:     NumParameters: 168; CHECK:     ArgListType: (AClass&) ({{.*}})69; CHECK:   }70; CHECK:   FuncId ({{.*}}) {71; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)72; CHECK:     ParentScope: 0x073; CHECK:     FunctionType: AClass (AClass&) ([[SP_A]])74; CHECK:     Name: Func_AClass75; CHECK:   }76; CHECK:   Procedure ([[SP_B:.*]]) {77; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)78; CHECK:     ReturnType: BClass ({{.*}})79; CHECK:     CallingConvention: NearC (0x0)80; CHECK:     FunctionOptions [ (0x1)81; CHECK:       CxxReturnUdt (0x1)82; CHECK:     ]83; CHECK:     NumParameters: 184; CHECK:     ArgListType: (BClass&) ({{.*}})85; CHECK:   }86; CHECK:   MemberFunction ([[CTOR_B:.*]]) {87; CHECK:     TypeLeafKind: LF_MFUNCTION (0x1009)88; CHECK:     ReturnType: void (0x3)89; CHECK:     ClassType: BClass ({{.*}})90; CHECK:     ThisType: BClass* {{.*}}91; CHECK:     CallingConvention: NearC (0x0)92; CHECK:     FunctionOptions [ (0x2)93; CHECK:       Constructor (0x2)94; CHECK:     ]95; CHECK:     NumParameters: 096; CHECK:     ArgListType: () ({{.*}})97; CHECK:     ThisAdjustment: 098; CHECK:   }99; CHECK:   FieldList ({{.*}}) {100; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)101; CHECK:     OneMethod {102; CHECK:       TypeLeafKind: LF_ONEMETHOD (0x1511)103; CHECK:       AccessSpecifier: Private (0x1)104; CHECK:       Type: void BClass::() ([[CTOR_B]])105; CHECK:       Name: BClass106; CHECK:     }107; CHECK:   }108; CHECK:   FuncId ({{.*}}) {109; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)110; CHECK:     ParentScope: 0x0111; CHECK:     FunctionType: BClass (BClass&) ([[SP_B]])112; CHECK:     Name: Func_BClass113; CHECK:   }114; CHECK:   Procedure ([[SP_C1:.*]]) {115; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)116; CHECK:     ReturnType: C1Class ({{.*}})117; CHECK:     CallingConvention: NearC (0x0)118; CHECK:     FunctionOptions [ (0x0)119; CHECK:     ]120; CHECK:     NumParameters: 1121; CHECK:     ArgListType: (C1Class&) ({{.*}})122; CHECK:   }123; CHECK:   MemberFunction ([[CTOR_C1:.*]]) {124; CHECK:     TypeLeafKind: LF_MFUNCTION (0x1009)125; CHECK:     ReturnType: void (0x3)126; CHECK:     ClassType: C1Class ({{.*}})127; CHECK:     ThisType: C1Class* {{.*}}128; CHECK:     CallingConvention: NearC (0x0)129; CHECK:     FunctionOptions [ (0x0)130; CHECK:     ]131; CHECK:     NumParameters: 0132; CHECK:     ArgListType: () ({{.*}})133; CHECK:     ThisAdjustment: 0134; CHECK:   }135; CHECK:   FieldList ({{.*}}) {136; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)137; CHECK:     OneMethod {138; CHECK:       TypeLeafKind: LF_ONEMETHOD (0x1511)139; CHECK:       AccessSpecifier: Public (0x3)140; CHECK:       Type: void C1Class::() ([[CTOR_C1]])141; CHECK:       Name: C1Class142; CHECK:     }143; CHECK:   }144; CHECK:   FuncId ({{.*}}) {145; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)146; CHECK:     ParentScope: 0x0147; CHECK:     FunctionType: C1Class (C1Class&) ([[SP_C1]])148; CHECK:     Name: Func_C1Class149; CHECK:   }150; CHECK:   Procedure ([[SP_C2:.*]]) {151; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)152; CHECK:     ReturnType: C2Class ({{.*}})153; CHECK:     CallingConvention: NearC (0x0)154; CHECK:     FunctionOptions [ (0x1)155; CHECK:       CxxReturnUdt (0x1)156; CHECK:     ]157; CHECK:     NumParameters: 1158; CHECK:     ArgListType: (C2Class&) ({{.*}})159; CHECK:   }160; CHECK:   MemberFunction ([[CTOR_C2:.*]]) {161; CHECK:     TypeLeafKind: LF_MFUNCTION (0x1009)162; CHECK:     ReturnType: void (0x3)163; CHECK:     ClassType: C2Class ({{.*}})164; CHECK:     ThisType: C2Class* {{.*}}165; CHECK:     CallingConvention: NearC (0x0)166; CHECK:     FunctionOptions [ (0x0)167; CHECK:     ]168; CHECK:     NumParameters: 0169; CHECK:     ArgListType: () ({{.*}})170; CHECK:     ThisAdjustment: 0171; CHECK:   }172; CHECK:   FieldList ({{.*}}) {173; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)174; CHECK:     OneMethod {175; CHECK:       TypeLeafKind: LF_ONEMETHOD (0x1511)176; CHECK:       AccessSpecifier: Public (0x3)177; CHECK:       Type: void C2Class::() ([[CTOR_C2]])178; CHECK:       Name: ~C2Class179; CHECK:     }180; CHECK:   }181; CHECK:   FuncId ({{.*}}) {182; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)183; CHECK:     ParentScope: 0x0184; CHECK:     FunctionType: C2Class (C2Class&) ([[SP_C2]])185; CHECK:     Name: Func_C2Class186; CHECK:   }187; CHECK:   Procedure ([[SP_D:.*]]) {188; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)189; CHECK:     ReturnType: DClass ({{.*}})190; CHECK:     CallingConvention: NearC (0x0)191; CHECK:     FunctionOptions [ (0x1)192; CHECK:       CxxReturnUdt (0x1)193; CHECK:     ]194; CHECK:     NumParameters: 1195; CHECK:     ArgListType: (DClass&) ({{.*}})196; CHECK:   }197; CHECK:   FieldList ({{.*}}) {198; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)199; CHECK:     BaseClass {200; CHECK:       TypeLeafKind: LF_BCLASS (0x1400)201; CHECK:       AccessSpecifier: Public (0x3)202; CHECK:       BaseType: BClass ({{.*}})203; CHECK:       BaseOffset: 0x0204; CHECK:     }205; CHECK:   }206; CHECK:   FuncId ({{.*}}) {207; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)208; CHECK:     ParentScope: 0x0209; CHECK:     FunctionType: DClass (DClass&) ([[SP_D]])210; CHECK:     Name: Func_DClass211; CHECK:   }212; CHECK:   Procedure ([[SP_F:.*]]) {213; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)214; CHECK:     ReturnType: FClass ({{.*}})215; CHECK:     CallingConvention: NearC (0x0)216; CHECK:     FunctionOptions [ (0x0)217; CHECK:     ]218; CHECK:     NumParameters: 1219; CHECK:     ArgListType: (FClass&) ({{.*}})220; CHECK:   }221; CHECK:   MemberFunction ([[MF_A:.*]]) {222; CHECK:     TypeLeafKind: LF_MFUNCTION (0x1009)223; CHECK:     ReturnType: AClass ({{.*}})224; CHECK:     ClassType: FClass ({{.*}})225; CHECK:     ThisType: FClass* {{.*}}226; CHECK:     CallingConvention: NearC (0x0)227; CHECK:     FunctionOptions [ (0x1)228; CHECK:       CxxReturnUdt (0x1)229; CHECK:     ]230; CHECK:     NumParameters: 1231; CHECK:     ArgListType: (AClass&) ({{.*}})232; CHECK:     ThisAdjustment: 0233; CHECK:   }234; CHECK:   MemberFunction ([[MF_B:.*]]) {235; CHECK:     TypeLeafKind: LF_MFUNCTION (0x1009)236; CHECK:     ReturnType: BClass ({{.*}})237; CHECK:     ClassType: FClass ({{.*}})238; CHECK:     ThisType: FClass* {{.*}}239; CHECK:     CallingConvention: NearC (0x0)240; CHECK:     FunctionOptions [ (0x1)241; CHECK:       CxxReturnUdt (0x1)242; CHECK:     ]243; CHECK:     NumParameters: 1244; CHECK:     ArgListType: (BClass&) ({{.*}})245; CHECK:     ThisAdjustment: 0246; CHECK:   }247; CHECK:   FieldList ({{.*}}) {248; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)249; CHECK:     StaticDataMember {250; CHECK:       TypeLeafKind: LF_STMEMBER (0x150E)251; CHECK:       AccessSpecifier: Private (0x1)252; CHECK:       Type: int (0x74)253; CHECK:       Name: x254; CHECK:     }255; CHECK:     OneMethod {256; CHECK:       TypeLeafKind: LF_ONEMETHOD (0x1511)257; CHECK:       AccessSpecifier: Private (0x1)258; CHECK:       Type: AClass FClass::(AClass&) ([[MF_A]])259; CHECK:       Name: Member_AClass260; CHECK:     }261; CHECK:     OneMethod {262; CHECK:       TypeLeafKind: LF_ONEMETHOD (0x1511)263; CHECK:       AccessSpecifier: Private (0x1)264; CHECK:       Type: BClass FClass::(BClass&) ([[MF_B]])265; CHECK:       Name: Member_BClass266; CHECK:     }267; CHECK:   }268; CHECK:   FuncId ({{.*}}) {269; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)270; CHECK:     ParentScope: 0x0271; CHECK:     FunctionType: FClass (FClass&) ([[SP_F]])272; CHECK:     Name: Func_FClass273; CHECK:   }274; CHECK:   Procedure ([[SP_AS:.*]]) {275; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)276; CHECK:     ReturnType: AStruct ({{.*}})277; CHECK:     CallingConvention: NearC (0x0)278; CHECK:     FunctionOptions [ (0x0)279; CHECK:     ]280; CHECK:     NumParameters: 1281; CHECK:     ArgListType: (AStruct&) ({{.*}})282; CHECK:   }283; CHECK:   FuncId ({{.*}}) {284; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)285; CHECK:     ParentScope: 0x0286; CHECK:     FunctionType: AStruct (AStruct&) ([[SP_AS]])287; CHECK:     Name: Func_AStruct288; CHECK:   }289; CHECK:   Procedure ([[SP_BS:.*]]) {290; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)291; CHECK:     ReturnType: BStruct ({{.*}})292; CHECK:     CallingConvention: NearC (0x0)293; CHECK:     FunctionOptions [ (0x1)294; CHECK:       CxxReturnUdt (0x1)295; CHECK:     ]296; CHECK:     NumParameters: 1297; CHECK:     ArgListType: (BStruct&) ({{.*}})298; CHECK:   }299; CHECK:   MemberFunction ([[CTOR_BS:.*]]) {300; CHECK:     TypeLeafKind: LF_MFUNCTION (0x1009)301; CHECK:     ReturnType: void (0x3)302; CHECK:     ClassType: BStruct ({{.*}})303; CHECK:     ThisType: BStruct* {{.*}}304; CHECK:     CallingConvention: NearC (0x0)305; CHECK:     FunctionOptions [ (0x2)306; CHECK:       Constructor (0x2)307; CHECK:     ]308; CHECK:     NumParameters: 0309; CHECK:     ArgListType: () ({{.*}})310; CHECK:     ThisAdjustment: 0311; CHECK:   }312; CHECK:   FieldList ({{.*}}) {313; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)314; CHECK:     OneMethod {315; CHECK:       TypeLeafKind: LF_ONEMETHOD (0x1511)316; CHECK:       AccessSpecifier: Public (0x3)317; CHECK:       Type: void BStruct::() ([[CTOR_BS]])318; CHECK:       Name: BStruct319; CHECK:     }320; CHECK:   }321; CHECK:   FuncId ({{.*}}) {322; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)323; CHECK:     ParentScope: 0x0324; CHECK:     FunctionType: BStruct (BStruct&) ([[SP_BS]])325; CHECK:     Name: Func_BStruct326; CHECK:   }327; CHECK:   Procedure ([[SP_AU:.*]]) {328; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)329; CHECK:     ReturnType: AUnion ({{.*}})330; CHECK:     CallingConvention: NearC (0x0)331; CHECK:     FunctionOptions [ (0x0)332; CHECK:     ]333; CHECK:     NumParameters: 1334; CHECK:     ArgListType: (AUnion&) ({{.*}})335; CHECK:   }336; CHECK:   FuncId ({{.*}}) {337; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)338; CHECK:     ParentScope: 0x0339; CHECK:     FunctionType: AUnion (AUnion&) ([[SP_AU]])340; CHECK:     Name: Func_AUnion341; CHECK:   }342; CHECK:   Procedure ([[SP_BU:.*]]) {343; CHECK:     TypeLeafKind: LF_PROCEDURE (0x1008)344; CHECK:     ReturnType: BUnion ({{.*}})345; CHECK:     CallingConvention: NearC (0x0)346; CHECK:     FunctionOptions [ (0x0)347; CHECK:     ]348; CHECK:     NumParameters: 1349; CHECK:     ArgListType: (BUnion&) ({{.*}})350; CHECK:   }351; CHECK:   MemberFunction ([[CTOR_BU:.*]]) {352; CHECK:     TypeLeafKind: LF_MFUNCTION (0x1009)353; CHECK:     ReturnType: void (0x3)354; CHECK:     ClassType: BUnion ({{.*}})355; CHECK:     ThisType: BUnion* {{.*}}356; CHECK:     CallingConvention: NearC (0x0)357; CHECK:     FunctionOptions [ (0x0)358; CHECK:     ]359; CHECK:     NumParameters: 0360; CHECK:     ArgListType: () ({{.*}})361; CHECK:     ThisAdjustment: 0362; CHECK:   }363; CHECK:   FieldList ({{.*}}) {364; CHECK:     TypeLeafKind: LF_FIELDLIST (0x1203)365; CHECK:     OneMethod {366; CHECK:       TypeLeafKind: LF_ONEMETHOD (0x1511)367; CHECK:       AccessSpecifier: Public (0x3)368; CHECK:       Type: void BUnion::() ([[CTOR_BU]])369; CHECK:       Name: BUnion370; CHECK:     }371; CHECK:   }372; CHECK:   FuncId ({{.*}}) {373; CHECK:     TypeLeafKind: LF_FUNC_ID (0x1601)374; CHECK:     ParentScope: 0x0375; CHECK:     FunctionType: BUnion (BUnion&) ([[SP_BU]])376; CHECK:     Name: Func_BUnion377; CHECK:   }378; CHECK: ]379 380; CHECK-LABEL: FunctionType: Func_AClass (0x1008)381; CHECK-NEXT:  CodeOffset: ?Func_AClass@@YA?AVAClass@@AEAV1@@Z+0x0382; CHECK-NEXT:  Segment: 0x0383; CHECK-NEXT:  Flags [ (0xC0)384; CHECK-NEXT:    HasOptimizedDebugInfo (0x80)385; CHECK-NEXT:    IsNoInline (0x40)386; CHECK-NEXT:  ]387; CHECK-NEXT:  DisplayName: Func_AClass388; CHECK-NEXT:  LinkageName: ?Func_AClass@@YA?AVAClass@@AEAV1@@Z389; CHECK-LABEL: FunctionType: Func_BClass (0x1013)390; CHECK-NEXT:  CodeOffset: ?Func_BClass@@YA?AVBClass@@AEAV1@@Z+0x0391; CHECK-NEXT:  Segment: 0x0392; CHECK-NEXT:  Flags [ (0xC0)393; CHECK-NEXT:    HasOptimizedDebugInfo (0x80)394; CHECK-NEXT:    IsNoInline (0x40)395; CHECK-NEXT:  ]396; CHECK-NEXT:  DisplayName: Func_BClass397; CHECK-NEXT:  LinkageName: ?Func_BClass@@YA?AVBClass@@AEAV1@@Z398; CHECK-LABEL: FunctionType: Func_C1Class (0x101D)399; CHECK-NEXT:  CodeOffset: ?Func_C1Class@@YA?AVC1Class@@AEAV1@@Z+0x0400; CHECK-NEXT:  Segment: 0x0401; CHECK-NEXT:  Flags [ (0xC0)402; CHECK-NEXT:    HasOptimizedDebugInfo (0x80)403; CHECK-NEXT:    IsNoInline (0x40)404; CHECK-NEXT:  ]405; CHECK-NEXT:  DisplayName: Func_C1Class406; CHECK-NEXT:  LinkageName: ?Func_C1Class@@YA?AVC1Class@@AEAV1@@Z407; CHECK-LABEL: FunctionType: Func_C2Class (0x1027)408; CHECK-NEXT:  CodeOffset: ?Func_C2Class@@YA?AVC2Class@@AEAV1@@Z+0x0409; CHECK-NEXT:  Segment: 0x0410; CHECK-NEXT:  Flags [ (0xC0)411; CHECK-NEXT:    HasOptimizedDebugInfo (0x80)412; CHECK-NEXT:    IsNoInline (0x40)413; CHECK-NEXT:  ]414; CHECK-NEXT:  DisplayName: Func_C2Class415; CHECK-NEXT:  LinkageName: ?Func_C2Class@@YA?AVC2Class@@AEAV1@@Z416; CHECK-LABEL: FunctionType: Func_DClass (0x102F)417; CHECK-NEXT:  CodeOffset: ?Func_DClass@@YA?AVDClass@@AEAV1@@Z+0x0418; CHECK-NEXT:  Segment: 0x0419; CHECK-NEXT:  Flags [ (0xC0)420; CHECK-NEXT:    HasOptimizedDebugInfo (0x80)421; CHECK-NEXT:    IsNoInline (0x40)422; CHECK-NEXT:  ]423; CHECK-NEXT:  DisplayName: Func_DClass424; CHECK-NEXT:  LinkageName: ?Func_DClass@@YA?AVDClass@@AEAV1@@Z425; CHECK-LABEL: FunctionType: Func_FClass (0x103A)426; CHECK-NEXT:  CodeOffset: ?Func_FClass@@YA?AVFClass@@AEAV1@@Z+0x0427; CHECK-NEXT:  Segment: 0x0428; CHECK-NEXT:  Flags [ (0xC0)429; CHECK-NEXT:    HasOptimizedDebugInfo (0x80)430; CHECK-NEXT:    IsNoInline (0x40)431; CHECK-NEXT:  ]432; CHECK-NEXT:  DisplayName: Func_FClass433; CHECK-NEXT:  LinkageName: ?Func_FClass@@YA?AVFClass@@AEAV1@@Z434; CHECK-LABEL: FunctionType: Func_AStruct (0x1041)435; CHECK-NEXT:  CodeOffset: ?Func_AStruct@@YA?AUAStruct@@AEAU1@@Z+0x0436; CHECK-NEXT:  Segment: 0x0437; CHECK-NEXT:  Flags [ (0xC0)438; CHECK-NEXT:    HasOptimizedDebugInfo (0x80)439; CHECK-NEXT:    IsNoInline (0x40)440; CHECK-NEXT:  ]441; CHECK-NEXT:  DisplayName: Func_AStruct442; CHECK-NEXT:  LinkageName: ?Func_AStruct@@YA?AUAStruct@@AEAU1@@Z443; CHECK-LABEL: FunctionType: Func_BStruct (0x104B)444; CHECK-NEXT:  CodeOffset: ?Func_BStruct@@YA?AUBStruct@@AEAU1@@Z+0x0445; CHECK-NEXT:  Segment: 0x0446; CHECK-NEXT:  Flags [ (0xC0)447; CHECK-NEXT:    HasOptimizedDebugInfo (0x80)448; CHECK-NEXT:    IsNoInline (0x40)449; CHECK-NEXT:  ]450; CHECK-NEXT:  DisplayName: Func_BStruct451; CHECK-NEXT:  LinkageName: ?Func_BStruct@@YA?AUBStruct@@AEAU1@@Z452; CHECK-LABEL: FunctionType: Func_AUnion (0x1052)453; CHECK-NEXT:  CodeOffset: ?Func_AUnion@@YA?ATAUnion@@AEAT1@@Z+0x0454; CHECK-NEXT:  Segment: 0x0455; CHECK-NEXT:  Flags [ (0xC0)456; CHECK-NEXT:    HasOptimizedDebugInfo (0x80)457; CHECK-NEXT:    IsNoInline (0x40)458; CHECK-NEXT:  ]459; CHECK-NEXT:  DisplayName: Func_AUnion460; CHECK-NEXT:  LinkageName: ?Func_AUnion@@YA?ATAUnion@@AEAT1@@Z461; CHECK-LABEL: FunctionType: Func_BUnion (0x105C)462; CHECK-NEXT:  CodeOffset: ?Func_BUnion@@YA?ATBUnion@@AEAT1@@Z+0x0463; CHECK-NEXT:  Segment: 0x0464; CHECK-NEXT:  Flags [ (0xC0)465; CHECK-NEXT:    HasOptimizedDebugInfo (0x80)466; CHECK-NEXT:    IsNoInline (0x40)467; CHECK-NEXT:  ]468; CHECK-NEXT:  DisplayName: Func_BUnion469; CHECK-NEXT:  LinkageName: ?Func_BUnion@@YA?ATBUnion@@AEAT1@@Z470 471; ModuleID = 't.cpp'472source_filename = "t.cpp"473target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"474target triple = "x86_64-pc-windows-msvc19.23.28106"475 476%class.AClass = type { i8 }477%class.BClass = type { i8 }478%class.C1Class = type { i8 }479%class.C2Class = type { i8 }480%class.DClass = type { i8 }481%class.FClass = type { i8 }482%struct.AStruct = type { i8 }483%struct.BStruct = type { i8 }484%union.AUnion = type { i8 }485%union.BUnion = type { i8 }486 487; Function Attrs: noinline nounwind optnone uwtable488define dso_local i8 @"?Func_AClass@@YA?AVAClass@@AEAV1@@Z"(ptr dereferenceable(1) %arg) #0 !dbg !8 {489entry:490  %retval = alloca %class.AClass, align 1491  %arg.addr = alloca ptr, align 8492  store ptr %arg, ptr %arg.addr, align 8493  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !13, metadata !DIExpression()), !dbg !14494  %0 = load ptr, ptr %arg.addr, align 8, !dbg !14495  %coerce.dive = getelementptr inbounds %class.AClass, ptr %retval, i32 0, i32 0, !dbg !14496  %1 = load i8, ptr %coerce.dive, align 1, !dbg !14497  ret i8 %1, !dbg !14498}499 500; Function Attrs: nounwind readnone speculatable willreturn501declare void @llvm.dbg.declare(metadata, metadata, metadata) #1502 503; Function Attrs: noinline nounwind optnone uwtable504define dso_local void @"?Func_BClass@@YA?AVBClass@@AEAV1@@Z"(ptr noalias sret(%class.BClass) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !15 {505entry:506  %result.ptr = alloca ptr, align 8507  %arg.addr = alloca ptr, align 8508  %0 = bitcast ptr %agg.result to ptr509  store ptr %0, ptr %result.ptr, align 8510  store ptr %arg, ptr %arg.addr, align 8511  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !25, metadata !DIExpression()), !dbg !26512  %1 = load ptr, ptr %arg.addr, align 8, !dbg !26513  ret void, !dbg !26514}515 516; Function Attrs: noinline nounwind optnone uwtable517define dso_local void @"?Func_C1Class@@YA?AVC1Class@@AEAV1@@Z"(ptr noalias sret(%class.C1Class) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !27 {518entry:519  %result.ptr = alloca ptr, align 8520  %arg.addr = alloca ptr, align 8521  %0 = bitcast ptr %agg.result to ptr522  store ptr %0, ptr %result.ptr, align 8523  store ptr %arg, ptr %arg.addr, align 8524  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !37, metadata !DIExpression()), !dbg !38525  %1 = load ptr, ptr %arg.addr, align 8, !dbg !38526  ret void, !dbg !38527}528 529; Function Attrs: noinline nounwind optnone uwtable530define dso_local void @"?Func_C2Class@@YA?AVC2Class@@AEAV1@@Z"(ptr noalias sret(%class.C2Class) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !39 {531entry:532  %result.ptr = alloca ptr, align 8533  %arg.addr = alloca ptr, align 8534  %0 = bitcast ptr %agg.result to ptr535  store ptr %0, ptr %result.ptr, align 8536  store ptr %arg, ptr %arg.addr, align 8537  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !49, metadata !DIExpression()), !dbg !50538  %1 = load ptr, ptr %arg.addr, align 8, !dbg !50539  ret void, !dbg !50540}541 542; Function Attrs: noinline nounwind optnone uwtable543define dso_local void @"?Func_DClass@@YA?AVDClass@@AEAV1@@Z"(ptr noalias sret(%class.DClass) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !51 {544entry:545  %result.ptr = alloca ptr, align 8546  %arg.addr = alloca ptr, align 8547  %0 = bitcast ptr %agg.result to ptr548  store ptr %0, ptr %result.ptr, align 8549  store ptr %arg, ptr %arg.addr, align 8550  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !58, metadata !DIExpression()), !dbg !59551  %1 = load ptr, ptr %arg.addr, align 8, !dbg !59552  ret void, !dbg !59553}554 555; Function Attrs: noinline nounwind optnone uwtable556define dso_local i8 @"?Func_FClass@@YA?AVFClass@@AEAV1@@Z"(ptr dereferenceable(1) %arg) #0 !dbg !60 {557entry:558  %retval = alloca %class.FClass, align 1559  %arg.addr = alloca ptr, align 8560  store ptr %arg, ptr %arg.addr, align 8561  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !75, metadata !DIExpression()), !dbg !76562  %0 = load ptr, ptr %arg.addr, align 8, !dbg !76563  %coerce.dive = getelementptr inbounds %class.FClass, ptr %retval, i32 0, i32 0, !dbg !76564  %1 = load i8, ptr %coerce.dive, align 1, !dbg !76565  ret i8 %1, !dbg !76566}567 568; Function Attrs: noinline nounwind optnone uwtable569define dso_local i8 @"?Func_AStruct@@YA?AUAStruct@@AEAU1@@Z"(ptr dereferenceable(1) %arg) #0 !dbg !77 {570entry:571  %retval = alloca %struct.AStruct, align 1572  %arg.addr = alloca ptr, align 8573  store ptr %arg, ptr %arg.addr, align 8574  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !82, metadata !DIExpression()), !dbg !83575  %0 = load ptr, ptr %arg.addr, align 8, !dbg !83576  %coerce.dive = getelementptr inbounds %struct.AStruct, ptr %retval, i32 0, i32 0, !dbg !83577  %1 = load i8, ptr %coerce.dive, align 1, !dbg !83578  ret i8 %1, !dbg !83579}580 581; Function Attrs: noinline nounwind optnone uwtable582define dso_local void @"?Func_BStruct@@YA?AUBStruct@@AEAU1@@Z"(ptr noalias sret(%struct.BStruct) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !84 {583entry:584  %result.ptr = alloca ptr, align 8585  %arg.addr = alloca ptr, align 8586  %0 = bitcast ptr %agg.result to ptr587  store ptr %0, ptr %result.ptr, align 8588  store ptr %arg, ptr %arg.addr, align 8589  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !94, metadata !DIExpression()), !dbg !95590  %1 = load ptr, ptr %arg.addr, align 8, !dbg !95591  ret void, !dbg !95592}593 594; Function Attrs: noinline nounwind optnone uwtable595define dso_local i8 @"?Func_AUnion@@YA?ATAUnion@@AEAT1@@Z"(ptr dereferenceable(1) %arg) #0 !dbg !96 {596entry:597  %retval = alloca %union.AUnion, align 1598  %arg.addr = alloca ptr, align 8599  store ptr %arg, ptr %arg.addr, align 8600  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !101, metadata !DIExpression()), !dbg !102601  %0 = load ptr, ptr %arg.addr, align 8, !dbg !102602  %coerce.dive = getelementptr inbounds %union.AUnion, ptr %retval, i32 0, i32 0, !dbg !102603  %1 = load i8, ptr %coerce.dive, align 1, !dbg !102604  ret i8 %1, !dbg !102605}606 607; Function Attrs: noinline nounwind optnone uwtable608define dso_local void @"?Func_BUnion@@YA?ATBUnion@@AEAT1@@Z"(ptr noalias sret(%union.BUnion) %agg.result, ptr dereferenceable(1) %arg) #0 !dbg !103 {609entry:610  %result.ptr = alloca ptr, align 8611  %arg.addr = alloca ptr, align 8612  %0 = bitcast ptr %agg.result to ptr613  store ptr %0, ptr %result.ptr, align 8614  store ptr %arg, ptr %arg.addr, align 8615  call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !113, metadata !DIExpression()), !dbg !114616  %1 = load ptr, ptr %arg.addr, align 8, !dbg !114617  ret void, !dbg !114618}619 620; Function Attrs: noinline norecurse nounwind optnone uwtable621define dso_local i32 @main() #2 !dbg !115 {622entry:623  %retval = alloca i32, align 4624  store i32 0, ptr %retval, align 4625  ret i32 0, !dbg !118626}627 628attributes #0 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "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"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "use-soft-float"="false" }629attributes #1 = { nounwind readnone speculatable willreturn }630attributes #2 = { noinline norecurse nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "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"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "use-soft-float"="false" }631 632!llvm.dbg.cu = !{!0}633!llvm.module.flags = !{!3, !4, !5, !6}634!llvm.ident = !{!7}635 636!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 48992717b0e3466cf8814a188e9568c9d71b59c2)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)637!1 = !DIFile(filename: "t.cpp", directory: "C:\\src\\tests\\duplicate-types\\llvm-test", checksumkind: CSK_MD5, checksum: "c4c61c0e2135d713d0c99a1ba9ab568b")638!2 = !{}639!3 = !{i32 2, !"CodeView", i32 1}640!4 = !{i32 2, !"Debug Info Version", i32 3}641!5 = !{i32 1, !"wchar_size", i32 2}642!6 = !{i32 7, !"PIC Level", i32 2}643!7 = !{!"clang version 11.0.0 (https://github.com/llvm/llvm-project.git 48992717b0e3466cf8814a188e9568c9d71b59c2)"}644!8 = distinct !DISubprogram(name: "Func_AClass", linkageName: "?Func_AClass@@YA?AVAClass@@AEAV1@@Z", scope: !1, file: !1, line: 5, type: !9, scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)645!9 = !DISubroutineType(types: !10)646!10 = !{!11, !12}647!11 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "AClass", file: !1, line: 4, size: 8, flags: DIFlagTypePassByValue, elements: !2, identifier: ".?AVAClass@@")648!12 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !11, size: 64)649!13 = !DILocalVariable(name: "arg", arg: 1, scope: !8, file: !1, line: 5, type: !12)650!14 = !DILocation(line: 5, scope: !8)651!15 = distinct !DISubprogram(name: "Func_BClass", linkageName: "?Func_BClass@@YA?AVBClass@@AEAV1@@Z", scope: !1, file: !1, line: 11, type: !16, scopeLine: 11, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)652!16 = !DISubroutineType(types: !17)653!17 = !{!18, !24}654!18 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "BClass", file: !1, line: 7, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !19, identifier: ".?AVBClass@@")655!19 = !{!20}656!20 = !DISubprogram(name: "BClass", scope: !18, file: !1, line: 9, type: !21, scopeLine: 9, flags: DIFlagExplicit | DIFlagPrototyped, spFlags: 0)657!21 = !DISubroutineType(types: !22)658!22 = !{null, !23}659!23 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !18, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)660!24 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !18, size: 64)661!25 = !DILocalVariable(name: "arg", arg: 1, scope: !15, file: !1, line: 11, type: !24)662!26 = !DILocation(line: 11, scope: !15)663!27 = distinct !DISubprogram(name: "Func_C1Class", linkageName: "?Func_C1Class@@YA?AVC1Class@@AEAV1@@Z", scope: !1, file: !1, line: 17, type: !28, scopeLine: 17, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)664!28 = !DISubroutineType(types: !29)665!29 = !{!30, !36}666!30 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "C1Class", file: !1, line: 13, size: 8, flags: DIFlagTypePassByValue, elements: !31, identifier: ".?AVC1Class@@")667!31 = !{!32}668!32 = !DISubprogram(name: "C1Class", scope: !30, file: !1, line: 15, type: !33, scopeLine: 15, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)669!33 = !DISubroutineType(types: !34)670!34 = !{null, !35}671!35 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)672!36 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !30, size: 64)673!37 = !DILocalVariable(name: "arg", arg: 1, scope: !27, file: !1, line: 17, type: !36)674!38 = !DILocation(line: 17, scope: !27)675!39 = distinct !DISubprogram(name: "Func_C2Class", linkageName: "?Func_C2Class@@YA?AVC2Class@@AEAV1@@Z", scope: !1, file: !1, line: 23, type: !40, scopeLine: 23, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)676!40 = !DISubroutineType(types: !41)677!41 = !{!42, !48}678!42 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "C2Class", file: !1, line: 19, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !43, identifier: ".?AVC2Class@@")679!43 = !{!44}680!44 = !DISubprogram(name: "~C2Class", scope: !42, file: !1, line: 21, type: !45, scopeLine: 21, flags: DIFlagPublic | DIFlagPrototyped, spFlags: 0)681!45 = !DISubroutineType(types: !46)682!46 = !{null, !47}683!47 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !42, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)684!48 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !42, size: 64)685!49 = !DILocalVariable(name: "arg", arg: 1, scope: !39, file: !1, line: 23, type: !48)686!50 = !DILocation(line: 23, scope: !39)687!51 = distinct !DISubprogram(name: "Func_DClass", linkageName: "?Func_DClass@@YA?AVDClass@@AEAV1@@Z", scope: !1, file: !1, line: 26, type: !52, scopeLine: 26, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)688!52 = !DISubroutineType(types: !53)689!53 = !{!54, !57}690!54 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "DClass", file: !1, line: 25, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !55, identifier: ".?AVDClass@@")691!55 = !{!56}692!56 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !54, baseType: !18, flags: DIFlagPublic, extraData: i32 0)693!57 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !54, size: 64)694!58 = !DILocalVariable(name: "arg", arg: 1, scope: !51, file: !1, line: 26, type: !57)695!59 = !DILocation(line: 26, scope: !51)696!60 = distinct !DISubprogram(name: "Func_FClass", linkageName: "?Func_FClass@@YA?AVFClass@@AEAV1@@Z", scope: !1, file: !1, line: 33, type: !61, scopeLine: 33, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)697!61 = !DISubroutineType(types: !62)698!62 = !{!63, !74}699!63 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "FClass", file: !1, line: 28, size: 8, flags: DIFlagTypePassByValue, elements: !64, identifier: ".?AVFClass@@")700!64 = !{!65, !67, !71}701!65 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !63, file: !1, line: 29, baseType: !66, flags: DIFlagStaticMember)702!66 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)703!67 = !DISubprogram(name: "Member_AClass", linkageName: "?Member_AClass@FClass@@AEAA?AVAClass@@AEAV2@@Z", scope: !63, file: !1, line: 30, type: !68, scopeLine: 30, flags: DIFlagPrototyped, spFlags: 0)704!68 = !DISubroutineType(types: !69)705!69 = !{!11, !70, !12}706!70 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !63, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)707!71 = !DISubprogram(name: "Member_BClass", linkageName: "?Member_BClass@FClass@@AEAA?AVBClass@@AEAV2@@Z", scope: !63, file: !1, line: 31, type: !72, scopeLine: 31, flags: DIFlagPrototyped, spFlags: 0)708!72 = !DISubroutineType(types: !73)709!73 = !{!18, !70, !24}710!74 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !63, size: 64)711!75 = !DILocalVariable(name: "arg", arg: 1, scope: !60, file: !1, line: 33, type: !74)712!76 = !DILocation(line: 33, scope: !60)713!77 = distinct !DISubprogram(name: "Func_AStruct", linkageName: "?Func_AStruct@@YA?AUAStruct@@AEAU1@@Z", scope: !1, file: !1, line: 36, type: !78, scopeLine: 36, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)714!78 = !DISubroutineType(types: !79)715!79 = !{!80, !81}716!80 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "AStruct", file: !1, line: 35, size: 8, flags: DIFlagTypePassByValue, elements: !2, identifier: ".?AUAStruct@@")717!81 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !80, size: 64)718!82 = !DILocalVariable(name: "arg", arg: 1, scope: !77, file: !1, line: 36, type: !81)719!83 = !DILocation(line: 36, scope: !77)720!84 = distinct !DISubprogram(name: "Func_BStruct", linkageName: "?Func_BStruct@@YA?AUBStruct@@AEAU1@@Z", scope: !1, file: !1, line: 39, type: !85, scopeLine: 39, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)721!85 = !DISubroutineType(types: !86)722!86 = !{!87, !93}723!87 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "BStruct", file: !1, line: 38, size: 8, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !88, identifier: ".?AUBStruct@@")724!88 = !{!89}725!89 = !DISubprogram(name: "BStruct", scope: !87, file: !1, line: 38, type: !90, scopeLine: 38, flags: DIFlagPrototyped, spFlags: 0)726!90 = !DISubroutineType(types: !91)727!91 = !{null, !92}728!92 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !87, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)729!93 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !87, size: 64)730!94 = !DILocalVariable(name: "arg", arg: 1, scope: !84, file: !1, line: 39, type: !93)731!95 = !DILocation(line: 39, scope: !84)732!96 = distinct !DISubprogram(name: "Func_AUnion", linkageName: "?Func_AUnion@@YA?ATAUnion@@AEAT1@@Z", scope: !1, file: !1, line: 42, type: !97, scopeLine: 42, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)733!97 = !DISubroutineType(types: !98)734!98 = !{!99, !100}735!99 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "AUnion", file: !1, line: 41, size: 8, flags: DIFlagTypePassByValue, elements: !2, identifier: ".?ATAUnion@@")736!100 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !99, size: 64)737!101 = !DILocalVariable(name: "arg", arg: 1, scope: !96, file: !1, line: 42, type: !100)738!102 = !DILocation(line: 42, scope: !96)739!103 = distinct !DISubprogram(name: "Func_BUnion", linkageName: "?Func_BUnion@@YA?ATBUnion@@AEAT1@@Z", scope: !1, file: !1, line: 45, type: !104, scopeLine: 45, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)740!104 = !DISubroutineType(types: !105)741!105 = !{!106, !112}742!106 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "BUnion", file: !1, line: 44, size: 8, flags: DIFlagTypePassByValue, elements: !107, identifier: ".?ATBUnion@@")743!107 = !{!108}744!108 = !DISubprogram(name: "BUnion", scope: !106, file: !1, line: 44, type: !109, scopeLine: 44, flags: DIFlagPrototyped, spFlags: 0)745!109 = !DISubroutineType(types: !110)746!110 = !{null, !111}747!111 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !106, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)748!112 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !106, size: 64)749!113 = !DILocalVariable(name: "arg", arg: 1, scope: !103, file: !1, line: 45, type: !112)750!114 = !DILocation(line: 45, scope: !103)751!115 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 47, type: !116, scopeLine: 47, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)752!116 = !DISubroutineType(types: !117)753!117 = !{!66}754!118 = !DILocation(line: 48, scope: !115)755