From 397b575f817010a9169b14cfbd8653493cd8ce3e Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Fri, 5 Dec 2014 01:41:34 +0000 Subject: [PATCH] IR: Stop relying on GetStringMapEntryFromValue() It relies on undefined behaviour. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223438 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/Metadata.h | 3 ++- lib/IR/Metadata.cpp | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/include/llvm/IR/Metadata.h b/include/llvm/IR/Metadata.h index a056b0d2973..189ea3e73d6 100644 --- a/include/llvm/IR/Metadata.h +++ b/include/llvm/IR/Metadata.h @@ -63,8 +63,9 @@ class MDString : public Metadata { virtual void anchor(); MDString(const MDString &) LLVM_DELETED_FUNCTION; + StringMapEntry *Entry; explicit MDString(LLVMContext &Context) - : Metadata(Context, Value::MDStringVal) {} + : Metadata(Context, Value::MDStringVal), Entry(nullptr) {} /// \brief Shadow Value::getName() to prevent its use. StringRef getName() const LLVM_DELETED_FUNCTION; diff --git a/lib/IR/Metadata.cpp b/lib/IR/Metadata.cpp index 27ba9f7a87b..3a7c293bcdd 100644 --- a/lib/IR/Metadata.cpp +++ b/lib/IR/Metadata.cpp @@ -48,11 +48,13 @@ MDString *MDString::get(LLVMContext &Context, StringRef Str) { bool WasInserted = Store.insert(Entry); (void)WasInserted; assert(WasInserted && "Expected entry to be inserted"); + Entry->second.Entry = Entry; return &Entry->second; } StringRef MDString::getString() const { - return StringMapEntry::GetStringMapEntryFromValue(*this).first(); + assert(Entry && "Expected to find string map entry"); + return Entry->first(); } //===----------------------------------------------------------------------===//