diff options
| -rw-r--r-- | llvm/include/llvm/IR/LLVMContext.h | 14 | ||||
| -rw-r--r-- | llvm/lib/AsmParser/LLParser.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/IR/LLVMContext.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/IR/LLVMContextImpl.h | 2 | ||||
| -rw-r--r-- | llvm/unittests/IR/LLVMContextTest.cpp | 12 |
6 files changed, 22 insertions, 19 deletions
diff --git a/llvm/include/llvm/IR/LLVMContext.h b/llvm/include/llvm/IR/LLVMContext.h index 2b0dfaf5598..8ef85f8932b 100644 --- a/llvm/include/llvm/IR/LLVMContext.h +++ b/llvm/include/llvm/IR/LLVMContext.h @@ -26,7 +26,7 @@ class Twine; class Instruction; class Module; class MDString; -class DIType; +class DICompositeType; class SMDiagnostic; class DiagnosticInfo; template <typename T> class SmallVectorImpl; @@ -121,16 +121,16 @@ public: void enableDebugTypeODRUniquing(); void disableDebugTypeODRUniquing(); - /// Get or insert the DIType mapped to the given string. + /// Get or insert the DICompositeType mapped to the given string. /// - /// Returns the address of the current \a DIType pointer mapped to \c S, - /// inserting a mapping to \c nullptr if \c S was not previously mapped. - /// This method has no effect (and returns \c nullptr instead of a valid - /// address) if \a isODRUniquingDebugTypes() is \c false. + /// Returns the address of the current \a DICompositeType pointer mapped to + /// \c S, inserting a mapping to \c nullptr if \c S was not previously + /// mapped. This method has no effect (and returns \c nullptr instead of a + /// valid address) if \a isODRUniquingDebugTypes() is \c false. /// /// \post If \a isODRUniquingDebugTypes(), \c S will have a (possibly null) /// mapping. \note The returned address is only valid until the next call. - DIType **getOrInsertODRUniquedType(const MDString &S); + DICompositeType **getOrInsertODRUniquedType(const MDString &S); typedef void (*InlineAsmDiagHandlerTy)(const SMDiagnostic&, void *Context, unsigned LocCookie); diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index 987ab5de967..c906b7b22db 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -3841,7 +3841,7 @@ bool LLParser::ParseDICompositeType(MDNode *&Result, bool IsDistinct) { // If this isn't a forward declaration and it has a UUID, check for it in the // type map in the context. - DIType **MappedT = nullptr; + DICompositeType **MappedT = nullptr; if (!(flags.Val & DINode::FlagFwdDecl) && identifier.Val && (MappedT = Context.getOrInsertODRUniquedType(*identifier.Val)) && *MappedT) { @@ -3857,7 +3857,7 @@ bool LLParser::ParseDICompositeType(MDNode *&Result, bool IsDistinct) { size.Val, align.Val, offset.Val, flags.Val, elements.Val, runtimeLang.Val, vtableHolder.Val, templateParams.Val, identifier.Val)); if (MappedT) - *MappedT = cast<DIType>(Result); + *MappedT = cast<DICompositeType>(Result); return false; } diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 1a83359b6e8..d454eb1fd4c 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2192,12 +2192,12 @@ std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) { // mapping. unsigned Flags = Record[10]; auto *Identifier = getMDString(Record[15]); - DIType **MappedT = nullptr; + DICompositeType **MappedT = nullptr; if (!(Flags & DINode::FlagFwdDecl) && Identifier) MappedT = Context.getOrInsertODRUniquedType(*Identifier); // Use the mapped type node, or create a new one if necessary. - DIType *CT = MappedT ? *MappedT : nullptr; + DICompositeType *CT = MappedT ? *MappedT : nullptr; if (!CT) { CT = GET_OR_DISTINCT( DICompositeType, Record[0], diff --git a/llvm/lib/IR/LLVMContext.cpp b/llvm/lib/IR/LLVMContext.cpp index e166a551ade..7c0d18d028a 100644 --- a/llvm/lib/IR/LLVMContext.cpp +++ b/llvm/lib/IR/LLVMContext.cpp @@ -317,12 +317,13 @@ void LLVMContext::enableDebugTypeODRUniquing() { if (pImpl->DITypeMap) return; - pImpl->DITypeMap = llvm::make_unique<DenseMap<const MDString *, DIType *>>(); + pImpl->DITypeMap = + llvm::make_unique<DenseMap<const MDString *, DICompositeType *>>(); } void LLVMContext::disableDebugTypeODRUniquing() { pImpl->DITypeMap.reset(); } -DIType **LLVMContext::getOrInsertODRUniquedType(const MDString &S) { +DICompositeType **LLVMContext::getOrInsertODRUniquedType(const MDString &S) { if (!isODRUniquingDebugTypes()) return nullptr; return &(*pImpl->DITypeMap)[&S]; diff --git a/llvm/lib/IR/LLVMContextImpl.h b/llvm/lib/IR/LLVMContextImpl.h index e1a5aa52cb9..15ac0309831 100644 --- a/llvm/lib/IR/LLVMContextImpl.h +++ b/llvm/lib/IR/LLVMContextImpl.h @@ -1022,7 +1022,7 @@ public: #include "llvm/IR/Metadata.def" // Optional map for looking up composite types by identifier. - std::unique_ptr<DenseMap<const MDString *, DIType *>> DITypeMap; + std::unique_ptr<DenseMap<const MDString *, DICompositeType *>> DITypeMap; // MDNodes may be uniqued or not uniqued. When they're not uniqued, they // aren't in the MDNodeSet, but they're still shared between objects, so no diff --git a/llvm/unittests/IR/LLVMContextTest.cpp b/llvm/unittests/IR/LLVMContextTest.cpp index f1eeb05b1cb..028dc68827b 100644 --- a/llvm/unittests/IR/LLVMContextTest.cpp +++ b/llvm/unittests/IR/LLVMContextTest.cpp @@ -32,18 +32,20 @@ TEST(LLVMContextTest, getOrInsertODRUniquedType) { // Get the mapping. Context.enableDebugTypeODRUniquing(); - DIType **Mapping = Context.getOrInsertODRUniquedType(S); + DICompositeType **Mapping = Context.getOrInsertODRUniquedType(S); ASSERT_TRUE(Mapping); // Create some type and add it to the mapping. - auto &BT = - *DIBasicType::get(Context, dwarf::DW_TAG_unspecified_type, S.getString()); - *Mapping = &BT; + auto &CT = *DICompositeType::get(Context, dwarf::DW_TAG_class_type, "name", + nullptr, 0, nullptr, nullptr, 0, 0, 0, 0, + nullptr, 0, nullptr, nullptr, S.getString()); + ASSERT_EQ(S.getString(), CT.getIdentifier()); + *Mapping = &CT; // Check that we get it back. Mapping = Context.getOrInsertODRUniquedType(S); ASSERT_TRUE(Mapping); - EXPECT_EQ(&BT, *Mapping); + EXPECT_EQ(&CT, *Mapping); // Check that it's discarded with the type map. Context.disableDebugTypeODRUniquing(); |

