@@ -434,8 +434,11 @@ class MarshallingInfoVisibility<KeyPathAndMacro kpm, code default>
434
434
AutoNormalizeEnum {}
435
435
436
436
// Key paths that are constant during parsing of options with the same key path prefix.
437
+ defvar cplusplus = LangOpts<"CPlusPlus">;
438
+ defvar c99 = LangOpts<"C99">;
437
439
defvar lang_std = LangOpts<"LangStd">;
438
440
defvar open_cl = LangOpts<"OpenCL">;
441
+ defvar gnu_mode = LangOpts<"GNUMode">;
439
442
440
443
defvar std = !strconcat("LangStandard::getLangStandardForKind(", lang_std.KeyPath, ")");
441
444
@@ -1619,9 +1622,19 @@ def ffreestanding : Flag<["-"], "ffreestanding">, Group<f_Group>, Flags<[CC1Opti
1619
1622
def fgnuc_version_EQ : Joined<["-"], "fgnuc-version=">, Group<f_Group>,
1620
1623
HelpText<"Sets various macros to claim compatibility with the given GCC version (default is 4.2.1)">,
1621
1624
Flags<[CC1Option, CoreOption]>;
1622
- def fgnu_keywords : Flag<["-"], "fgnu-keywords">, Group<f_Group>, Flags<[CC1Option]>,
1623
- HelpText<"Allow GNU-extension keywords regardless of language standard">;
1624
- defm gnu89_inline : OptInFFlag<"gnu89-inline", "Use the gnu89 inline semantics">;
1625
+ // We abuse '-f[no-]gnu-keywords' to force overriding all GNU-extension
1626
+ // keywords. This behavior is provided by GCC's poorly named '-fasm' flag,
1627
+ // while a subset (the non-C++ GNU keywords) is provided by GCC's
1628
+ // '-fgnu-keywords'. Clang conflates the two for simplicity under the single
1629
+ // name, as it doesn't seem a useful distinction.
1630
+ defm gnu_keywords : BoolFOption<"gnu-keywords",
1631
+ LangOpts<"GNUKeywords">, Default<gnu_mode.KeyPath>,
1632
+ PosFlag<SetTrue, [], "Allow GNU-extension keywords regardless of language standard">,
1633
+ NegFlag<SetFalse>, BothFlags<[CC1Option]>>;
1634
+ defm gnu89_inline : BoolFOption<"gnu89-inline",
1635
+ LangOpts<"GNUInline">, Default<!strconcat("!", c99.KeyPath, " && !", cplusplus.KeyPath)>,
1636
+ PosFlag<SetTrue, [CC1Option], "Use the gnu89 inline semantics">,
1637
+ NegFlag<SetFalse>>, ShouldParseIf<!strconcat("!", cplusplus.KeyPath)>;
1625
1638
def fgnu_runtime : Flag<["-"], "fgnu-runtime">, Group<f_Group>,
1626
1639
HelpText<"Generate output compatible with the standard GNU Objective-C runtime">;
1627
1640
def fheinous_gnu_extensions : Flag<["-"], "fheinous-gnu-extensions">, Flags<[CC1Option]>,
@@ -1965,7 +1978,6 @@ def fno_declspec : Flag<["-"], "fno-declspec">, Group<f_clang_Group>,
1965
1978
def fno_dollars_in_identifiers : Flag<["-"], "fno-dollars-in-identifiers">, Group<f_Group>,
1966
1979
HelpText<"Disallow '$' in identifiers">, Flags<[CC1Option]>;
1967
1980
def fno_eliminate_unused_debug_symbols : Flag<["-"], "fno-eliminate-unused-debug-symbols">, Group<f_Group>;
1968
- def fno_gnu_keywords : Flag<["-"], "fno-gnu-keywords">, Group<f_Group>, Flags<[CC1Option]>;
1969
1981
def fno_inline_functions : Flag<["-"], "fno-inline-functions">, Group<f_clang_Group>, Flags<[CC1Option]>;
1970
1982
def fno_inline : Flag<["-"], "fno-inline">, Group<f_clang_Group>, Flags<[CC1Option]>;
1971
1983
def fno_global_isel : Flag<["-"], "fno-global-isel">, Group<f_clang_Group>,
0 commit comments