<p dir="ltr">Ok</p>
<br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 27, 2016, 12:22 PM Nirav Dave <<a href="mailto:niravd@google.com">niravd@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">niravd created this revision.<br>
niravd added reviewers: echristo, rnk.<br>
niravd added a subscriber: llvm-commits.<br>
Herald added a subscriber: mehdi_amini.<br>
<br>
Add -fpreserve-as-comments and -fno-preserve-as-comments.<br>
<br>
<a href="https://reviews.llvm.org/D22883" rel="noreferrer" target="_blank">https://reviews.llvm.org/D22883</a><br>
<br>
Files:<br>
  include/clang/Driver/Options.td<br>
  include/clang/Frontend/CodeGenOptions.def<br>
  lib/CodeGen/BackendUtil.cpp<br>
  lib/Driver/Tools.cpp<br>
  lib/Frontend/CompilerInvocation.cpp<br>
  test/CodeGen/preserve-as-comments.c<br>
<br>
Index: test/CodeGen/preserve-as-comments.c<br>
===================================================================<br>
--- /dev/null<br>
+++ test/CodeGen/preserve-as-comments.c<br>
@@ -0,0 +1,12 @@<br>
+// RUN: %clang_cc1 -S -fno-preserve-as-comments %s -o - | FileCheck %s --check-prefix=NOASM --check-prefix=CHECK<br>
+// RUN: %clang_cc1 -S %s -o - | FileCheck %s --check-prefix=ASM --check-prefix=CHECK<br>
+<br>
+// CHECK-LABEL: main<br>
+// CHECK: #APP<br>
+// ASM: #comment<br>
+// NOASM-NOT: #comment<br>
+// CHECK: #NO_APP<br>
+int main() {<br>
+  __asm__("/*comment*/");<br>
+  return 0;<br>
+}<br>
Index: lib/Frontend/CompilerInvocation.cpp<br>
===================================================================<br>
--- lib/Frontend/CompilerInvocation.cpp<br>
+++ lib/Frontend/CompilerInvocation.cpp<br>
@@ -544,6 +544,7 @@<br>
       Args.hasFlag(OPT_fcoverage_mapping, OPT_fno_coverage_mapping, false);<br>
   Opts.DumpCoverageMapping = Args.hasArg(OPT_dump_coverage_mapping);<br>
   Opts.AsmVerbose = Args.hasArg(OPT_masm_verbose);<br>
+  Opts.PreserveAsmComments = !Args.hasArg(OPT_fno_preserve_as_comments);<br>
   Opts.AssumeSaneOperatorNew = !Args.hasArg(OPT_fno_assume_sane_operator_new);<br>
   Opts.ObjCAutoRefCountExceptions = Args.hasArg(OPT_fobjc_arc_exceptions);<br>
   Opts.CXAAtExit = !Args.hasArg(OPT_fno_use_cxa_atexit);<br>
Index: lib/Driver/Tools.cpp<br>
===================================================================<br>
--- lib/Driver/Tools.cpp<br>
+++ lib/Driver/Tools.cpp<br>
@@ -4193,6 +4193,10 @@<br>
                     true))<br>
     CmdArgs.push_back("-fno-jump-tables");<br>
<br>
+  if (!Args.hasFlag(options::OPT_fpreserve_as_comments,<br>
+                    options::OPT_fno_preserve_as_comments, true))<br>
+    CmdArgs.push_back("-fno-preserve-as-comments");<br>
+<br>
   if (Arg *A = Args.getLastArg(options::OPT_mregparm_EQ)) {<br>
     CmdArgs.push_back("-mregparm");<br>
     CmdArgs.push_back(A->getValue());<br>
Index: lib/CodeGen/BackendUtil.cpp<br>
===================================================================<br>
--- lib/CodeGen/BackendUtil.cpp<br>
+++ lib/CodeGen/BackendUtil.cpp<br>
@@ -604,6 +604,7 @@<br>
       CodeGenOpts.IncrementalLinkerCompatible;<br>
   Options.MCOptions.MCFatalWarnings = CodeGenOpts.FatalWarnings;<br>
   Options.MCOptions.AsmVerbose = CodeGenOpts.AsmVerbose;<br>
+  Options.MCOptions.PreserveAsmComments = CodeGenOpts.PreserveAsmComments;<br>
   Options.MCOptions.ABIName = TargetOpts.ABI;<br>
<br>
   TM.reset(TheTarget->createTargetMachine(Triple, TargetOpts.CPU, FeaturesStr,<br>
Index: include/clang/Frontend/CodeGenOptions.def<br>
===================================================================<br>
--- include/clang/Frontend/CodeGenOptions.def<br>
+++ include/clang/Frontend/CodeGenOptions.def<br>
@@ -32,6 +32,7 @@<br>
 CODEGENOPT(CompressDebugSections, 1, 0) ///< -Wa,-compress-debug-sections<br>
 CODEGENOPT(RelaxELFRelocations, 1, 0) ///< -Wa,--mrelax-relocations<br>
 CODEGENOPT(AsmVerbose        , 1, 0) ///< -dA, -fverbose-asm.<br>
+CODEGENOPT(PreserveAsmComments, 1, 1) ///< -dA, -fno-preserve-as-comments.<br>
 CODEGENOPT(AssumeSaneOperatorNew , 1, 1) ///< implicit __attribute__((malloc)) operator new<br>
 CODEGENOPT(Autolink          , 1, 1) ///< -fno-autolink<br>
 CODEGENOPT(ObjCAutoRefCountExceptions , 1, 0) ///< Whether ARC should be EH-safe.<br>
Index: include/clang/Driver/Options.td<br>
===================================================================<br>
--- include/clang/Driver/Options.td<br>
+++ include/clang/Driver/Options.td<br>
@@ -1089,6 +1089,9 @@<br>
 def fno_pie : Flag<["-"], "fno-pie">, Group<f_Group>;<br>
 def fplugin_EQ : Joined<["-"], "fplugin=">, Group<f_Group>, Flags<[DriverOption]>, MetaVarName<"<dsopath>">,<br>
   HelpText<"Load the named plugin (dynamic shared object)">;<br>
+def fpreserve_as_comments : Flag<["-"], "fpreserve-as-comments">, Group<f_Group>;<br>
+def fno_preserve_as_comments : Flag<["-"], "fno-preserve-as-comments">, Group<f_Group>, Flags<[CC1Option]>,<br>
+  HelpText<"Do not preserve comments in inline assembly">;<br>
 def fprofile_arcs : Flag<["-"], "fprofile-arcs">, Group<f_Group>;<br>
 def fno_profile_arcs : Flag<["-"], "fno-profile-arcs">, Group<f_Group>;<br>
 def framework : Separate<["-"], "framework">, Flags<[LinkerInput]>;<br>
<br>
<br>
</blockquote></div>