It relies on undefined behaviour.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223438
91177308-0d34-0410-b5e6-
96231b3b80d8
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;
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();
}
//===----------------------------------------------------------------------===//