https://github.com/MatzeB updated 
https://github.com/llvm/llvm-project/pull/141698

>From cef4f070167474ac0e8d1eea903974a31ff9934d Mon Sep 17 00:00:00 2001
From: Matthias Braun <ma...@braunis.de>
Date: Tue, 27 May 2025 18:20:28 -0700
Subject: [PATCH 1/2] Check for unsupported target options even with
 -Qunused-arguments

---
 clang/lib/Driver/Driver.cpp            | 11 ++++-------
 clang/test/Driver/unsupported-option.c |  7 +++++++
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index a5a0393ad7912..8d16d3aeeefb6 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -5362,12 +5362,6 @@ void Driver::BuildJobs(Compilation &C) const {
     });
   }
 
-  // If the user passed -Qunused-arguments or there were errors, don't warn
-  // about any unused arguments.
-  if (Diags.hasErrorOccurred() ||
-      C.getArgs().hasArg(options::OPT_Qunused_arguments))
-    return;
-
   // Claim -fdriver-only here.
   (void)C.getArgs().hasArg(options::OPT_fdriver_only);
   // Claim -### here.
@@ -5420,7 +5414,10 @@ void Driver::BuildJobs(Compilation &C) const {
             !C.getActions().empty()) {
           Diag(diag::err_drv_unsupported_opt_for_target)
               << A->getSpelling() << getTargetTriple();
-        } else {
+        } else if (!Diags.hasErrorOccurred() &&
+                   !C.getArgs().hasArg(options::OPT_Qunused_arguments)) {
+          // If the user passed -Qunused-arguments or there were errors, don't
+          // warn about any unused arguments.
           Diag(clang::diag::warn_drv_unused_argument)
               << A->getAsString(C.getArgs());
         }
diff --git a/clang/test/Driver/unsupported-option.c 
b/clang/test/Driver/unsupported-option.c
index af836cf003374..f996772702abc 100644
--- a/clang/test/Driver/unsupported-option.c
+++ b/clang/test/Driver/unsupported-option.c
@@ -27,3 +27,10 @@
 // RUN: not %clang --target=x86_64 -### -mhtm -lc %s 2>&1 \
 // RUN:   | FileCheck %s -check-prefix=UNSUP_OPT
 // UNSUP_OPT: error: unsupported option
+
+
+// RUN: not %clang -c --target=aarch64-- -mfpu=crypto-neon-fp-armv8 %s 2>&1 | \
+// RUN: FileCheck %s --check-prefix=AARCH64
+// RUN: not %clang -c -Qunused-arguments --target=aarch64-- 
-mfpu=crypto-neon-fp-armv8 %s 2>&1 | \
+// RUN: FileCheck %s --check-prefix=AARCH64
+// AARCH64: error: unsupported option '-mfpu=' for target 'aarch64--'

>From 2fb154e8b305e7e3eb321cf352dd20c028b4e473 Mon Sep 17 00:00:00 2001
From: Matthias Braun <ma...@braunis.de>
Date: Wed, 28 May 2025 10:00:06 -0700
Subject: [PATCH 2/2] address review feedback, change logic to check for
 HadError earlier

- Address review feedback
- Change logic to check for `HasError()` before the loop again to be
  closer to the original behavior; fixes `x86-target-features.c`.
---
 clang/lib/Driver/Driver.cpp            | 11 +++++++----
 clang/test/Driver/unsupported-option.c |  8 +++-----
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 8d16d3aeeefb6..6aa0f4c9b1584 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -5362,6 +5362,12 @@ void Driver::BuildJobs(Compilation &C) const {
     });
   }
 
+  // If the user passed -Qunused-arguments or there were errors, don't
+  // warn about any unused arguments.
+  bool ReportUnusedArguments =
+      !Diags.hasErrorOccurred() &&
+      !C.getArgs().hasArg(options::OPT_Qunused_arguments);
+
   // Claim -fdriver-only here.
   (void)C.getArgs().hasArg(options::OPT_fdriver_only);
   // Claim -### here.
@@ -5414,10 +5420,7 @@ void Driver::BuildJobs(Compilation &C) const {
             !C.getActions().empty()) {
           Diag(diag::err_drv_unsupported_opt_for_target)
               << A->getSpelling() << getTargetTriple();
-        } else if (!Diags.hasErrorOccurred() &&
-                   !C.getArgs().hasArg(options::OPT_Qunused_arguments)) {
-          // If the user passed -Qunused-arguments or there were errors, don't
-          // warn about any unused arguments.
+        } else if (ReportUnusedArguments) {
           Diag(clang::diag::warn_drv_unused_argument)
               << A->getAsString(C.getArgs());
         }
diff --git a/clang/test/Driver/unsupported-option.c 
b/clang/test/Driver/unsupported-option.c
index f996772702abc..7234e52571582 100644
--- a/clang/test/Driver/unsupported-option.c
+++ b/clang/test/Driver/unsupported-option.c
@@ -29,8 +29,6 @@
 // UNSUP_OPT: error: unsupported option
 
 
-// RUN: not %clang -c --target=aarch64-- -mfpu=crypto-neon-fp-armv8 %s 2>&1 | \
-// RUN: FileCheck %s --check-prefix=AARCH64
-// RUN: not %clang -c -Qunused-arguments --target=aarch64-- 
-mfpu=crypto-neon-fp-armv8 %s 2>&1 | \
-// RUN: FileCheck %s --check-prefix=AARCH64
-// AARCH64: error: unsupported option '-mfpu=' for target 'aarch64--'
+// RUN: not %clang -c -Qunused-arguments --target=aarch64-- 
-mfpu=crypto-neon-fp-armv8 %s 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=QUNUSED_ARGUMENTS
+// QUNUSED_ARGUMENTS: error: unsupported option '-mfpu=' for target 'aarch64--'

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to