llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang
            
<details>
<summary>Changes</summary>
The cl::opt used by MCTargetOptions are not created until 
RegisterMCTargetOptionsFlags is instantiated. Due to this deferral the compiler 
driver -mllvm path is unable to parse flags such as --no-deprecated-warn which 
work properly in llvm-mc.

Move the instantiation into the frontend and cc1as and propagate the results 
into MCTargetOptions.
--
Full diff: https://github.com/llvm/llvm-project/pull/66347.diff

4 Files Affected:

- (added) clang/test/Misc/cc1as-mllvm-mc-options.s (+12) 
- (added) clang/test/Misc/compiler-mllvm-mc-options.c (+12) 
- (modified) clang/tools/driver/cc1_main.cpp (+4) 
- (modified) clang/tools/driver/cc1as_main.cpp (+2-1) 


<pre>
diff --git a/clang/test/Misc/cc1as-mllvm-mc-options.s 
b/clang/test/Misc/cc1as-mllvm-mc-options.s
new file mode 100644
index 000000000000000..189e3c546b8fd94
--- /dev/null
+++ b/clang/test/Misc/cc1as-mllvm-mc-options.s
@@ -0,0 +1,12 @@
+// Ensure MCTargetOptionsCommandFlags are parsable under -mllvm
+// RUN: %clang -cc1as -mllvm --help %s | FileCheck %s
+// CHECK: --asm-show-inst
+// CHECK: --dwarf-version
+// CHECK: --dwarf64
+// CHECK: --emit-dwarf-unwind
+// CHECK: --fatal-warnings
+// CHECK: --incremental-linker-compatible
+// CHECK: --mc-relax-all
+// CHECK: --no-deprecated-warn
+// CHECK: --no-type-check
+// CHECK: --no-warn
diff --git a/clang/test/Misc/compiler-mllvm-mc-options.c 
b/clang/test/Misc/compiler-mllvm-mc-options.c
new file mode 100644
index 000000000000000..10b2a1172968d66
--- /dev/null
+++ b/clang/test/Misc/compiler-mllvm-mc-options.c
@@ -0,0 +1,12 @@
+// Ensure MCTargetOptionsCommandFlags are parsable under -mllvm
+// RUN: %clang -mllvm --help -c %s -o /dev/null | FileCheck %s
+// CHECK: --asm-show-inst
+// CHECK: --dwarf-version
+// CHECK: --dwarf64
+// CHECK: --emit-dwarf-unwind
+// CHECK: --fatal-warnings
+// CHECK: --incremental-linker-compatible
+// CHECK: --mc-relax-all
+// CHECK: --no-deprecated-warn
+// CHECK: --no-type-check
+// CHECK: --no-warn
diff --git a/clang/tools/driver/cc1_main.cpp b/clang/tools/driver/cc1_main.cpp
index 9e7f8679b4cbdff..cc7089842a60c0d 100644
--- a/clang/tools/driver/cc1_main.cpp
+++ b/clang/tools/driver/cc1_main.cpp
@@ -28,6 +28,7 @@
 #include &amp;quot;llvm/ADT/Statistic.h&amp;quot;
 #include &amp;quot;llvm/Config/llvm-config.h&amp;quot;
 #include &amp;quot;llvm/LinkAllPasses.h&amp;quot;
+#include &amp;quot;llvm/MC/MCTargetOptionsCommandFlags.h&amp;quot;
 #include &amp;quot;llvm/MC/TargetRegistry.h&amp;quot;
 #include &amp;quot;llvm/Option/Arg.h&amp;quot;
 #include &amp;quot;llvm/Option/ArgList.h&amp;quot;
@@ -53,6 +54,9 @@
 using namespace clang;
 using namespace llvm::opt;
 
+// Initialize MC Target option flags (for -mllvm)
+static llvm::mc::RegisterMCTargetOptionsFlags MOF;
+
 
//===----------------------------------------------------------------------===//
 // Main driver
 
//===----------------------------------------------------------------------===//
diff --git a/clang/tools/driver/cc1as_main.cpp 
b/clang/tools/driver/cc1as_main.cpp
index 3c5926073f026a6..3eb7c8c555bf186 100644
--- a/clang/tools/driver/cc1as_main.cpp
+++ b/clang/tools/driver/cc1as_main.cpp
@@ -36,6 +36,7 @@
 #include &amp;quot;llvm/MC/MCStreamer.h&amp;quot;
 #include &amp;quot;llvm/MC/MCSubtargetInfo.h&amp;quot;
 #include &amp;quot;llvm/MC/MCTargetOptions.h&amp;quot;
+#include &amp;quot;llvm/MC/MCTargetOptionsCommandFlags.h&amp;quot;
 #include &amp;quot;llvm/MC/TargetRegistry.h&amp;quot;
 #include &amp;quot;llvm/Option/Arg.h&amp;quot;
 #include &amp;quot;llvm/Option/ArgList.h&amp;quot;
@@ -408,7 +409,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation 
&amp;amp;Opts,
   std::unique_ptr&amp;lt;MCRegisterInfo&amp;gt; 
MRI(TheTarget-&amp;gt;createMCRegInfo(Opts.Triple));
   assert(MRI &amp;amp;&amp;amp; &amp;quot;Unable to create target register 
info!&amp;quot;);
 
-  MCTargetOptions MCOptions;
+  MCTargetOptions MCOptions = llvm::mc::InitMCTargetOptionsFromFlags();
   MCOptions.EmitDwarfUnwind = Opts.EmitDwarfUnwind;
   MCOptions.EmitCompactUnwindNonCanonical = Opts.EmitCompactUnwindNonCanonical;
   MCOptions.AsSecureLogFile = Opts.AsSecureLogFile;
</pre>
</details>


https://github.com/llvm/llvm-project/pull/66347
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to