[ThinLTO] Use semicolon to separate path prefix replacement

Summary:
Colons can appear in Windows paths after drive letters. Both colon and
semicolon are valid characters in filenames, but neither are very
common. Semicolon seems just as good, and makes the test pass on
Windows.

Reviewers: tejohnson

Subscribers: joker.eph, llvm-commits

Differential Revision: http://reviews.llvm.org/D20332

llvm-svn: 269798
This commit is contained in:
Reid Kleckner 2016-05-17 18:43:22 +00:00
parent 86564cad06
commit 8e96c3e9dd
4 changed files with 9 additions and 10 deletions

View File

@ -1,6 +1,5 @@
; Check that changing the output path via prefix-replace works
; Use of '/' in paths created here make this unsuitable for Windows.
; REQUIRES: shell
; RUN: mkdir -p %T/oldpath
; RUN: opt -module-summary %s -o %T/oldpath/prefix_replace.o
; Ensure that there is no existing file at the new path, so we properly
@ -8,7 +7,7 @@
; RUN: rm -f %T/newpath/prefix_replace.o.thinlto.bc
; RUN: llvm-lto -thinlto-action=thinlink -o %t.index.bc %T/oldpath/prefix_replace.o
; RUN: llvm-lto -thinlto-action=distributedindexes -thinlto-prefix-replace="%T/oldpath/:%T/newpath/" -thinlto-index %t.index.bc %T/oldpath/prefix_replace.o
; RUN: llvm-lto -thinlto-action=distributedindexes -thinlto-prefix-replace="%T/oldpath/;%T/newpath/" -thinlto-index %t.index.bc %T/oldpath/prefix_replace.o
; RUN: ls %T/newpath/prefix_replace.o.thinlto.bc

View File

@ -7,7 +7,7 @@
; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=thinlto \
; RUN: --plugin-opt=thinlto-index-only \
; RUN: --plugin-opt=thinlto-prefix-replace="%T/oldpath/:%T/newpath/" \
; RUN: --plugin-opt=thinlto-prefix-replace="%T/oldpath/;%T/newpath/" \
; RUN: -shared %T/oldpath/thinlto_prefix_replace.o -o %T/thinlto_prefix_replace
; RUN: ls %T/newpath/thinlto_prefix_replace.o.thinlto.bc

View File

@ -234,8 +234,8 @@ namespace options {
thinlto_emit_imports_files = true;
} else if (opt.startswith("thinlto-prefix-replace=")) {
thinlto_prefix_replace = opt.substr(strlen("thinlto-prefix-replace="));
if (thinlto_prefix_replace.find(":") == std::string::npos)
message(LDPL_FATAL, "thinlto-prefix-replace expects 'old:new' format");
if (thinlto_prefix_replace.find(";") == std::string::npos)
message(LDPL_FATAL, "thinlto-prefix-replace expects 'old;new' format");
} else if (opt.size() == 2 && opt[0] == 'O') {
if (opt[1] < '0' || opt[1] > '3')
message(LDPL_FATAL, "Optimization level must be between 0 and 3");
@ -1219,8 +1219,8 @@ static void thinLTOBackends(raw_fd_ostream *ApiFile,
static void getThinLTOOldAndNewPrefix(std::string &OldPrefix,
std::string &NewPrefix) {
StringRef PrefixReplace = options::thinlto_prefix_replace;
assert(PrefixReplace.empty() || PrefixReplace.find(":") != StringRef::npos);
std::pair<StringRef, StringRef> Split = PrefixReplace.split(":");
assert(PrefixReplace.empty() || PrefixReplace.find(";") != StringRef::npos);
std::pair<StringRef, StringRef> Split = PrefixReplace.split(";");
OldPrefix = Split.first.str();
NewPrefix = Split.second.str();
}

View File

@ -108,7 +108,7 @@ static cl::opt<std::string>
static cl::opt<std::string> ThinLTOPrefixReplace(
"thinlto-prefix-replace",
cl::desc("Control where files for distributed backends are "
"created. Expects 'oldprefix:newprefix' and if path "
"created. Expects 'oldprefix;newprefix' and if path "
"prefix of output file is oldprefix it will be "
"replaced with newprefix."));
@ -307,9 +307,9 @@ static void createCombinedModuleSummaryIndex() {
static void getThinLTOOldAndNewPrefix(std::string &OldPrefix,
std::string &NewPrefix) {
assert(ThinLTOPrefixReplace.empty() ||
ThinLTOPrefixReplace.find(":") != StringRef::npos);
ThinLTOPrefixReplace.find(";") != StringRef::npos);
StringRef PrefixReplace = ThinLTOPrefixReplace;
std::pair<StringRef, StringRef> Split = PrefixReplace.split(":");
std::pair<StringRef, StringRef> Split = PrefixReplace.split(";");
OldPrefix = Split.first.str();
NewPrefix = Split.second.str();
}