From 8a76ab6eaa3b34c89b0864d257678f9b94983acb Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Thu, 19 Feb 2015 23:56:07 +0000 Subject: [PATCH] IR: Fix MDType fields from unsigned to uint64_t When trying to match the current schema with the new debug info hierarchy, I downgraded `SizeInBits`, `AlignInBits` and `OffsetInBits` to 32-bits (oops!). Caught this while testing my upgrade script to move the hierarchy into place. Bump it back up to 64-bits and update tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229933 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/DebugInfoMetadata.h | 85 ++++++++++++++------------- lib/AsmParser/LLParser.cpp | 16 ++--- lib/IR/DebugInfoMetadata.cpp | 12 ++-- lib/IR/LLVMContextImpl.h | 28 ++++----- test/Assembler/mdtype-large-values.ll | 12 ++++ unittests/IR/MetadataTest.cpp | 59 +++++++++++++++++-- 6 files changed, 136 insertions(+), 76 deletions(-) create mode 100644 test/Assembler/mdtype-large-values.ll diff --git a/include/llvm/IR/DebugInfoMetadata.h b/include/llvm/IR/DebugInfoMetadata.h index 99d2476a608..a2a4666d897 100644 --- a/include/llvm/IR/DebugInfoMetadata.h +++ b/include/llvm/IR/DebugInfoMetadata.h @@ -358,24 +358,25 @@ public: /// TODO: Split up flags. class MDType : public MDScope { unsigned Line; - unsigned SizeInBits; - unsigned AlignInBits; - unsigned OffsetInBits; unsigned Flags; + uint64_t SizeInBits; + uint64_t AlignInBits; + uint64_t OffsetInBits; protected: MDType(LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag, - unsigned Line, unsigned SizeInBits, unsigned AlignInBits, - unsigned OffsetInBits, unsigned Flags, ArrayRef Ops) - : MDScope(C, ID, Storage, Tag, Ops), Line(Line), SizeInBits(SizeInBits), - AlignInBits(AlignInBits), OffsetInBits(OffsetInBits), Flags(Flags) {} + unsigned Line, uint64_t SizeInBits, uint64_t AlignInBits, + uint64_t OffsetInBits, unsigned Flags, ArrayRef Ops) + : MDScope(C, ID, Storage, Tag, Ops), Line(Line), Flags(Flags), + SizeInBits(SizeInBits), AlignInBits(AlignInBits), + OffsetInBits(OffsetInBits) {} ~MDType() {} public: unsigned getLine() const { return Line; } - unsigned getSizeInBits() const { return SizeInBits; } - unsigned getAlignInBits() const { return AlignInBits; } - unsigned getOffsetInBits() const { return OffsetInBits; } + uint64_t getSizeInBits() const { return SizeInBits; } + uint64_t getAlignInBits() const { return AlignInBits; } + uint64_t getOffsetInBits() const { return OffsetInBits; } unsigned getFlags() const { return Flags; } Metadata *getScope() const { return getOperand(1); } @@ -407,7 +408,7 @@ class MDBasicType : public MDType { unsigned Encoding; MDBasicType(LLVMContext &C, StorageType Storage, unsigned Tag, - unsigned SizeInBits, unsigned AlignInBits, unsigned Encoding, + uint64_t SizeInBits, uint64_t AlignInBits, unsigned Encoding, ArrayRef Ops) : MDType(C, MDBasicTypeKind, Storage, Tag, 0, SizeInBits, AlignInBits, 0, 0, Ops), @@ -415,15 +416,15 @@ class MDBasicType : public MDType { ~MDBasicType() {} static MDBasicType *getImpl(LLVMContext &Context, unsigned Tag, - StringRef Name, unsigned SizeInBits, - unsigned AlignInBits, unsigned Encoding, + StringRef Name, uint64_t SizeInBits, + uint64_t AlignInBits, unsigned Encoding, StorageType Storage, bool ShouldCreate = true) { return getImpl(Context, Tag, getCanonicalMDString(Context, Name), SizeInBits, AlignInBits, Encoding, Storage, ShouldCreate); } static MDBasicType *getImpl(LLVMContext &Context, unsigned Tag, - MDString *Name, unsigned SizeInBits, - unsigned AlignInBits, unsigned Encoding, + MDString *Name, uint64_t SizeInBits, + uint64_t AlignInBits, unsigned Encoding, StorageType Storage, bool ShouldCreate = true); TempMDBasicType cloneImpl() const { @@ -433,12 +434,12 @@ class MDBasicType : public MDType { public: DEFINE_MDNODE_GET(MDBasicType, - (unsigned Tag, StringRef Name, unsigned SizeInBits, - unsigned AlignInBits, unsigned Encoding), + (unsigned Tag, StringRef Name, uint64_t SizeInBits, + uint64_t AlignInBits, unsigned Encoding), (Tag, Name, SizeInBits, AlignInBits, Encoding)) DEFINE_MDNODE_GET(MDBasicType, - (unsigned Tag, MDString *Name, unsigned SizeInBits, - unsigned AlignInBits, unsigned Encoding), + (unsigned Tag, MDString *Name, uint64_t SizeInBits, + uint64_t AlignInBits, unsigned Encoding), (Tag, Name, SizeInBits, AlignInBits, Encoding)) TempMDBasicType clone() const { return cloneImpl(); } @@ -456,8 +457,8 @@ public: class MDDerivedTypeBase : public MDType { protected: MDDerivedTypeBase(LLVMContext &C, unsigned ID, StorageType Storage, - unsigned Tag, unsigned Line, unsigned SizeInBits, - unsigned AlignInBits, unsigned OffsetInBits, unsigned Flags, + unsigned Tag, unsigned Line, uint64_t SizeInBits, + uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, ArrayRef Ops) : MDType(C, ID, Storage, Tag, Line, SizeInBits, AlignInBits, OffsetInBits, Flags, Ops) {} @@ -484,8 +485,8 @@ class MDDerivedType : public MDDerivedTypeBase { friend class MDNode; MDDerivedType(LLVMContext &C, StorageType Storage, unsigned Tag, - unsigned Line, unsigned SizeInBits, unsigned AlignInBits, - unsigned OffsetInBits, unsigned Flags, ArrayRef Ops) + unsigned Line, uint64_t SizeInBits, uint64_t AlignInBits, + uint64_t OffsetInBits, unsigned Flags, ArrayRef Ops) : MDDerivedTypeBase(C, MDDerivedTypeKind, Storage, Tag, Line, SizeInBits, AlignInBits, OffsetInBits, Flags, Ops) {} ~MDDerivedType() {} @@ -493,8 +494,8 @@ class MDDerivedType : public MDDerivedTypeBase { static MDDerivedType *getImpl(LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, - unsigned SizeInBits, unsigned AlignInBits, - unsigned OffsetInBits, unsigned Flags, + uint64_t SizeInBits, uint64_t AlignInBits, + uint64_t OffsetInBits, unsigned Flags, Metadata *ExtraData, StorageType Storage, bool ShouldCreate = true) { return getImpl(Context, Tag, getCanonicalMDString(Context, Name), File, @@ -504,8 +505,8 @@ class MDDerivedType : public MDDerivedTypeBase { static MDDerivedType *getImpl(LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, - unsigned SizeInBits, unsigned AlignInBits, - unsigned OffsetInBits, unsigned Flags, + uint64_t SizeInBits, uint64_t AlignInBits, + uint64_t OffsetInBits, unsigned Flags, Metadata *ExtraData, StorageType Storage, bool ShouldCreate = true); @@ -520,16 +521,16 @@ public: DEFINE_MDNODE_GET(MDDerivedType, (unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, - unsigned SizeInBits, unsigned AlignInBits, - unsigned OffsetInBits, unsigned Flags, + uint64_t SizeInBits, uint64_t AlignInBits, + uint64_t OffsetInBits, unsigned Flags, Metadata *ExtraData = nullptr), (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits, Flags, ExtraData)) DEFINE_MDNODE_GET(MDDerivedType, (unsigned Tag, StringRef Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, - unsigned SizeInBits, unsigned AlignInBits, - unsigned OffsetInBits, unsigned Flags, + uint64_t SizeInBits, uint64_t AlignInBits, + uint64_t OffsetInBits, unsigned Flags, Metadata *ExtraData = nullptr), (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits, Flags, ExtraData)) @@ -559,8 +560,8 @@ class MDCompositeTypeBase : public MDDerivedTypeBase { protected: MDCompositeTypeBase(LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag, unsigned Line, unsigned RuntimeLang, - unsigned SizeInBits, unsigned AlignInBits, - unsigned OffsetInBits, unsigned Flags, + uint64_t SizeInBits, uint64_t AlignInBits, + uint64_t OffsetInBits, unsigned Flags, ArrayRef Ops) : MDDerivedTypeBase(C, ID, Storage, Tag, Line, SizeInBits, AlignInBits, OffsetInBits, Flags, Ops), @@ -614,8 +615,8 @@ class MDCompositeType : public MDCompositeTypeBase { friend class MDNode; MDCompositeType(LLVMContext &C, StorageType Storage, unsigned Tag, - unsigned Line, unsigned RuntimeLang, unsigned SizeInBits, - unsigned AlignInBits, unsigned OffsetInBits, unsigned Flags, + unsigned Line, unsigned RuntimeLang, uint64_t SizeInBits, + uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, ArrayRef Ops) : MDCompositeTypeBase(C, MDCompositeTypeKind, Storage, Tag, Line, RuntimeLang, SizeInBits, AlignInBits, OffsetInBits, @@ -625,8 +626,8 @@ class MDCompositeType : public MDCompositeTypeBase { static MDCompositeType * getImpl(LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, - unsigned SizeInBits, unsigned AlignInBits, unsigned OffsetInBits, - unsigned Flags, Metadata *Elements, unsigned RuntimeLang, + uint64_t SizeInBits, uint64_t AlignInBits, uint64_t OffsetInBits, + uint64_t Flags, Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams, StringRef Identifier, StorageType Storage, bool ShouldCreate = true) { return getImpl(Context, Tag, getCanonicalMDString(Context, Name), File, @@ -638,7 +639,7 @@ class MDCompositeType : public MDCompositeTypeBase { static MDCompositeType * getImpl(LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, - unsigned SizeInBits, unsigned AlignInBits, unsigned OffsetInBits, + uint64_t SizeInBits, uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams, MDString *Identifier, StorageType Storage, bool ShouldCreate = true); @@ -655,8 +656,8 @@ public: DEFINE_MDNODE_GET(MDCompositeType, (unsigned Tag, StringRef Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, - unsigned SizeInBits, unsigned AlignInBits, - unsigned OffsetInBits, unsigned Flags, Metadata *Elements, + uint64_t SizeInBits, uint64_t AlignInBits, + uint64_t OffsetInBits, unsigned Flags, Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams = nullptr, StringRef Identifier = ""), @@ -666,8 +667,8 @@ public: DEFINE_MDNODE_GET(MDCompositeType, (unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, - unsigned SizeInBits, unsigned AlignInBits, - unsigned OffsetInBits, unsigned Flags, Metadata *Elements, + uint64_t SizeInBits, uint64_t AlignInBits, + uint64_t OffsetInBits, unsigned Flags, Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams = nullptr, MDString *Identifier = nullptr), diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index 1ea06163c9e..28b8d22e579 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -3304,8 +3304,8 @@ bool LLParser::ParseMDBasicType(MDNode *&Result, bool IsDistinct) { #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ REQUIRED(tag, DwarfTagField, ); \ OPTIONAL(name, MDStringField, ); \ - OPTIONAL(size, MDUnsignedField, (0, UINT32_MAX)); \ - OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX)); \ + OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \ + OPTIONAL(align, MDUnsignedField, (0, UINT64_MAX)); \ OPTIONAL(encoding, DwarfAttEncodingField, ); PARSE_MD_FIELDS(); #undef VISIT_MD_FIELDS @@ -3327,9 +3327,9 @@ bool LLParser::ParseMDDerivedType(MDNode *&Result, bool IsDistinct) { OPTIONAL(line, LineField, ); \ OPTIONAL(scope, MDField, ); \ REQUIRED(baseType, MDField, ); \ - OPTIONAL(size, MDUnsignedField, (0, UINT32_MAX)); \ - OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX)); \ - OPTIONAL(offset, MDUnsignedField, (0, UINT32_MAX)); \ + OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \ + OPTIONAL(align, MDUnsignedField, (0, UINT64_MAX)); \ + OPTIONAL(offset, MDUnsignedField, (0, UINT64_MAX)); \ OPTIONAL(flags, MDUnsignedField, (0, UINT32_MAX)); \ OPTIONAL(extraData, MDField, ); PARSE_MD_FIELDS(); @@ -3350,9 +3350,9 @@ bool LLParser::ParseMDCompositeType(MDNode *&Result, bool IsDistinct) { OPTIONAL(line, LineField, ); \ OPTIONAL(scope, MDField, ); \ OPTIONAL(baseType, MDField, ); \ - OPTIONAL(size, MDUnsignedField, (0, UINT32_MAX)); \ - OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX)); \ - OPTIONAL(offset, MDUnsignedField, (0, UINT32_MAX)); \ + OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \ + OPTIONAL(align, MDUnsignedField, (0, UINT64_MAX)); \ + OPTIONAL(offset, MDUnsignedField, (0, UINT64_MAX)); \ OPTIONAL(flags, MDUnsignedField, (0, UINT32_MAX)); \ OPTIONAL(elements, MDField, ); \ OPTIONAL(runtimeLang, DwarfLangField, ); \ diff --git a/lib/IR/DebugInfoMetadata.cpp b/lib/IR/DebugInfoMetadata.cpp index a2f5d55c3c6..83c816d18ae 100644 --- a/lib/IR/DebugInfoMetadata.cpp +++ b/lib/IR/DebugInfoMetadata.cpp @@ -148,8 +148,8 @@ MDEnumerator *MDEnumerator::getImpl(LLVMContext &Context, int64_t Value, } MDBasicType *MDBasicType::getImpl(LLVMContext &Context, unsigned Tag, - MDString *Name, unsigned SizeInBits, - unsigned AlignInBits, unsigned Encoding, + MDString *Name, uint64_t SizeInBits, + uint64_t AlignInBits, unsigned Encoding, StorageType Storage, bool ShouldCreate) { assert(isCanonical(Name) && "Expected canonical MDString"); DEFINE_GETIMPL_LOOKUP( @@ -161,8 +161,8 @@ MDBasicType *MDBasicType::getImpl(LLVMContext &Context, unsigned Tag, MDDerivedType *MDDerivedType::getImpl( LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File, - unsigned Line, Metadata *Scope, Metadata *BaseType, unsigned SizeInBits, - unsigned AlignInBits, unsigned OffsetInBits, unsigned Flags, + unsigned Line, Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, + uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, Metadata *ExtraData, StorageType Storage, bool ShouldCreate) { assert(isCanonical(Name) && "Expected canonical MDString"); DEFINE_GETIMPL_LOOKUP(MDDerivedType, (Tag, getString(Name), File, Line, Scope, @@ -176,8 +176,8 @@ MDDerivedType *MDDerivedType::getImpl( MDCompositeType *MDCompositeType::getImpl( LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File, - unsigned Line, Metadata *Scope, Metadata *BaseType, unsigned SizeInBits, - unsigned AlignInBits, unsigned OffsetInBits, unsigned Flags, + unsigned Line, Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, + uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams, MDString *Identifier, StorageType Storage, bool ShouldCreate) { diff --git a/lib/IR/LLVMContextImpl.h b/lib/IR/LLVMContextImpl.h index 3c61c06b81a..4631246d77a 100644 --- a/lib/IR/LLVMContextImpl.h +++ b/lib/IR/LLVMContextImpl.h @@ -303,12 +303,12 @@ template <> struct MDNodeKeyImpl { template <> struct MDNodeKeyImpl { unsigned Tag; StringRef Name; - unsigned SizeInBits; - unsigned AlignInBits; + uint64_t SizeInBits; + uint64_t AlignInBits; unsigned Encoding; - MDNodeKeyImpl(unsigned Tag, StringRef Name, unsigned SizeInBits, - unsigned AlignInBits, unsigned Encoding) + MDNodeKeyImpl(unsigned Tag, StringRef Name, uint64_t SizeInBits, + uint64_t AlignInBits, unsigned Encoding) : Tag(Tag), Name(Name), SizeInBits(SizeInBits), AlignInBits(AlignInBits), Encoding(Encoding) {} MDNodeKeyImpl(const MDBasicType *N) @@ -333,15 +333,15 @@ template <> struct MDNodeKeyImpl { unsigned Line; Metadata *Scope; Metadata *BaseType; - unsigned SizeInBits; - unsigned AlignInBits; - unsigned OffsetInBits; + uint64_t SizeInBits; + uint64_t AlignInBits; + uint64_t OffsetInBits; unsigned Flags; Metadata *ExtraData; MDNodeKeyImpl(unsigned Tag, StringRef Name, Metadata *File, unsigned Line, - Metadata *Scope, Metadata *BaseType, unsigned SizeInBits, - unsigned AlignInBits, unsigned OffsetInBits, unsigned Flags, + Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, + uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, Metadata *ExtraData) : Tag(Tag), Name(Name), File(File), Line(Line), Scope(Scope), BaseType(BaseType), SizeInBits(SizeInBits), AlignInBits(AlignInBits), @@ -375,9 +375,9 @@ template <> struct MDNodeKeyImpl { unsigned Line; Metadata *Scope; Metadata *BaseType; - unsigned SizeInBits; - unsigned AlignInBits; - unsigned OffsetInBits; + uint64_t SizeInBits; + uint64_t AlignInBits; + uint64_t OffsetInBits; unsigned Flags; Metadata *Elements; unsigned RuntimeLang; @@ -386,8 +386,8 @@ template <> struct MDNodeKeyImpl { StringRef Identifier; MDNodeKeyImpl(unsigned Tag, StringRef Name, Metadata *File, unsigned Line, - Metadata *Scope, Metadata *BaseType, unsigned SizeInBits, - unsigned AlignInBits, unsigned OffsetInBits, unsigned Flags, + Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, + uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams, StringRef Identifier) diff --git a/test/Assembler/mdtype-large-values.ll b/test/Assembler/mdtype-large-values.ll new file mode 100644 index 00000000000..287e8627c20 --- /dev/null +++ b/test/Assembler/mdtype-large-values.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s +; RUN: verify-uselistorder %s + +; CHECK: !named = !{!0, !1, !2} +!named = !{!0, !1, !2} + +; CHECK: !0 = !MDBasicType(tag: DW_TAG_base_type, name: "name", size: 18446744073709551615, align: 18446744073709551614, encoding: DW_ATE_unsigned_char) +; CHECK-NEXT: !1 = !MDDerivedType(tag: DW_TAG_pointer_type, baseType: !0, size: 18446744073709551615, align: 18446744073709551614, offset: 18446744073709551613) +; CHECK-NEXT: !2 = !MDCompositeType(tag: DW_TAG_array_type, baseType: !0, size: 18446744073709551615, align: 18446744073709551614, offset: 18446744073709551613) +!0 = !MDBasicType(tag: DW_TAG_base_type, name: "name", size: 18446744073709551615, align: 18446744073709551614, encoding: DW_ATE_unsigned_char) +!1 = !MDDerivedType(tag: DW_TAG_pointer_type, baseType: !0, size: 18446744073709551615, align: 18446744073709551614, offset: 18446744073709551613) +!2 = !MDCompositeType(tag: DW_TAG_array_type, baseType: !0, size: 18446744073709551615, align: 18446744073709551614, offset: 18446744073709551613) diff --git a/unittests/IR/MetadataTest.cpp b/unittests/IR/MetadataTest.cpp index 0c1ef82205e..849616b6af3 100644 --- a/unittests/IR/MetadataTest.cpp +++ b/unittests/IR/MetadataTest.cpp @@ -723,6 +723,13 @@ TEST_F(MDBasicTypeTest, get) { EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp))); } +TEST_F(MDBasicTypeTest, getWithLargeValues) { + auto *N = MDBasicType::get(Context, dwarf::DW_TAG_base_type, "special", + UINT64_MAX, UINT64_MAX - 1, 7); + EXPECT_EQ(UINT64_MAX, N->getSizeInBits()); + EXPECT_EQ(UINT64_MAX - 1, N->getAlignInBits()); +} + typedef MetadataTest MDDerivedTypeTest; TEST_F(MDDerivedTypeTest, get) { @@ -786,6 +793,20 @@ TEST_F(MDDerivedTypeTest, get) { EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp))); } +TEST_F(MDDerivedTypeTest, getWithLargeValues) { + Metadata *File = MDTuple::getDistinct(Context, None); + Metadata *Scope = MDTuple::getDistinct(Context, None); + Metadata *BaseType = MDTuple::getDistinct(Context, None); + Metadata *ExtraData = MDTuple::getDistinct(Context, None); + + auto *N = MDDerivedType::get(Context, dwarf::DW_TAG_pointer_type, "something", + File, 1, Scope, BaseType, UINT64_MAX, + UINT64_MAX - 1, UINT64_MAX - 2, 5, ExtraData); + EXPECT_EQ(UINT64_MAX, N->getSizeInBits()); + EXPECT_EQ(UINT64_MAX - 1, N->getAlignInBits()); + EXPECT_EQ(UINT64_MAX - 2, N->getOffsetInBits()); +} + typedef MetadataTest MDCompositeTypeTest; TEST_F(MDCompositeTypeTest, get) { @@ -795,9 +816,9 @@ TEST_F(MDCompositeTypeTest, get) { unsigned Line = 1; Metadata *Scope = MDTuple::getDistinct(Context, None); Metadata *BaseType = MDTuple::getDistinct(Context, None); - unsigned SizeInBits = 2; - unsigned AlignInBits = 3; - unsigned OffsetInBits = 4; + uint64_t SizeInBits = 2; + uint64_t AlignInBits = 3; + uint64_t OffsetInBits = 4; unsigned Flags = 5; Metadata *Elements = MDTuple::getDistinct(Context, None); unsigned RuntimeLang = 6; @@ -905,6 +926,32 @@ TEST_F(MDCompositeTypeTest, get) { EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp))); } +TEST_F(MDCompositeTypeTest, getWithLargeValues) { + unsigned Tag = dwarf::DW_TAG_structure_type; + StringRef Name = "some name"; + Metadata *File = MDTuple::getDistinct(Context, None); + unsigned Line = 1; + Metadata *Scope = MDTuple::getDistinct(Context, None); + Metadata *BaseType = MDTuple::getDistinct(Context, None); + uint64_t SizeInBits = UINT64_MAX; + uint64_t AlignInBits = UINT64_MAX - 1; + uint64_t OffsetInBits = UINT64_MAX - 2; + unsigned Flags = 5; + Metadata *Elements = MDTuple::getDistinct(Context, None); + unsigned RuntimeLang = 6; + Metadata *VTableHolder = MDTuple::getDistinct(Context, None); + Metadata *TemplateParams = MDTuple::getDistinct(Context, None); + StringRef Identifier = "some id"; + + auto *N = MDCompositeType::get(Context, Tag, Name, File, Line, Scope, + BaseType, SizeInBits, AlignInBits, + OffsetInBits, Flags, Elements, RuntimeLang, + VTableHolder, TemplateParams, Identifier); + EXPECT_EQ(SizeInBits, N->getSizeInBits()); + EXPECT_EQ(AlignInBits, N->getAlignInBits()); + EXPECT_EQ(OffsetInBits, N->getOffsetInBits()); +} + TEST_F(MDCompositeTypeTest, replaceOperands) { unsigned Tag = dwarf::DW_TAG_structure_type; StringRef Name = "some name"; @@ -912,9 +959,9 @@ TEST_F(MDCompositeTypeTest, replaceOperands) { unsigned Line = 1; Metadata *Scope = MDTuple::getDistinct(Context, None); Metadata *BaseType = MDTuple::getDistinct(Context, None); - unsigned SizeInBits = 2; - unsigned AlignInBits = 3; - unsigned OffsetInBits = 4; + uint64_t SizeInBits = 2; + uint64_t AlignInBits = 3; + uint64_t OffsetInBits = 4; unsigned Flags = 5; unsigned RuntimeLang = 6; StringRef Identifier = "some id"; -- 2.34.1