From cb99414531493c436f39093ff692fafb6833cb25 Mon Sep 17 00:00:00 2001 From: Robert Widmann Date: Sat, 28 Apr 2018 18:13:39 +0000 Subject: [PATCH] [LLVM-C] Miscellaneous Cleanups in DIBuilder Bindings Summary: * rL328953 does not include bindings for LLVMDIBuilderCreateClassType and LLVMDIBuilderCreateBitFieldMemberType despite declaring their prototypes. Provide these bindings now. * Switch to more precise types with specific numeric limits matching the DIBuilder's C++ API. Reviewers: harlanhaskins, whitequark, deadalnix Reviewed By: whitequark Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D46168 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@331114 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm-c/DebugInfo.h | 75 ++++++++++++++++++++++++++-------------------- lib/IR/DebugInfo.cpp | 68 +++++++++++++++++++++++++++++++---------- 2 files changed, 94 insertions(+), 49 deletions(-) diff --git a/include/llvm-c/DebugInfo.h b/include/llvm-c/DebugInfo.h index 0fc3e4aa0a8..1afea556b5d 100644 --- a/include/llvm-c/DebugInfo.h +++ b/include/llvm-c/DebugInfo.h @@ -362,7 +362,7 @@ LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Builder, LLVMMetadataRef LLVMDIBuilderCreateEnumerationType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, - unsigned SizeInBits, unsigned AlignInBits, LLVMMetadataRef *Elements, + uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef *Elements, unsigned NumElements, LLVMMetadataRef ClassTy); /** @@ -385,7 +385,7 @@ LLVMMetadataRef LLVMDIBuilderCreateEnumerationType( LLVMMetadataRef LLVMDIBuilderCreateUnionType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, - unsigned SizeInBits, unsigned AlignInBits, LLVMDIFlags Flags, + uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags, LLVMMetadataRef *Elements, unsigned NumElements, unsigned RunTimeLang, const char *UniqueId, size_t UniqueIdLen); @@ -400,8 +400,8 @@ LLVMMetadataRef LLVMDIBuilderCreateUnionType( * \param NumSubscripts Number of subscripts. */ LLVMMetadataRef -LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, unsigned Size, - unsigned AlignInBits, LLVMMetadataRef Ty, +LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size, + uint32_t AlignInBits, LLVMMetadataRef Ty, LLVMMetadataRef *Subscripts, unsigned NumSubscripts); @@ -415,8 +415,8 @@ LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, unsigned Size, * \param NumSubscripts Number of subscripts. */ LLVMMetadataRef -LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, unsigned Size, - unsigned AlignInBits, LLVMMetadataRef Ty, +LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size, + uint32_t AlignInBits, LLVMMetadataRef Ty, LLVMMetadataRef *Subscripts, unsigned NumSubscripts); @@ -441,7 +441,7 @@ LLVMDIBuilderCreateUnspecifiedType(LLVMDIBuilderRef Builder, const char *Name, */ LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name, - size_t NameLen, unsigned SizeInBits, + size_t NameLen, uint64_t SizeInBits, LLVMDWARFTypeEncoding Encoding); /** @@ -456,7 +456,7 @@ LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name, */ LLVMMetadataRef LLVMDIBuilderCreatePointerType( LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeTy, - unsigned SizeInBits, unsigned AlignInBits, unsigned AddressSpace, + uint64_t SizeInBits, uint32_t AlignInBits, unsigned AddressSpace, const char *Name, size_t NameLen); /** @@ -480,7 +480,7 @@ LLVMMetadataRef LLVMDIBuilderCreatePointerType( LLVMMetadataRef LLVMDIBuilderCreateStructType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, - unsigned SizeInBits, unsigned AlignInBits, LLVMDIFlags Flags, + uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags, LLVMMetadataRef DerivedFrom, LLVMMetadataRef *Elements, unsigned NumElements, unsigned RunTimeLang, LLVMMetadataRef VTableHolder, const char *UniqueId, size_t UniqueIdLen); @@ -502,7 +502,7 @@ LLVMMetadataRef LLVMDIBuilderCreateStructType( LLVMMetadataRef LLVMDIBuilderCreateMemberType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNo, - unsigned SizeInBits, unsigned AlignInBits, unsigned OffsetInBits, + uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags, LLVMMetadataRef Ty); /** @@ -524,7 +524,7 @@ LLVMDIBuilderCreateStaticMemberType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, LLVMMetadataRef Type, LLVMDIFlags Flags, LLVMValueRef ConstantVal, - unsigned AlignInBits); + uint32_t AlignInBits); /** * Create debugging information entry for a pointer to member. @@ -539,8 +539,8 @@ LLVMMetadataRef LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeType, LLVMMetadataRef ClassType, - unsigned SizeInBits, - unsigned AlignInBits, + uint64_t SizeInBits, + uint32_t AlignInBits, LLVMDIFlags Flags); /** @@ -602,7 +602,7 @@ LLVMDIBuilderCreateNullPtrType(LLVMDIBuilderRef Builder); LLVMMetadataRef LLVMDIBuilderCreateForwardDecl( LLVMDIBuilderRef Builder, unsigned Tag, const char *Name, size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line, - unsigned RuntimeLang, unsigned SizeInBits, unsigned AlignInBits, + unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits, const char *UniqueIdentifier, size_t UniqueIdentifierLen); /** @@ -626,7 +626,7 @@ LLVMMetadataRef LLVMDIBuilderCreateReplaceableCompositeType( LLVMDIBuilderRef Builder, unsigned Tag, const char *Name, size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line, - unsigned RuntimeLang, unsigned SizeInBits, unsigned AlignInBits, + unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags, const char *UniqueIdentifier, size_t UniqueIdentifierLen); @@ -649,32 +649,41 @@ LLVMDIBuilderCreateBitFieldMemberType(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, - unsigned SizeInBits, - unsigned OffsetInBits, - unsigned StorageOffsetInBits, + uint64_t SizeInBits, + uint64_t OffsetInBits, + uint64_t StorageOffsetInBits, LLVMDIFlags Flags, LLVMMetadataRef Type); /** * Create debugging information entry for a class. - * \param Scope Scope in which this class is defined. - * \param Name class name. - * \param File File where this member is defined. - * \param LineNumber Line number. - * \param SizeInBits Member size. - * \param AlignInBits Member alignment. - * \param OffsetInBits Member offset. - * \param Flags Flags to encode member attribute, e.g. private - * \param Elements class members. - * \param NumElements Number of class elements. - * \param DerivedFrom Debug info of the base class of this type. - * \param TemplateParamsNode Template type parameters. + * \param Scope Scope in which this class is defined. + * \param Name Class name. + * \param NameLen The length of the C string passed to \c Name. + * \param File File where this member is defined. + * \param LineNumber Line number. + * \param SizeInBits Member size. + * \param AlignInBits Member alignment. + * \param OffsetInBits Member offset. + * \param Flags Flags to encode member attribute, e.g. private. + * \param DerivedFrom Debug info of the base class of this type. + * \param Elements Class members. + * \param NumElements Number of class elements. + * \param VTableHolder Debug info of the base class that contains vtable + * for this type. This is used in + * DW_AT_containing_type. See DWARF documentation + * for more info. + * \param TemplateParamsNode Template type parameters. + * \param UniqueIdentifier A unique identifier for the type. + * \param UniqueIdentifierLen Length of the unique identifier. */ LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, - LLVMMetadataRef File, unsigned LineNumber, unsigned SizeInBits, - unsigned AlignInBits, unsigned OffsetInBits, LLVMDIFlags Flags, + LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits, + uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags, + LLVMMetadataRef DerivedFrom, LLVMMetadataRef *Elements, unsigned NumElements, - LLVMMetadataRef DerivedFrom, LLVMMetadataRef TemplateParamsNode); + LLVMMetadataRef VTableHolder, LLVMMetadataRef TemplateParamsNode, + const char *UniqueIdentifier, size_t UniqueIdentifierLen); /** * Create a new DIType* with "artificial" flag set. diff --git a/lib/IR/DebugInfo.cpp b/lib/IR/DebugInfo.cpp index d000e15e365..706ca53eafa 100644 --- a/lib/IR/DebugInfo.cpp +++ b/lib/IR/DebugInfo.cpp @@ -839,7 +839,7 @@ LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, unsigned Line, LLVMMetadataRef LLVMDIBuilderCreateEnumerationType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, - unsigned SizeInBits, unsigned AlignInBits, LLVMMetadataRef *Elements, + uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef *Elements, unsigned NumElements, LLVMMetadataRef ClassTy) { auto Elts = unwrap(Builder)->getOrCreateArray({unwrap(Elements), NumElements}); @@ -851,7 +851,7 @@ return wrap(unwrap(Builder)->createEnumerationType( LLVMMetadataRef LLVMDIBuilderCreateUnionType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, - unsigned SizeInBits, unsigned AlignInBits, LLVMDIFlags Flags, + uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags, LLVMMetadataRef *Elements, unsigned NumElements, unsigned RunTimeLang, const char *UniqueId, size_t UniqueIdLen) { auto Elts = unwrap(Builder)->getOrCreateArray({unwrap(Elements), @@ -864,8 +864,8 @@ LLVMMetadataRef LLVMDIBuilderCreateUnionType( LLVMMetadataRef -LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, unsigned Size, - unsigned AlignInBits, LLVMMetadataRef Ty, +LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size, + uint32_t AlignInBits, LLVMMetadataRef Ty, LLVMMetadataRef *Subscripts, unsigned NumSubscripts) { auto Subs = unwrap(Builder)->getOrCreateArray({unwrap(Subscripts), @@ -875,8 +875,8 @@ LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, unsigned Size, } LLVMMetadataRef -LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, unsigned Size, - unsigned AlignInBits, LLVMMetadataRef Ty, +LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size, + uint32_t AlignInBits, LLVMMetadataRef Ty, LLVMMetadataRef *Subscripts, unsigned NumSubscripts) { auto Subs = unwrap(Builder)->getOrCreateArray({unwrap(Subscripts), @@ -887,7 +887,7 @@ LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, unsigned Size, LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name, - size_t NameLen, unsigned SizeInBits, + size_t NameLen, uint64_t SizeInBits, LLVMDWARFTypeEncoding Encoding) { return wrap(unwrap(Builder)->createBasicType({Name, NameLen}, SizeInBits, Encoding)); @@ -895,7 +895,7 @@ LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name, LLVMMetadataRef LLVMDIBuilderCreatePointerType( LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeTy, - unsigned SizeInBits, unsigned AlignInBits, unsigned AddressSpace, + uint64_t SizeInBits, uint32_t AlignInBits, unsigned AddressSpace, const char *Name, size_t NameLen) { return wrap(unwrap(Builder)->createPointerType(unwrapDI(PointeeTy), SizeInBits, AlignInBits, @@ -905,7 +905,7 @@ LLVMMetadataRef LLVMDIBuilderCreatePointerType( LLVMMetadataRef LLVMDIBuilderCreateStructType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, - unsigned SizeInBits, unsigned AlignInBits, LLVMDIFlags Flags, + uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags, LLVMMetadataRef DerivedFrom, LLVMMetadataRef *Elements, unsigned NumElements, unsigned RunTimeLang, LLVMMetadataRef VTableHolder, const char *UniqueId, size_t UniqueIdLen) { @@ -920,8 +920,8 @@ LLVMMetadataRef LLVMDIBuilderCreateStructType( LLVMMetadataRef LLVMDIBuilderCreateMemberType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, - size_t NameLen, LLVMMetadataRef File, unsigned LineNo, unsigned SizeInBits, - unsigned AlignInBits, unsigned OffsetInBits, LLVMDIFlags Flags, + size_t NameLen, LLVMMetadataRef File, unsigned LineNo, uint64_t SizeInBits, + uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags, LLVMMetadataRef Ty) { return wrap(unwrap(Builder)->createMemberType(unwrapDI(Scope), {Name, NameLen}, unwrapDI(File), LineNo, SizeInBits, AlignInBits, @@ -939,7 +939,7 @@ LLVMDIBuilderCreateStaticMemberType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, LLVMMetadataRef Type, LLVMDIFlags Flags, LLVMValueRef ConstantVal, - unsigned AlignInBits) { + uint32_t AlignInBits) { return wrap(unwrap(Builder)->createStaticMemberType( unwrapDI(Scope), {Name, NameLen}, unwrapDI(File), LineNumber, unwrapDI(Type), @@ -957,7 +957,7 @@ LLVMMetadataRef LLVMDIBuilderCreateForwardDecl( LLVMDIBuilderRef Builder, unsigned Tag, const char *Name, size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line, - unsigned RuntimeLang, unsigned SizeInBits, unsigned AlignInBits, + unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits, const char *UniqueIdentifier, size_t UniqueIdentifierLen) { return wrap(unwrap(Builder)->createForwardDecl( Tag, {Name, NameLen}, unwrapDI(Scope), @@ -969,7 +969,7 @@ LLVMMetadataRef LLVMDIBuilderCreateReplaceableCompositeType( LLVMDIBuilderRef Builder, unsigned Tag, const char *Name, size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line, - unsigned RuntimeLang, unsigned SizeInBits, unsigned AlignInBits, + unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags, const char *UniqueIdentifier, size_t UniqueIdentifierLen) { return wrap(unwrap(Builder)->createReplaceableCompositeType( @@ -1002,8 +1002,8 @@ LLVMMetadataRef LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeType, LLVMMetadataRef ClassType, - unsigned SizeInBits, - unsigned AlignInBits, + uint64_t SizeInBits, + uint32_t AlignInBits, LLVMDIFlags Flags) { return wrap(unwrap(Builder)->createMemberPointerType( unwrapDI(PointeeType), @@ -1012,6 +1012,42 @@ LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder, } LLVMMetadataRef +LLVMDIBuilderCreateBitFieldMemberType(LLVMDIBuilderRef Builder, + LLVMMetadataRef Scope, + const char *Name, size_t NameLen, + LLVMMetadataRef File, unsigned LineNumber, + uint64_t SizeInBits, + uint64_t OffsetInBits, + uint64_t StorageOffsetInBits, + LLVMDIFlags Flags, LLVMMetadataRef Type) { + return wrap(unwrap(Builder)->createBitFieldMemberType( + unwrapDI(Scope), {Name, NameLen}, + unwrapDI(File), LineNumber, + SizeInBits, OffsetInBits, StorageOffsetInBits, + map_from_llvmDIFlags(Flags), unwrapDI(Type))); +} + +LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder, + LLVMMetadataRef Scope, const char *Name, size_t NameLen, + LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits, + uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags, + LLVMMetadataRef DerivedFrom, + LLVMMetadataRef *Elements, unsigned NumElements, + LLVMMetadataRef VTableHolder, LLVMMetadataRef TemplateParamsNode, + const char *UniqueIdentifier, size_t UniqueIdentifierLen) { + auto Elts = unwrap(Builder)->getOrCreateArray({unwrap(Elements), + NumElements}); + return wrap(unwrap(Builder)->createClassType( + unwrapDI(Scope), {Name, NameLen}, + unwrapDI(File), LineNumber, + SizeInBits, AlignInBits, OffsetInBits, + map_from_llvmDIFlags(Flags), unwrapDI(DerivedFrom), + Elts, unwrapDI(VTableHolder), + unwrapDI(TemplateParamsNode), + {UniqueIdentifier, UniqueIdentifierLen})); +} + +LLVMMetadataRef LLVMDIBuilderCreateArtificialType(LLVMDIBuilderRef Builder, LLVMMetadataRef Type) { return wrap(unwrap(Builder)->createArtificialType(unwrapDI(Type))); -- 2.11.0