diff options
Diffstat (limited to 'clang/tools/driver/driver.cpp')
-rw-r--r-- | clang/tools/driver/driver.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp index b7097e3faf1..b74de081991 100644 --- a/clang/tools/driver/driver.cpp +++ b/clang/tools/driver/driver.cpp @@ -345,17 +345,24 @@ int main(int argc_, const char **argv_) { }) != argv.end()) { ClangCLMode = true; } + enum { Default, POSIX, Windows } RSPQuoting = Default; + for (const char *F : argv) { + if (strcmp(F, "--rsp-quoting=posix") == 0) + RSPQuoting = POSIX; + else if (strcmp(F, "--rsp-quoting=windows") == 0) + RSPQuoting = Windows; + } // Determines whether we want nullptr markers in argv to indicate response // files end-of-lines. We only use this for the /LINK driver argument with // clang-cl.exe on Windows. - bool MarkEOLs = false; + bool MarkEOLs = ClangCLMode; - llvm::cl::TokenizerCallback Tokenizer = &llvm::cl::TokenizeGNUCommandLine; - if (ClangCLMode) { + llvm::cl::TokenizerCallback Tokenizer; + if (RSPQuoting == Windows || (RSPQuoting == Default && ClangCLMode)) Tokenizer = &llvm::cl::TokenizeWindowsCommandLine; - MarkEOLs = true; - } + else + Tokenizer = &llvm::cl::TokenizeGNUCommandLine; if (MarkEOLs && argv.size() > 1 && StringRef(argv[1]).startswith("-cc1")) MarkEOLs = false; |