[llvm-branch-commits] [clang] 383e5d2 - [Driver] Don't warn on ObjC constant-literal flags for non-ObjC inputs (#200303)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Jun 5 09:27:16 PDT 2026
Author: Akira Hatanaka
Date: 2026-06-05T08:35:16-07:00
New Revision: 383e5d2a6907410dc3486604bdaae0c18cbf111c
URL: https://github.com/llvm/llvm-project/commit/383e5d2a6907410dc3486604bdaae0c18cbf111c
DIFF: https://github.com/llvm/llvm-project/commit/383e5d2a6907410dc3486604bdaae0c18cbf111c.diff
LOG: [Driver] Don't warn on ObjC constant-literal flags for non-ObjC inputs (#200303)
-fobjc-constant-literals and the per-kind
-f[no-]constant-ns{number,array, dictionary}-literals flags are only
acted on for Objective-C inputs. When a build system passes them
uniformly to every source via a shared response file, they go unclaimed
on assembly and C/C++ inputs and trigger:
error: argument unused during compilation: '-fobjc-constant-literals'
[-Werror,-Wunused-command-line-argument]
Mark the options NoArgumentUnused so the unused argument is ignored
regardless of input type or whether the cc1 or cc1as path runs. The
behavior of the flags is unchanged: only the positive forms are
forwarded to cc1, and only for ObjC inputs.
rdar://175647747
Added:
Modified:
clang/include/clang/Options/Options.td
clang/test/Driver/objc-constant-literals.m
Removed:
################################################################################
diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td
index 281ccc9614b58..4fd892e58df86 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -2138,7 +2138,7 @@ defm objc_constant_literals : BoolFOption<"objc-constant-literals",
LangOpts<"ObjCConstantLiterals">, DefaultFalse,
PosFlag<SetTrue, [], [CC1Option], "Enable">,
NegFlag<SetFalse, [], [], "Disable">,
- BothFlags<[], [ClangOption], " compile-time constant ObjC literals">>;
+ BothFlags<[NoArgumentUnused], [ClangOption], " compile-time constant ObjC literals">>;
def fconstant_array_class_EQ : Joined<["-"], "fconstant-array-class=">, Group<f_Group>,
Visibility<[ClangOption, CC1Option]>,
MarshallingInfoString<LangOpts<"ObjCConstantArrayClass">>;
@@ -3820,17 +3820,17 @@ defm constant_nsnumber_literals : BoolFOption<"constant-nsnumber-literals",
LangOpts<"ConstantNSNumberLiterals">, DefaultFalse,
PosFlag<SetTrue, [], [CC1Option], "Enable">,
NegFlag<SetFalse, [], [], "Disable">,
- BothFlags<[], [ClangOption], " compile-time constant NSNumber literals">>;
+ BothFlags<[NoArgumentUnused], [ClangOption], " compile-time constant NSNumber literals">>;
defm constant_nsarray_literals : BoolFOption<"constant-nsarray-literals",
LangOpts<"ConstantNSArrayLiterals">, DefaultFalse,
PosFlag<SetTrue, [], [CC1Option], "Enable">,
NegFlag<SetFalse, [], [], "Disable">,
- BothFlags<[], [ClangOption], " compile-time constant NSArray literals">>;
+ BothFlags<[NoArgumentUnused], [ClangOption], " compile-time constant NSArray literals">>;
defm constant_nsdictionary_literals : BoolFOption<"constant-nsdictionary-literals",
LangOpts<"ConstantNSDictionaryLiterals">, DefaultFalse,
PosFlag<SetTrue, [], [CC1Option], "Enable">,
NegFlag<SetFalse, [], [], "Disable">,
- BothFlags<[], [ClangOption], " compile-time constant NSDictionary literals">>;
+ BothFlags<[NoArgumentUnused], [ClangOption], " compile-time constant NSDictionary literals">>;
def fno_common : Flag<["-"], "fno-common">, Group<f_Group>,
Visibility<[ClangOption, CC1Option]>,
HelpText<"Compile common globals like normal definitions">;
diff --git a/clang/test/Driver/objc-constant-literals.m b/clang/test/Driver/objc-constant-literals.m
index 7903028d00541..aec39918d5feb 100644
--- a/clang/test/Driver/objc-constant-literals.m
+++ b/clang/test/Driver/objc-constant-literals.m
@@ -19,3 +19,32 @@
// DISABLED-NOT: -fconstant-nsnumber-literals
// DISABLED-NOT: -fconstant-nsarray-literals
// DISABLED-NOT: -fconstant-nsdictionary-literals
+
+// The constant literal flags are Objective-C only. A build system may still
+// pass them uniformly to non-ObjC inputs (e.g. assembly files via a shared
+// response file); they carry NoArgumentUnused so they don't trigger
+// -Wunused-command-line-argument under -Werror.
+// RUN: %clang -target arm64-apple-macosx11 -Werror \
+// RUN: -fobjc-constant-literals -fconstant-nsnumber-literals \
+// RUN: -fconstant-nsarray-literals -fconstant-nsdictionary-literals \
+// RUN: -x assembler -c %s -o /dev/null 2>&1 \
+// RUN: | FileCheck %s --check-prefix=IGNORED --allow-empty
+// RUN: %clang -target arm64-apple-macosx11 -Werror \
+// RUN: -fno-objc-constant-literals -fno-constant-nsnumber-literals \
+// RUN: -fno-constant-nsarray-literals -fno-constant-nsdictionary-literals \
+// RUN: -x assembler -c %s -o /dev/null 2>&1 \
+// RUN: | FileCheck %s --check-prefix=IGNORED --allow-empty
+
+// IGNORED-NOT: argument unused during compilation
+// IGNORED-NOT: -fobjc-constant-literals
+// IGNORED-NOT: -fconstant-nsnumber-literals
+// IGNORED-NOT: -fconstant-nsarray-literals
+// IGNORED-NOT: -fconstant-nsdictionary-literals
+
+// The same flags must also be ignored (and not forwarded to cc1) when compiling
+// non-ObjC C/C++ inputs.
+// RUN: %clang -target arm64-apple-macosx11 -Werror \
+// RUN: -fobjc-constant-literals -fconstant-nsnumber-literals \
+// RUN: -fconstant-nsarray-literals -fconstant-nsdictionary-literals \
+// RUN: -x c++ -c %s -o /dev/null 2>&1 \
+// RUN: | FileCheck %s --check-prefix=IGNORED --allow-empty
More information about the llvm-branch-commits
mailing list