<div dir="ltr">Thanks, that inconsistency was bothering me.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Dec 20, 2013 at 10:40 AM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@hanshq.net" target="_blank">hans@hanshq.net</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: hans<br>
Date: Fri Dec 20 12:40:46 2013<br>
New Revision: 197827<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=197827&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=197827&view=rev</a><br>
Log:<br>
clang-cl: Support /P and /E (preprocess to file or stdout)<br>
<br>
Modified:<br>
    cfe/trunk/include/clang/Driver/CLCompatOptions.td<br>
    cfe/trunk/lib/Driver/Driver.cpp<br>
    cfe/trunk/test/Driver/cl-options.c<br>
    cfe/trunk/test/Driver/cl-outputs.c<br>
<br>
Modified: cfe/trunk/include/clang/Driver/CLCompatOptions.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CLCompatOptions.td?rev=197827&r1=197826&r2=197827&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CLCompatOptions.td?rev=197827&r1=197826&r2=197827&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/include/clang/Driver/CLCompatOptions.td (original)<br>
+++ cfe/trunk/include/clang/Driver/CLCompatOptions.td Fri Dec 20 12:40:46 2013<br>
@@ -57,6 +57,7 @@ def _SLASH_C : CLFlag<"C">, HelpText<"Do<br>
 def _SLASH_c : CLFlag<"c">, HelpText<"Compile only">, Alias<c>;<br>
 def _SLASH_D : CLJoinedOrSeparate<"D">, HelpText<"Define macro">,<br>
   MetaVarName<"<macro[=value]>">, Alias<D>;<br>
+def _SLASH_E : CLFlag<"E">, HelpText<"Preprocess to stdout">, Alias<E>;<br>
 def _SLASH_GR : CLFlag<"GR">, HelpText<"Enable RTTI">, Alias<frtti>;<br>
 def _SLASH_GR_ : CLFlag<"GR-">, HelpText<"Disable RTTI">, Alias<fno_rtti>;<br>
 def _SLASH_GF_ : CLFlag<"GF-">, HelpText<"Disable string pooling">,<br>
@@ -88,7 +89,6 @@ def _SLASH_Oy : CLFlag<"Oy">, HelpText<"<br>
   Alias<fomit_frame_pointer>;<br>
 def _SLASH_Oy_ : CLFlag<"Oy-">, HelpText<"Disable frame pointer omission">,<br>
   Alias<fno_omit_frame_pointer>;<br>
-def _SLASH_P : CLFlag<"P">, HelpText<"Only run the preprocessor">, Alias<E>;<br>
 def _SLASH_QUESTION : CLFlag<"?">, Alias<help>,<br>
   HelpText<"Display available options">;<br>
 def _SLASH_showIncludes : CLFlag<"showIncludes">,<br>
@@ -142,6 +142,7 @@ def _SLASH_MT : Option<["/", "-"], "MT",<br>
   Flags<[CLOption, DriverOption]>, HelpText<"Use static run-time">;<br>
 def _SLASH_MTd : Option<["/", "-"], "MTd", KIND_FLAG>, Group<_SLASH_M_Group>,<br>
   Flags<[CLOption, DriverOption]>, HelpText<"Use static debug run-time">;<br>
+def _SLASH_P : CLFlag<"P">, HelpText<"Preprocess to file">;<br>
 def _SLASH_Tc : CLCompileJoinedOrSeparate<"Tc">,<br>
   HelpText<"Specify a C source file">, MetaVarName<"<filename>">;<br>
 def _SLASH_TC : CLCompileFlag<"TC">, HelpText<"Treat all source files as C">;<br>
@@ -178,7 +179,6 @@ def _SLASH_arch : CLJoined<"arch:">;<br>
 def _SLASH_bigobj : CLFlag<"bigobj">;<br>
 def _SLASH_clr : CLJoined<"clr">;<br>
 def _SLASH_doc : CLJoined<"doc">;<br>
-def _SLASH_E : CLFlag<"E">;<br>
 def _SLASH_EH : CLJoined<"EH">;<br>
 def _SLASH_EP : CLFlag<"EP">;<br>
 def _SLASH_FA_joined : CLJoined<"FA">;<br>
<br>
Modified: cfe/trunk/lib/Driver/Driver.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=197827&r1=197826&r2=197827&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=197827&r1=197826&r2=197827&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Driver/Driver.cpp (original)<br>
+++ cfe/trunk/lib/Driver/Driver.cpp Fri Dec 20 12:40:46 2013<br>
@@ -159,10 +159,11 @@ const {<br>
   Arg *PhaseArg = 0;<br>
   phases::ID FinalPhase;<br>
<br>
-  // -{E,M,MM} only run the preprocessor.<br>
+  // -{E,M,MM} and /P only run the preprocessor.<br>
   if (CCCIsCPP() ||<br>
       (PhaseArg = DAL.getLastArg(options::OPT_E)) ||<br>
-      (PhaseArg = DAL.getLastArg(options::OPT_M, options::OPT_MM))) {<br>
+      (PhaseArg = DAL.getLastArg(options::OPT_M, options::OPT_MM)) ||<br>
+      (PhaseArg = DAL.getLastArg(options::OPT__SLASH_P))) {<br>
     FinalPhase = phases::Preprocess;<br>
<br>
     // -{fsyntax-only,-analyze,emit-ast,S} only run up to the compiler.<br>
@@ -1627,6 +1628,14 @@ const char *Driver::GetNamedOutputPath(C<br>
       return C.addResultFile(FinalOutput->getValue(), &JA);<br>
   }<br>
<br>
+  // For /P, preprocess to file named after BaseInput.<br>
+  if (C.getArgs().hasArg(options::OPT__SLASH_P)) {<br>
+    assert(AtTopLevel && isa<PreprocessJobAction>(JA));<br>
+    StringRef BaseName = llvm::sys::path::filename(BaseInput);<br>
+    return C.addResultFile(MakeCLOutputFilename(C.getArgs(), "", BaseName,<br>
+                                                types::TY_PP_C), &JA);<br>
+  }<br>
+<br>
   // Default to writing to stdout?<br>
   if (AtTopLevel && !CCGenDiagnostics &&<br>
       (isa<PreprocessJobAction>(JA) || JA.getType() == types::TY_ModuleFile))<br>
<br>
Modified: cfe/trunk/test/Driver/cl-options.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-options.c?rev=197827&r1=197826&r2=197827&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-options.c?rev=197827&r1=197826&r2=197827&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Driver/cl-options.c (original)<br>
+++ cfe/trunk/test/Driver/cl-options.c Fri Dec 20 12:40:46 2013<br>
@@ -14,6 +14,10 @@<br>
 // RUN: %clang_cl /D foo=bar -### -- %s 2>&1 | FileCheck -check-prefix=D %s<br>
 // D: "-D" "foo=bar"<br>
<br>
+// RUN: %clang_cl /E -### -- %s 2>&1 | FileCheck -check-prefix=E %s<br>
+// E: "-E"<br>
+// E: "-o" "-"<br>
+<br>
 // RTTI is on by default; just check that we don't error.<br>
 // RUN: %clang_cl /Zs /GR -- %s 2>&1<br>
<br>
@@ -56,9 +60,6 @@<br>
 // RUN: %clang_cl /Oy- -### -- %s 2>&1 | FileCheck -check-prefix=Oy_ %s<br>
 // Oy_: -mdisable-fp-elim<br>
<br>
-// RUN: %clang_cl /P -### -- %s 2>&1 | FileCheck -check-prefix=P %s<br>
-// P: -E<br>
-<br>
 // RUN: %clang_cl /showIncludes -### -- %s 2>&1 | FileCheck -check-prefix=showIncludes %s<br>
 // showIncludes: --show-includes<br>
<br>
@@ -140,7 +141,6 @@<br>
 // RUN:     /arch:sse2 \<br>
 // RUN:     /clr:pure \<br>
 // RUN:     /docname \<br>
-// RUN:     /E \<br>
 // RUN:     /EHsc \<br>
 // RUN:     /EP \<br>
 // RUN:     /F \<br>
<br>
Modified: cfe/trunk/test/Driver/cl-outputs.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-outputs.c?rev=197827&r1=197826&r2=197827&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-outputs.c?rev=197827&r1=197826&r2=197827&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Driver/cl-outputs.c (original)<br>
+++ cfe/trunk/test/Driver/cl-outputs.c Fri Dec 20 12:40:46 2013<br>
@@ -105,3 +105,7 @@<br>
 // FaDIRNAMEEXT:  "-o" "foo.dir{{[/\\]+}}a.ext"<br>
 // RUN: %clang_cl /Faa.asm -### -- %s %s 2>&1 | FileCheck -check-prefix=FaMULTIPLESOURCE %s<br>
 // FaMULTIPLESOURCE: error: cannot specify '/Faa.asm' when compiling multiple source files<br>
+<br>
+// RUN: %clang_cl /P -### -- %s 2>&1 | FileCheck -check-prefix=P %s<br>
+// P: "-E"<br>
+// P: "-o" "cl-outputs.i"<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>