diff options
Diffstat (limited to 'bindings/go/llvm/DIBuilderBindings.cpp')
-rw-r--r-- | bindings/go/llvm/DIBuilderBindings.cpp | 131 |
1 files changed, 66 insertions, 65 deletions
diff --git a/bindings/go/llvm/DIBuilderBindings.cpp b/bindings/go/llvm/DIBuilderBindings.cpp index 5671866d4d09b..df5885de25c49 100644 --- a/bindings/go/llvm/DIBuilderBindings.cpp +++ b/bindings/go/llvm/DIBuilderBindings.cpp @@ -12,22 +12,15 @@ //===----------------------------------------------------------------------===// #include "DIBuilderBindings.h" - #include "IRBindings.h" +#include "llvm/IR/DIBuilder.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/Module.h" -#include "llvm/IR/DIBuilder.h" using namespace llvm; DEFINE_SIMPLE_CONVERSION_FUNCTIONS(DIBuilder, LLVMDIBuilderRef) -namespace { -template <typename T> T unwrapDI(LLVMMetadataRef v) { - return v ? T(unwrap<MDNode>(v)) : T(); -} -} - LLVMDIBuilderRef LLVMNewDIBuilder(LLVMModuleRef mref) { Module *m = unwrap(mref); return wrap(new DIBuilder(*m)); @@ -47,16 +40,14 @@ LLVMMetadataRef LLVMDIBuilderCreateCompileUnit(LLVMDIBuilderRef Dref, int Optimized, const char *Flags, unsigned RuntimeVersion) { DIBuilder *D = unwrap(Dref); - DICompileUnit CU = D->createCompileUnit(Lang, File, Dir, Producer, Optimized, - Flags, RuntimeVersion); - return wrap(CU); + return wrap(D->createCompileUnit(Lang, File, Dir, Producer, Optimized, Flags, + RuntimeVersion)); } LLVMMetadataRef LLVMDIBuilderCreateFile(LLVMDIBuilderRef Dref, const char *File, const char *Dir) { DIBuilder *D = unwrap(Dref); - DIFile F = D->createFile(File, Dir); - return wrap(F); + return wrap(D->createFile(File, Dir)); } LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(LLVMDIBuilderRef Dref, @@ -65,8 +56,8 @@ LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(LLVMDIBuilderRef Dref, unsigned Line, unsigned Column) { DIBuilder *D = unwrap(Dref); - DILexicalBlock LB = D->createLexicalBlock( - unwrapDI<DIDescriptor>(Scope), unwrapDI<DIFile>(File), Line, Column); + auto *LB = D->createLexicalBlock(unwrap<DILocalScope>(Scope), + unwrap<DIFile>(File), Line, Column); return wrap(LB); } @@ -75,9 +66,8 @@ LLVMMetadataRef LLVMDIBuilderCreateLexicalBlockFile(LLVMDIBuilderRef Dref, LLVMMetadataRef File, unsigned Discriminator) { DIBuilder *D = unwrap(Dref); - DILexicalBlockFile LBF = D->createLexicalBlockFile( - unwrapDI<DIDescriptor>(Scope), unwrapDI<DIFile>(File), Discriminator); - return wrap(LBF); + return wrap(D->createLexicalBlockFile(unwrap<DILocalScope>(Scope), + unwrap<DIFile>(File), Discriminator)); } LLVMMetadataRef LLVMDIBuilderCreateFunction( @@ -86,11 +76,11 @@ LLVMMetadataRef LLVMDIBuilderCreateFunction( LLVMMetadataRef CompositeType, int IsLocalToUnit, int IsDefinition, unsigned ScopeLine, unsigned Flags, int IsOptimized, LLVMValueRef Func) { DIBuilder *D = unwrap(Dref); - DISubprogram SP = D->createFunction( - unwrapDI<DIDescriptor>(Scope), Name, LinkageName, unwrapDI<DIFile>(File), - Line, unwrapDI<DICompositeType>(CompositeType), IsLocalToUnit, - IsDefinition, ScopeLine, Flags, IsOptimized, unwrap<Function>(Func)); - return wrap(SP); + return wrap(D->createFunction(unwrap<DIScope>(Scope), Name, LinkageName, + File ? unwrap<DIFile>(File) : nullptr, Line, + unwrap<DISubroutineType>(CompositeType), + IsLocalToUnit, IsDefinition, ScopeLine, Flags, + IsOptimized, unwrap<Function>(Func))); } LLVMMetadataRef LLVMDIBuilderCreateLocalVariable( @@ -98,10 +88,9 @@ LLVMMetadataRef LLVMDIBuilderCreateLocalVariable( const char *Name, LLVMMetadataRef File, unsigned Line, LLVMMetadataRef Ty, int AlwaysPreserve, unsigned Flags, unsigned ArgNo) { DIBuilder *D = unwrap(Dref); - DIVariable V = D->createLocalVariable( - Tag, unwrapDI<DIDescriptor>(Scope), Name, unwrapDI<DIFile>(File), Line, - unwrapDI<DIType>(Ty), AlwaysPreserve, Flags, ArgNo); - return wrap(V); + return wrap(D->createLocalVariable( + Tag, unwrap<DIScope>(Scope), Name, unwrap<DIFile>(File), Line, + unwrap<DIType>(Ty), AlwaysPreserve, Flags, ArgNo)); } LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Dref, @@ -110,8 +99,7 @@ LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Dref, uint64_t AlignInBits, unsigned Encoding) { DIBuilder *D = unwrap(Dref); - DIBasicType T = D->createBasicType(Name, SizeInBits, AlignInBits, Encoding); - return wrap(T); + return wrap(D->createBasicType(Name, SizeInBits, AlignInBits, Encoding)); } LLVMMetadataRef LLVMDIBuilderCreatePointerType(LLVMDIBuilderRef Dref, @@ -120,18 +108,17 @@ LLVMMetadataRef LLVMDIBuilderCreatePointerType(LLVMDIBuilderRef Dref, uint64_t AlignInBits, const char *Name) { DIBuilder *D = unwrap(Dref); - DIDerivedType T = D->createPointerType(unwrapDI<DIType>(PointeeType), - SizeInBits, AlignInBits, Name); - return wrap(T); + return wrap(D->createPointerType(unwrap<DIType>(PointeeType), SizeInBits, + AlignInBits, Name)); } LLVMMetadataRef LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Dref, LLVMMetadataRef File, LLVMMetadataRef ParameterTypes) { DIBuilder *D = unwrap(Dref); - DICompositeType CT = D->createSubroutineType( - unwrapDI<DIFile>(File), unwrapDI<DITypeArray>(ParameterTypes)); - return wrap(CT); + return wrap( + D->createSubroutineType(File ? unwrap<DIFile>(File) : nullptr, + DITypeRefArray(unwrap<MDTuple>(ParameterTypes)))); } LLVMMetadataRef LLVMDIBuilderCreateStructType( @@ -140,11 +127,22 @@ LLVMMetadataRef LLVMDIBuilderCreateStructType( uint64_t AlignInBits, unsigned Flags, LLVMMetadataRef DerivedFrom, LLVMMetadataRef ElementTypes) { DIBuilder *D = unwrap(Dref); - DICompositeType CT = D->createStructType( - unwrapDI<DIDescriptor>(Scope), Name, unwrapDI<DIFile>(File), Line, - SizeInBits, AlignInBits, Flags, unwrapDI<DIType>(DerivedFrom), - unwrapDI<DIArray>(ElementTypes)); - return wrap(CT); + return wrap(D->createStructType( + unwrap<DIScope>(Scope), Name, File ? unwrap<DIFile>(File) : nullptr, Line, + SizeInBits, AlignInBits, Flags, + DerivedFrom ? unwrap<DIType>(DerivedFrom) : nullptr, + ElementTypes ? DINodeArray(unwrap<MDTuple>(ElementTypes)) : nullptr)); +} + +LLVMMetadataRef LLVMDIBuilderCreateReplaceableCompositeType( + LLVMDIBuilderRef Dref, unsigned Tag, const char *Name, + LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line, + unsigned RuntimeLang, uint64_t SizeInBits, uint64_t AlignInBits, + unsigned Flags) { + DIBuilder *D = unwrap(Dref); + return wrap(D->createReplaceableCompositeType( + Tag, Name, unwrap<DIScope>(Scope), File ? unwrap<DIFile>(File) : nullptr, + Line, RuntimeLang, SizeInBits, AlignInBits, Flags)); } LLVMMetadataRef @@ -154,10 +152,9 @@ LLVMDIBuilderCreateMemberType(LLVMDIBuilderRef Dref, LLVMMetadataRef Scope, uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, LLVMMetadataRef Ty) { DIBuilder *D = unwrap(Dref); - DIDerivedType DT = D->createMemberType( - unwrapDI<DIDescriptor>(Scope), Name, unwrapDI<DIFile>(File), Line, - SizeInBits, AlignInBits, OffsetInBits, Flags, unwrapDI<DIType>(Ty)); - return wrap(DT); + return wrap(D->createMemberType( + unwrap<DIScope>(Scope), Name, File ? unwrap<DIFile>(File) : nullptr, Line, + SizeInBits, AlignInBits, OffsetInBits, Flags, unwrap<DIType>(Ty))); } LLVMMetadataRef LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Dref, @@ -166,10 +163,9 @@ LLVMMetadataRef LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Dref, LLVMMetadataRef ElementType, LLVMMetadataRef Subscripts) { DIBuilder *D = unwrap(Dref); - DICompositeType CT = - D->createArrayType(SizeInBits, AlignInBits, unwrapDI<DIType>(ElementType), - unwrapDI<DIArray>(Subscripts)); - return wrap(CT); + return wrap(D->createArrayType(SizeInBits, AlignInBits, + unwrap<DIType>(ElementType), + DINodeArray(unwrap<MDTuple>(Subscripts)))); } LLVMMetadataRef LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Dref, @@ -177,17 +173,15 @@ LLVMMetadataRef LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Dref, LLVMMetadataRef File, unsigned Line, LLVMMetadataRef Context) { DIBuilder *D = unwrap(Dref); - DIDerivedType DT = - D->createTypedef(unwrapDI<DIType>(Ty), Name, unwrapDI<DIFile>(File), Line, - unwrapDI<DIDescriptor>(Context)); - return wrap(DT); + return wrap(D->createTypedef(unwrap<DIType>(Ty), Name, + File ? unwrap<DIFile>(File) : nullptr, Line, + Context ? unwrap<DIScope>(Context) : nullptr)); } LLVMMetadataRef LLVMDIBuilderGetOrCreateSubrange(LLVMDIBuilderRef Dref, int64_t Lo, int64_t Count) { DIBuilder *D = unwrap(Dref); - DISubrange S = D->getOrCreateSubrange(Lo, Count); - return wrap(S); + return wrap(D->getOrCreateSubrange(Lo, Count)); } LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(LLVMDIBuilderRef Dref, @@ -196,8 +190,8 @@ LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(LLVMDIBuilderRef Dref, DIBuilder *D = unwrap(Dref); Metadata **DataValue = unwrap(Data); ArrayRef<Metadata *> Elements(DataValue, Length); - DIArray A = D->getOrCreateArray(Elements); - return wrap(A); + DINodeArray A = D->getOrCreateArray(Elements); + return wrap(A.get()); } LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef Dref, @@ -206,15 +200,14 @@ LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef Dref, DIBuilder *D = unwrap(Dref); Metadata **DataValue = unwrap(Data); ArrayRef<Metadata *> Elements(DataValue, Length); - DITypeArray A = D->getOrCreateTypeArray(Elements); - return wrap(A); + DITypeRefArray A = D->getOrCreateTypeArray(Elements); + return wrap(A.get()); } LLVMMetadataRef LLVMDIBuilderCreateExpression(LLVMDIBuilderRef Dref, int64_t *Addr, size_t Length) { DIBuilder *D = unwrap(Dref); - DIExpression Expr = D->createExpression(ArrayRef<int64_t>(Addr, Length)); - return wrap(Expr); + return wrap(D->createExpression(ArrayRef<int64_t>(Addr, Length))); } LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(LLVMDIBuilderRef Dref, @@ -222,10 +215,14 @@ LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(LLVMDIBuilderRef Dref, LLVMMetadataRef VarInfo, LLVMMetadataRef Expr, LLVMBasicBlockRef Block) { + // Fail immediately here until the llgo folks update their bindings. The + // called function is going to assert out anyway. + llvm_unreachable("DIBuilder API change requires a DebugLoc"); + DIBuilder *D = unwrap(Dref); - Instruction *Instr = - D->insertDeclare(unwrap(Storage), unwrapDI<DIVariable>(VarInfo), - unwrapDI<DIExpression>(Expr), unwrap(Block)); + Instruction *Instr = D->insertDeclare( + unwrap(Storage), unwrap<DILocalVariable>(VarInfo), + unwrap<DIExpression>(Expr), /* DebugLoc */ nullptr, unwrap(Block)); return wrap(Instr); } @@ -234,9 +231,13 @@ LLVMValueRef LLVMDIBuilderInsertValueAtEnd(LLVMDIBuilderRef Dref, LLVMMetadataRef VarInfo, LLVMMetadataRef Expr, LLVMBasicBlockRef Block) { + // Fail immediately here until the llgo folks update their bindings. The + // called function is going to assert out anyway. + llvm_unreachable("DIBuilder API change requires a DebugLoc"); + DIBuilder *D = unwrap(Dref); Instruction *Instr = D->insertDbgValueIntrinsic( - unwrap(Val), Offset, unwrapDI<DIVariable>(VarInfo), - unwrapDI<DIExpression>(Expr), unwrap(Block)); + unwrap(Val), Offset, unwrap<DILocalVariable>(VarInfo), + unwrap<DIExpression>(Expr), /* DebugLoc */ nullptr, unwrap(Block)); return wrap(Instr); } |