[PATCH] D19289: MarkEOLs should only be true for clang-cl.exe.

Stephen Hines via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 19 17:38:51 PDT 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL266840: MarkEOLs should only be true for clang-cl.exe. (authored by srhines).

Changed prior to commit:
  http://reviews.llvm.org/D19289?vs=54276&id=54302#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D19289

Files:
  cfe/trunk/test/Driver/response-file-extra-whitespace.c
  cfe/trunk/test/Driver/response-file.c
  cfe/trunk/tools/driver/driver.cpp

Index: cfe/trunk/test/Driver/response-file-extra-whitespace.c
===================================================================
--- cfe/trunk/test/Driver/response-file-extra-whitespace.c
+++ cfe/trunk/test/Driver/response-file-extra-whitespace.c
@@ -0,0 +1,12 @@
+// Check that clang is able to process response files with extra whitespace.
+// We generate a dos-style file with \r\n for line endings, and then split
+// some joined arguments (like "-x c") across lines to ensure that regular
+// clang (not clang-cl) can process it correctly.
+//
+// RUN: echo -en "-x\r\nc\r\n-DTEST\r\n" > %t.0.txt
+// RUN: %clang -E @%t.0.txt %s -v 2>&1 | FileCheck %s -check-prefix=SHORT
+// SHORT: extern int it_works;
+
+#ifdef TEST
+extern int it_works;
+#endif
Index: cfe/trunk/test/Driver/response-file.c
===================================================================
--- cfe/trunk/test/Driver/response-file.c
+++ cfe/trunk/test/Driver/response-file.c
@@ -4,7 +4,7 @@
 // Since this is a short response file, clang must not use a response file
 // to pass its parameters to other tools. This is only necessary for a large
 // number of parameters.
-// RUN: echo "-DTEST" >> %t.0.txt
+// RUN: echo "-DTEST" > %t.0.txt
 // RUN: %clang -E @%t.0.txt %s -v 2>&1 | FileCheck %s -check-prefix=SHORT
 // SHORT-NOT: Arguments passed via response file
 // SHORT: extern int it_works;
Index: cfe/trunk/tools/driver/driver.cpp
===================================================================
--- cfe/trunk/tools/driver/driver.cpp
+++ cfe/trunk/tools/driver/driver.cpp
@@ -338,18 +338,26 @@
   // have to manually search for a --driver-mode=cl argument the hard way.
   // Finally, our -cc1 tools don't care which tokenization mode we use because
   // response files written by clang will tokenize the same way in either mode.
-  llvm::cl::TokenizerCallback Tokenizer = &llvm::cl::TokenizeGNUCommandLine;
+  bool ClangCLMode = false;
   if (TargetAndMode.second == "--driver-mode=cl" ||
       std::find_if(argv.begin(), argv.end(), [](const char *F) {
         return F && strcmp(F, "--driver-mode=cl") == 0;
       }) != argv.end()) {
-    Tokenizer = &llvm::cl::TokenizeWindowsCommandLine;
+    ClangCLMode = true;
   }
 
   // Determines whether we want nullptr markers in argv to indicate response
-  // files end-of-lines. We only use this for the /LINK driver argument.
-  bool MarkEOLs = true;
-  if (argv.size() > 1 && StringRef(argv[1]).startswith("-cc1"))
+  // files end-of-lines. We only use this for the /LINK driver argument with
+  // clang-cl.exe on Windows.
+  bool MarkEOLs = false;
+
+  llvm::cl::TokenizerCallback Tokenizer = &llvm::cl::TokenizeGNUCommandLine;
+  if (ClangCLMode) {
+    Tokenizer = &llvm::cl::TokenizeWindowsCommandLine;
+    MarkEOLs = true;
+  }
+
+  if (MarkEOLs && argv.size() > 1 && StringRef(argv[1]).startswith("-cc1"))
     MarkEOLs = false;
   llvm::cl::ExpandResponseFiles(Saver, Tokenizer, argv, MarkEOLs);
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D19289.54302.patch
Type: text/x-patch
Size: 2950 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160420/43f3d826/attachment.bin>


More information about the llvm-commits mailing list