From: Duncan P. N. Exon Smith Date: Fri, 5 Dec 2014 01:41:34 +0000 (+0000) Subject: IR: Stop relying on GetStringMapEntryFromValue() X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=397b575f817010a9169b14cfbd8653493cd8ce3e;p=oota-llvm.git 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 --- 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(); } //===----------------------------------------------------------------------===//