From 4bb7883d097f324d8c1d5f9f50e09c7471340abe Mon Sep 17 00:00:00 2001 From: Sam McCall Date: Mon, 23 Jul 2018 10:44:40 +0000 Subject: [Support] Add a UniqueStringSaver: like StringSaver, but deduplicating. Summary: Clarify contract of StringSaver (it null-terminates, callers rely on it). Reviewers: hokein Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D49596 llvm-svn: 337677 --- llvm/lib/Support/StringSaver.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'llvm/lib/Support/StringSaver.cpp') diff --git a/llvm/lib/Support/StringSaver.cpp b/llvm/lib/Support/StringSaver.cpp index 335fce3a7bb..1ded2bdb09d 100644 --- a/llvm/lib/Support/StringSaver.cpp +++ b/llvm/lib/Support/StringSaver.cpp @@ -17,3 +17,10 @@ StringRef StringSaver::save(StringRef S) { P[S.size()] = '\0'; return StringRef(P, S.size()); } + +StringRef UniqueStringSaver::save(StringRef S) { + auto R = Unique.insert(S); + if (R.second) // cache miss, need to actually save the string + *R.first = Strings.save(S); // safe replacement with equal value + return *R.first; +} -- cgit v1.2.3