summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/test/tools/gold/X86/thinlto_object_suffix_replace.ll11
-rw-r--r--llvm/tools/gold/gold-plugin.cpp10
2 files changed, 14 insertions, 7 deletions
diff --git a/llvm/test/tools/gold/X86/thinlto_object_suffix_replace.ll b/llvm/test/tools/gold/X86/thinlto_object_suffix_replace.ll
index af0ed39e5f0..26cfa27b296 100644
--- a/llvm/test/tools/gold/X86/thinlto_object_suffix_replace.ll
+++ b/llvm/test/tools/gold/X86/thinlto_object_suffix_replace.ll
@@ -27,6 +27,17 @@
; RUN: -shared %t1.thinlink.bc -o %t3
; RUN: diff %t1.o.thinlto.bc.orig %t1.o.thinlto.bc
+; If filename does not end with old suffix, no suffix change should occur,
+; so ".thinlto.bc" will simply be appended to the input file name.
+; RUN: rm -f %t1.thinlink.bc.thinlto.bc
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold%shlibext \
+; RUN: -m elf_x86_64 \
+; RUN: --plugin-opt=thinlto \
+; RUN: --plugin-opt=thinlto-index-only \
+; RUN: --plugin-opt=thinlto-object-suffix-replace=".abc;.o" \
+; RUN: -shared %t1.thinlink.bc -o /dev/null
+; RUN: ls %t1.thinlink.bc.thinlto.bc
+
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
diff --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp
index 6c55ebcddc4..239460d972d 100644
--- a/llvm/tools/gold/gold-plugin.cpp
+++ b/llvm/tools/gold/gold-plugin.cpp
@@ -667,13 +667,9 @@ static void getThinLTOOldAndNewSuffix(std::string &OldSuffix,
/// suffix matching \p OldSuffix with \p NewSuffix.
static std::string getThinLTOObjectFileName(StringRef Path, StringRef OldSuffix,
StringRef NewSuffix) {
- if (OldSuffix.empty() && NewSuffix.empty())
- return Path;
- StringRef NewPath = Path;
- NewPath.consume_back(OldSuffix);
- std::string NewNewPath = NewPath;
- NewNewPath += NewSuffix;
- return NewNewPath;
+ if (Path.consume_back(OldSuffix))
+ return (Path + NewSuffix).str();
+ return Path;
}
// Returns true if S is valid as a C language identifier.
OpenPOWER on IntegriCloud