[llvm] r223438 - IR: Stop relying on GetStringMapEntryFromValue()

Duncan P. N. Exon Smith dexonsmith at apple.com
Thu Dec 4 17:41:34 PST 2014


Author: dexonsmith
Date: Thu Dec  4 19:41:34 2014
New Revision: 223438

URL: http://llvm.org/viewvc/llvm-project?rev=223438&view=rev
Log:
IR: Stop relying on GetStringMapEntryFromValue()

It relies on undefined behaviour.

Modified:
    llvm/trunk/include/llvm/IR/Metadata.h
    llvm/trunk/lib/IR/Metadata.cpp

Modified: llvm/trunk/include/llvm/IR/Metadata.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Metadata.h?rev=223438&r1=223437&r2=223438&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Metadata.h (original)
+++ llvm/trunk/include/llvm/IR/Metadata.h Thu Dec  4 19:41:34 2014
@@ -63,8 +63,9 @@ class MDString : public Metadata {
   virtual void anchor();
   MDString(const MDString &) LLVM_DELETED_FUNCTION;
 
+  StringMapEntry<MDString> *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;

Modified: llvm/trunk/lib/IR/Metadata.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Metadata.cpp?rev=223438&r1=223437&r2=223438&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Metadata.cpp (original)
+++ llvm/trunk/lib/IR/Metadata.cpp Thu Dec  4 19:41:34 2014
@@ -48,11 +48,13 @@ MDString *MDString::get(LLVMContext &Con
   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<MDString>::GetStringMapEntryFromValue(*this).first();
+  assert(Entry && "Expected to find string map entry");
+  return Entry->first();
 }
 
 //===----------------------------------------------------------------------===//





More information about the llvm-commits mailing list