StringMapEntry<MDString> *Entry;
MDString() : Metadata(MDStringKind, Uniqued), Entry(nullptr) {}
+ MDString(MDString &&) : Metadata(MDStringKind, Uniqued) {}
public:
- // This is a "default" move ctor, MSVC does not support "= default" here
- MDString(MDString &&R)
- : Metadata(MDStringKind, Uniqued), Entry(std::move(R.Entry)) {}
static MDString *get(LLVMContext &Context, StringRef Str);
static MDString *get(LLVMContext &Context, const char *Str) {
return get(Context, Str ? StringRef(Str) : StringRef());
MDString *MDString::get(LLVMContext &Context, StringRef Str) {
auto &Store = Context.pImpl->MDStringCache;
- auto I = Store.insert(std::make_pair(Str, MDString()));
- auto &MapEntry = I.first->getValue();
- if (!I.second)
- return &MapEntry;
- MapEntry.Entry = &*I.first;
- return &MapEntry;
+ auto I = Store.find(Str);
+ if (I != Store.end())
+ return &I->second;
+
+ auto *Entry =
+ StringMapEntry<MDString>::Create(Str, Store.getAllocator(), MDString());
+ 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 {