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 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
