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 &quot;llvm/ADT/Statistic.h&quot; #include &quot;llvm/Config/llvm-config.h&quot; #include &quot;llvm/LinkAllPasses.h&quot; +#include &quot;llvm/MC/MCTargetOptionsCommandFlags.h&quot; #include &quot;llvm/MC/TargetRegistry.h&quot; #include &quot;llvm/Option/Arg.h&quot; #include &quot;llvm/Option/ArgList.h&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 &quot;llvm/MC/MCStreamer.h&quot; #include &quot;llvm/MC/MCSubtargetInfo.h&quot; #include &quot;llvm/MC/MCTargetOptions.h&quot; +#include &quot;llvm/MC/MCTargetOptionsCommandFlags.h&quot; #include &quot;llvm/MC/TargetRegistry.h&quot; #include &quot;llvm/Option/Arg.h&quot; #include &quot;llvm/Option/ArgList.h&quot; @@ -408,7 +409,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &amp;Opts, std::unique_ptr&lt;MCRegisterInfo&gt; MRI(TheTarget-&gt;createMCRegInfo(Opts.Triple)); assert(MRI &amp;&amp; &quot;Unable to create target register info!&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