Clang Project

clang_source_code/include/clang/Driver/Options.td
1//===--- Options.td - Options for clang -----------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9//  This file defines the options accepted by clang.
10//
11//===----------------------------------------------------------------------===//
12
13// Include the common option parsing interfaces.
14include "llvm/Option/OptParser.td"
15
16/////////
17// Flags
18
19// DriverOption - The option is a "driver" option, and should not be forwarded
20// to other tools.
21def DriverOption : OptionFlag;
22
23// LinkerInput - The option is a linker input.
24def LinkerInput : OptionFlag;
25
26// NoArgumentUnused - Don't report argument unused warnings for this option; this
27// is useful for options like -static or -dynamic which a user may always end up
28// passing, even if the platform defaults to (or only supports) that option.
29def NoArgumentUnused : OptionFlag;
30
31// Unsupported - The option is unsupported, and the driver will reject command
32// lines that use it.
33def Unsupported : OptionFlag;
34
35// Ignored - The option is unsupported, and the driver will silently ignore it.
36def Ignored : OptionFlag;
37
38// CoreOption - This is considered a "core" Clang option, available in both
39// clang and clang-cl modes.
40def CoreOption : OptionFlag;
41
42// CLOption - This is a cl.exe compatibility option. Options with this flag
43// are made available when the driver is running in CL compatibility mode.
44def CLOption : OptionFlag;
45
46// CC1Option - This option should be accepted by clang -cc1.
47def CC1Option : OptionFlag;
48
49// CC1AsOption - This option should be accepted by clang -cc1as.
50def CC1AsOption : OptionFlag;
51
52// NoDriverOption - This option should not be accepted by the driver.
53def NoDriverOption : OptionFlag;
54
55// A short name to show in documentation. The name will be interpreted as rST.
56class DocName<string name> { string DocName = name; }
57
58// A brief description to show in documentation, interpreted as rST.
59class DocBrief<code descr> { code DocBrief = descr; }
60
61// Indicates that this group should be flattened into its parent when generating
62// documentation.
63class DocFlatten { bit DocFlatten = 1; }
64
65// Indicates that this warning is ignored, but accepted with a warning for
66// GCC compatibility.
67class IgnoredGCCCompat : Flags<[HelpHidden]> {}
68
69/////////
70// Groups
71
72def Action_Group : OptionGroup<"<action group>">, DocName<"Actions">,
73                   DocBrief<[{The action to perform on the input.}]>;
74
75// Meta-group for options which are only used for compilation,
76// and not linking etc.
77def CompileOnly_Group : OptionGroup<"<CompileOnly group>">,
78                        DocName<"Compilation flags">, DocBrief<[{
79Flags controlling the behavior of Clang during compilation. These flags have
80no effect during actions that do not perform compilation.}]>;
81
82def Preprocessor_Group : OptionGroup<"<Preprocessor group>">,
83                         Group<CompileOnly_Group>,
84                         DocName<"Preprocessor flags">, DocBrief<[{
85Flags controlling the behavior of the Clang preprocessor.}]>;
86
87def IncludePath_Group : OptionGroup<"<I/i group>">, Group<Preprocessor_Group>,
88                        DocName<"Include path management">,
89                        DocBrief<[{
90Flags controlling how ``#include``\s are resolved to files.}]>;
91
92def I_Group : OptionGroup<"<I group>">, Group<IncludePath_Group>, DocFlatten;
93def i_Group : OptionGroup<"<i group>">, Group<IncludePath_Group>, DocFlatten;
94def clang_i_Group : OptionGroup<"<clang i group>">, Group<i_Group>, DocFlatten;
95
96def M_Group : OptionGroup<"<M group>">, Group<Preprocessor_Group>,
97              DocName<"Dependency file generation">, DocBrief<[{
98Flags controlling generation of a dependency file for ``make``-like build
99systems.}]>;
100
101def d_Group : OptionGroup<"<d group>">, Group<Preprocessor_Group>,
102              DocName<"Dumping preprocessor state">, DocBrief<[{
103Flags allowing the state of the preprocessor to be dumped in various ways.}]>;
104
105def Diag_Group : OptionGroup<"<W/R group>">, Group<CompileOnly_Group>,
106                 DocName<"Diagnostic flags">, DocBrief<[{
107Flags controlling which warnings, errors, and remarks Clang will generate.
108See the :doc:`full list of warning and remark flags <DiagnosticsReference>`.}]>;
109
110def R_Group : OptionGroup<"<R group>">, Group<Diag_Group>, DocFlatten;
111def R_value_Group : OptionGroup<"<R (with value) group>">, Group<R_Group>,
112                    DocFlatten;
113def W_Group : OptionGroup<"<W group>">, Group<Diag_Group>, DocFlatten;
114def W_value_Group : OptionGroup<"<W (with value) group>">, Group<W_Group>,
115                    DocFlatten;
116
117def f_Group : OptionGroup<"<f group>">, Group<CompileOnly_Group>,
118              DocName<"Target-independent compilation options">;
119
120def f_clang_Group : OptionGroup<"<f (clang-only) group>">,
121                    Group<CompileOnly_Group>, DocFlatten;
122def pedantic_Group : OptionGroup<"<pedantic group>">, Group<f_Group>,
123                     DocFlatten;
124def opencl_Group : OptionGroup<"<opencl group>">, Group<f_Group>,
125                   DocName<"OpenCL flags">;
126
127def m_Group : OptionGroup<"<m group>">, Group<CompileOnly_Group>,
128              DocName<"Target-dependent compilation options">;
129
130// Feature groups - these take command line options that correspond directly to
131// target specific features and can be translated directly from command line
132// options.
133def m_aarch64_Features_Group : OptionGroup<"<aarch64 features group>">,
134                               Group<m_Group>, DocName<"AARCH64">;
135def m_amdgpu_Features_Group : OptionGroup<"<amdgpu features group>">,
136                              Group<m_Group>, DocName<"AMDGPU">;
137def m_arm_Features_Group : OptionGroup<"<arm features group>">,
138                           Group<m_Group>, DocName<"ARM">;
139def m_hexagon_Features_Group : OptionGroup<"<hexagon features group>">,
140                               Group<m_Group>, DocName<"Hexagon">;
141// The features added by this group will not be added to target features.
142// These are explicitly handled.
143def m_hexagon_Features_HVX_Group : OptionGroup<"<hexagon features group>">,
144                                   Group<m_Group>, DocName<"Hexagon">;
145def m_mips_Features_Group : OptionGroup<"<mips features group>">,
146                            Group<m_Group>, DocName<"MIPS">;
147def m_ppc_Features_Group : OptionGroup<"<ppc features group>">,
148                           Group<m_Group>, DocName<"PowerPC">;
149def m_wasm_Features_Group : OptionGroup<"<wasm features group>">,
150                            Group<m_Group>, DocName<"WebAssembly">;
151def m_x86_Features_Group : OptionGroup<"<x86 features group>">,
152                           Group<m_Group>, Flags<[CoreOption]>, DocName<"X86">;
153def m_riscv_Features_Group : OptionGroup<"<riscv features group>">,
154                             Group<m_Group>, DocName<"RISCV">;
155
156def m_libc_Group : OptionGroup<"<m libc group>">, Group<m_mips_Features_Group>,
157                   Flags<[HelpHidden]>;
158
159def O_Group : OptionGroup<"<O group>">, Group<CompileOnly_Group>,
160              DocName<"Optimization level">, DocBrief<[{
161Flags controlling how much optimization should be performed.}]>;
162
163def DebugInfo_Group : OptionGroup<"<g group>">, Group<CompileOnly_Group>,
164                      DocName<"Debug information generation">, DocBrief<[{
165Flags controlling how much and what kind of debug information should be
166generated.}]>;
167
168def g_Group : OptionGroup<"<g group>">, Group<DebugInfo_Group>,
169              DocName<"Kind and level of debug information">;
170def gN_Group : OptionGroup<"<gN group>">, Group<g_Group>,
171               DocName<"Debug level">;
172def ggdbN_Group : OptionGroup<"<ggdbN group>">, Group<gN_Group>, DocFlatten;
173def gTune_Group : OptionGroup<"<gTune group>">, Group<g_Group>,
174                  DocName<"Debugger to tune debug information for">;
175def g_flags_Group : OptionGroup<"<g flags group>">, Group<DebugInfo_Group>,
176                    DocName<"Debug information flags">;
177
178def StaticAnalyzer_Group : OptionGroup<"<Static analyzer group>">,
179                           DocName<"Static analyzer flags">, DocBrief<[{
180Flags controlling the behavior of the Clang Static Analyzer.}]>;
181
182// gfortran options that we recognize in the driver and pass along when
183// invoking GCC to compile Fortran code.
184def gfortran_Group : OptionGroup<"<gfortran group>">,
185                     DocName<"Fortran compilation flags">, DocBrief<[{
186Flags that will be passed onto the ``gfortran`` compiler when Clang is given
187a Fortran input.}]>;
188
189def Link_Group : OptionGroup<"<T/e/s/t/u group>">, DocName<"Linker flags">,
190                 DocBrief<[{Flags that are passed on to the linker}]>;
191def T_Group : OptionGroup<"<T group>">, Group<Link_Group>, DocFlatten;
192def u_Group : OptionGroup<"<u group>">, Group<Link_Group>, DocFlatten;
193
194def reserved_lib_Group : OptionGroup<"<reserved libs group>">,
195                         Flags<[Unsupported]>;
196
197// Temporary groups for clang options which we know we don't support,
198// but don't want to verbosely warn the user about.
199def clang_ignored_f_Group : OptionGroup<"<clang ignored f group>">,
200  Group<f_Group>, Flags<[Ignored]>;
201def clang_ignored_m_Group : OptionGroup<"<clang ignored m group>">,
202  Group<m_Group>, Flags<[Ignored]>;
203
204// Group for clang options in the process of deprecation.
205// Please include the version that deprecated the flag as comment to allow
206// easier garbage collection.
207def clang_ignored_legacy_options_Group : OptionGroup<"<clang legacy flags>">,
208  Group<f_Group>, Flags<[Ignored]>;
209
210// Retired with clang-5.0
211def : Flag<["-"], "fslp-vectorize-aggressive">, Group<clang_ignored_legacy_options_Group>;
212def : Flag<["-"], "fno-slp-vectorize-aggressive">, Group<clang_ignored_legacy_options_Group>;
213
214// Group that ignores all gcc optimizations that won't be implemented
215def clang_ignored_gcc_optimization_f_Group : OptionGroup<
216  "<clang_ignored_gcc_optimization_f_Group>">, Group<f_Group>, Flags<[Ignored]>;
217
218/////////
219// Options
220
221// The internal option ID must be a valid C++ identifier and results in a
222// clang::driver::options::OPT_XX enum constant for XX.
223//
224// We want to unambiguously be able to refer to options from the driver source
225// code, for this reason the option name is mangled into an ID. This mangling
226// isn't guaranteed to have an inverse, but for practical purposes it does.
227//
228// The mangling scheme is to ignore the leading '-', and perform the following
229// substitutions:
230//   _ => __
231//   - => _
232//   / => _SLASH
233//   # => _HASH
234//   ? => _QUESTION
235//   , => _COMMA
236//   = => _EQ
237//   C++ => CXX
238//   . => _
239
240// Developer Driver Options
241
242def internal_Group : OptionGroup<"<clang internal options>">, Flags<[HelpHidden]>;
243def internal_driver_Group : OptionGroup<"<clang driver internal options>">,
244  Group<internal_Group>, HelpText<"DRIVER OPTIONS">;
245def internal_debug_Group :
246  OptionGroup<"<clang debug/development internal options>">,
247  Group<internal_Group>, HelpText<"DEBUG/DEVELOPMENT OPTIONS">;
248
249class InternalDriverOpt : Group<internal_driver_Group>,
250  Flags<[DriverOption, HelpHidden]>;
251def driver_mode : Joined<["--"], "driver-mode=">, Group<internal_driver_Group>,
252  Flags<[CoreOption, DriverOption, HelpHidden]>,
253  HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', or 'cl'">;
254def rsp_quoting : Joined<["--"], "rsp-quoting=">, Group<internal_driver_Group>,
255  Flags<[CoreOption, DriverOption, HelpHidden]>,
256  HelpText<"Set the rsp quoting to either 'posix', or 'windows'">;
257def ccc_gcc_name : Separate<["-"], "ccc-gcc-name">, InternalDriverOpt,
258  HelpText<"Name for native GCC compiler">,
259  MetaVarName<"<gcc-path>">;
260
261class InternalDebugOpt : Group<internal_debug_Group>,
262  Flags<[DriverOption, HelpHidden, CoreOption]>;
263def ccc_install_dir : Separate<["-"], "ccc-install-dir">, InternalDebugOpt,
264  HelpText<"Simulate installation in the given directory">;
265def ccc_print_phases : Flag<["-"], "ccc-print-phases">, InternalDebugOpt,
266  HelpText<"Dump list of actions to perform">;
267def ccc_print_bindings : Flag<["-"], "ccc-print-bindings">, InternalDebugOpt,
268  HelpText<"Show bindings of tools to actions">;
269
270def ccc_arcmt_check : Flag<["-"], "ccc-arcmt-check">, InternalDriverOpt,
271  HelpText<"Check for ARC migration issues that need manual handling">;
272def ccc_arcmt_modify : Flag<["-"], "ccc-arcmt-modify">, InternalDriverOpt,
273  HelpText<"Apply modifications to files to conform to ARC">;
274def ccc_arcmt_migrate : Separate<["-"], "ccc-arcmt-migrate">, InternalDriverOpt,
275  HelpText<"Apply modifications and produces temporary files that conform to ARC">;
276def arcmt_migrate_report_output : Separate<["-"], "arcmt-migrate-report-output">,
277  HelpText<"Output path for the plist report">,  Flags<[CC1Option]>;
278def arcmt_migrate_emit_arc_errors : Flag<["-"], "arcmt-migrate-emit-errors">,
279  HelpText<"Emit ARC errors even if the migrator can fix them">,
280  Flags<[CC1Option]>;
281def gen_reproducer: Flag<["-"], "gen-reproducer">, InternalDebugOpt,
282  HelpText<"Auto-generates preprocessed source files and a reproduction script">;
283
284def _migrate : Flag<["--"], "migrate">, Flags<[DriverOption]>,
285  HelpText<"Run the migrator">;
286def ccc_objcmt_migrate : Separate<["-"], "ccc-objcmt-migrate">,
287  InternalDriverOpt,
288  HelpText<"Apply modifications and produces temporary files to migrate to "
289   "modern ObjC syntax">;
290def objcmt_migrate_literals : Flag<["-"], "objcmt-migrate-literals">, Flags<[CC1Option]>,
291  HelpText<"Enable migration to modern ObjC literals">;
292def objcmt_migrate_subscripting : Flag<["-"], "objcmt-migrate-subscripting">, Flags<[CC1Option]>,
293  HelpText<"Enable migration to modern ObjC subscripting">;
294def objcmt_migrate_property : Flag<["-"], "objcmt-migrate-property">, Flags<[CC1Option]>,
295  HelpText<"Enable migration to modern ObjC property">;
296def objcmt_migrate_all : Flag<["-"], "objcmt-migrate-all">, Flags<[CC1Option]>,
297  HelpText<"Enable migration to modern ObjC">;
298def objcmt_migrate_readonly_property : Flag<["-"], "objcmt-migrate-readonly-property">, Flags<[CC1Option]>,
299  HelpText<"Enable migration to modern ObjC readonly property">;
300def objcmt_migrate_readwrite_property : Flag<["-"], "objcmt-migrate-readwrite-property">, Flags<[CC1Option]>,
301  HelpText<"Enable migration to modern ObjC readwrite property">;
302def objcmt_migrate_property_dot_syntax : Flag<["-"], "objcmt-migrate-property-dot-syntax">, Flags<[CC1Option]>,
303  HelpText<"Enable migration of setter/getter messages to property-dot syntax">;
304def objcmt_migrate_annotation : Flag<["-"], "objcmt-migrate-annotation">, Flags<[CC1Option]>,
305  HelpText<"Enable migration to property and method annotations">;
306def objcmt_migrate_instancetype : Flag<["-"], "objcmt-migrate-instancetype">, Flags<[CC1Option]>,
307  HelpText<"Enable migration to infer instancetype for method result type">;
308def objcmt_migrate_nsmacros : Flag<["-"], "objcmt-migrate-ns-macros">, Flags<[CC1Option]>,
309  HelpText<"Enable migration to NS_ENUM/NS_OPTIONS macros">;
310def objcmt_migrate_protocol_conformance : Flag<["-"], "objcmt-migrate-protocol-conformance">, Flags<[CC1Option]>,
311  HelpText<"Enable migration to add protocol conformance on classes">;
312def objcmt_atomic_property : Flag<["-"], "objcmt-atomic-property">, Flags<[CC1Option]>,
313  HelpText<"Make migration to 'atomic' properties">;
314def objcmt_returns_innerpointer_property : Flag<["-"], "objcmt-returns-innerpointer-property">, Flags<[CC1Option]>,
315  HelpText<"Enable migration to annotate property with NS_RETURNS_INNER_POINTER">;
316def objcmt_ns_nonatomic_iosonly: Flag<["-"], "objcmt-ns-nonatomic-iosonly">, Flags<[CC1Option]>,
317  HelpText<"Enable migration to use NS_NONATOMIC_IOSONLY macro for setting property's 'atomic' attribute">;
318def objcmt_migrate_designated_init : Flag<["-"], "objcmt-migrate-designated-init">, Flags<[CC1Option]>,
319  HelpText<"Enable migration to infer NS_DESIGNATED_INITIALIZER for initializer methods">;
320def objcmt_whitelist_dir_path: Joined<["-"], "objcmt-whitelist-dir-path=">, Flags<[CC1Option]>,
321  HelpText<"Only modify files with a filename contained in the provided directory path">;
322// The misspelt "white-list" [sic] alias is due for removal.
323def : Joined<["-"], "objcmt-white-list-dir-path=">, Flags<[CC1Option]>,
324    Alias<objcmt_whitelist_dir_path>;
325
326// Make sure all other -ccc- options are rejected.
327def ccc_ : Joined<["-"], "ccc-">, Group<internal_Group>, Flags<[Unsupported]>;
328
329// Standard Options
330
331def _HASH_HASH_HASH : Flag<["-"], "###">, Flags<[DriverOption, CoreOption]>,
332    HelpText<"Print (but do not run) the commands to run for this compilation">;
333def _DASH_DASH : Option<["--"], "", KIND_REMAINING_ARGS>,
334    Flags<[DriverOption, CoreOption]>;
335def A : JoinedOrSeparate<["-"], "A">, Flags<[RenderJoined]>, Group<gfortran_Group>;
336def B : JoinedOrSeparate<["-"], "B">, MetaVarName<"<dir>">,
337    HelpText<"Add <dir> to search path for binaries and object files used implicitly">;
338def CC : Flag<["-"], "CC">, Flags<[CC1Option]>, Group<Preprocessor_Group>,
339    HelpText<"Include comments from within macros in preprocessed output">;
340def C : Flag<["-"], "C">, Flags<[CC1Option]>, Group<Preprocessor_Group>,
341    HelpText<"Include comments in preprocessed output">;
342def D : JoinedOrSeparate<["-"], "D">, Group<Preprocessor_Group>,
343    Flags<[CC1Option]>, MetaVarName<"<macro>=<value>">,
344    HelpText<"Define <macro> to <value> (or 1 if <value> omitted)">;
345def E : Flag<["-"], "E">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>,
346    HelpText<"Only run the preprocessor">;
347def F : JoinedOrSeparate<["-"], "F">, Flags<[RenderJoined,CC1Option]>,
348    HelpText<"Add directory to framework include search path">;
349def G : JoinedOrSeparate<["-"], "G">, Flags<[DriverOption]>, Group<m_Group>,
350    MetaVarName<"<size>">, HelpText<"Put objects of at most <size> bytes "
351    "into small data section (MIPS / Hexagon)">;
352def G_EQ : Joined<["-"], "G=">, Flags<[DriverOption]>, Group<m_Group>, Alias<G>;
353def H : Flag<["-"], "H">, Flags<[CC1Option]>, Group<Preprocessor_Group>,
354    HelpText<"Show header includes and nesting depth">;
355def I_ : Flag<["-"], "I-">, Group<I_Group>,
356    HelpText<"Restrict all prior -I flags to double-quoted inclusion and "
357             "remove current directory from include path">;
358def I : JoinedOrSeparate<["-"], "I">, Group<I_Group>,
359    Flags<[CC1Option,CC1AsOption]>, MetaVarName<"<dir>">,
360    HelpText<"Add directory to include search path">;
361def L : JoinedOrSeparate<["-"], "L">, Flags<[RenderJoined]>, Group<Link_Group>,
362    MetaVarName<"<dir>">, HelpText<"Add directory to library search path">;
363def MD : Flag<["-"], "MD">, Group<M_Group>,
364    HelpText<"Write a depfile containing user and system headers">;
365def MMD : Flag<["-"], "MMD">, Group<M_Group>,
366    HelpText<"Write a depfile containing user headers">;
367def M : Flag<["-"], "M">, Group<M_Group>,
368    HelpText<"Like -MD, but also implies -E and writes to stdout by default">;
369def MM : Flag<["-"], "MM">, Group<M_Group>,
370    HelpText<"Like -MMD, but also implies -E and writes to stdout by default">;
371def MF : JoinedOrSeparate<["-"], "MF">, Group<M_Group>,
372    HelpText<"Write depfile output from -MMD, -MD, -MM, or -M to <file>">,
373    MetaVarName<"<file>">;
374def MG : Flag<["-"], "MG">, Group<M_Group>, Flags<[CC1Option]>,
375    HelpText<"Add missing headers to depfile">;
376def MJ : JoinedOrSeparate<["-"], "MJ">, Group<M_Group>,
377    HelpText<"Write a compilation database entry per input">;
378def MP : Flag<["-"], "MP">, Group<M_Group>, Flags<[CC1Option]>,
379    HelpText<"Create phony target for each dependency (other than main file)">;
380def MQ : JoinedOrSeparate<["-"], "MQ">, Group<M_Group>, Flags<[CC1Option]>,
381    HelpText<"Specify name of main file output to quote in depfile">;
382def MT : JoinedOrSeparate<["-"], "MT">, Group<M_Group>, Flags<[CC1Option]>,
383    HelpText<"Specify name of main file output in depfile">;
384def MV : Flag<["-"], "MV">, Group<M_Group>, Flags<[CC1Option]>,
385    HelpText<"Use NMake/Jom format for the depfile">;
386def Mach : Flag<["-"], "Mach">, Group<Link_Group>;
387def O0 : Flag<["-"], "O0">, Group<O_Group>, Flags<[CC1Option, HelpHidden]>;
388def O4 : Flag<["-"], "O4">, Group<O_Group>, Flags<[CC1Option, HelpHidden]>;
389def ObjCXX : Flag<["-"], "ObjC++">, Flags<[DriverOption]>,
390  HelpText<"Treat source input files as Objective-C++ inputs">;
391def ObjC : Flag<["-"], "ObjC">, Flags<[DriverOption]>,
392  HelpText<"Treat source input files as Objective-C inputs">;
393def O : Joined<["-"], "O">, Group<O_Group>, Flags<[CC1Option]>;
394def O_flag : Flag<["-"], "O">, Flags<[CC1Option]>, Alias<O>, AliasArgs<["2"]>;
395def Ofast : Joined<["-"], "Ofast">, Group<O_Group>, Flags<[CC1Option]>;
396def P : Flag<["-"], "P">, Flags<[CC1Option]>, Group<Preprocessor_Group>,
397  HelpText<"Disable linemarker output in -E mode">;
398def Qy : Flag<["-"], "Qy">, Flags<[CC1Option]>,
399  HelpText<"Emit metadata containing compiler name and version">;
400def Qn : Flag<["-"], "Qn">, Flags<[CC1Option]>,
401  HelpText<"Do not emit metadata containing compiler name and version">;
402def : Flag<["-"], "fident">, Group<f_Group>, Alias<Qy>, Flags<[CC1Option]>;
403def : Flag<["-"], "fno-ident">, Group<f_Group>, Alias<Qn>, Flags<[CC1Option]>;
404def Qunused_arguments : Flag<["-"], "Qunused-arguments">, Flags<[DriverOption, CoreOption]>,
405  HelpText<"Don't emit warning for unused driver arguments">;
406def Q : Flag<["-"], "Q">, IgnoredGCCCompat;
407def Rpass_EQ : Joined<["-"], "Rpass=">, Group<R_value_Group>, Flags<[CC1Option]>,
408  HelpText<"Report transformations performed by optimization passes whose "
409           "name matches the given POSIX regular expression">;
410def Rpass_missed_EQ : Joined<["-"], "Rpass-missed=">, Group<R_value_Group>,
411  Flags<[CC1Option]>,
412  HelpText<"Report missed transformations by optimization passes whose "
413           "name matches the given POSIX regular expression">;
414def Rpass_analysis_EQ : Joined<["-"], "Rpass-analysis=">, Group<R_value_Group>,
415  Flags<[CC1Option]>,
416  HelpText<"Report transformation analysis from optimization passes whose "
417           "name matches the given POSIX regular expression">;
418def R_Joined : Joined<["-"], "R">, Group<R_Group>, Flags<[CC1Option, CoreOption]>,
419  MetaVarName<"<remark>">, HelpText<"Enable the specified remark">;
420def S : Flag<["-"], "S">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>,
421  HelpText<"Only run preprocess and compilation steps">;
422def Tbss : JoinedOrSeparate<["-"], "Tbss">, Group<T_Group>,
423  MetaVarName<"<addr>">, HelpText<"Set starting address of BSS to <addr>">;
424def Tdata : JoinedOrSeparate<["-"], "Tdata">, Group<T_Group>,
425  MetaVarName<"<addr>">, HelpText<"Set starting address of DATA to <addr>">;
426def Ttext : JoinedOrSeparate<["-"], "Ttext">, Group<T_Group>,
427  MetaVarName<"<addr>">, HelpText<"Set starting address of TEXT to <addr>">;
428def T : JoinedOrSeparate<["-"], "T">, Group<T_Group>,
429  MetaVarName<"<script>">, HelpText<"Specify <script> as linker script">;
430def U : JoinedOrSeparate<["-"], "U">, Group<Preprocessor_Group>,
431  Flags<[CC1Option]>, MetaVarName<"<macro>">, HelpText<"Undefine macro <macro>">;
432def V : JoinedOrSeparate<["-"], "V">, Flags<[DriverOption, Unsupported]>;
433def Wa_COMMA : CommaJoined<["-"], "Wa,">,
434  HelpText<"Pass the comma separated arguments in <arg> to the assembler">,
435  MetaVarName<"<arg>">;
436def Wall : Flag<["-"], "Wall">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
437def WCL4 : Flag<["-"], "WCL4">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
438def Wdeprecated : Flag<["-"], "Wdeprecated">, Group<W_Group>, Flags<[CC1Option]>,
439  HelpText<"Enable warnings for deprecated constructs and define __DEPRECATED">;
440def Wno_deprecated : Flag<["-"], "Wno-deprecated">, Group<W_Group>, Flags<[CC1Option]>;
441def Wl_COMMA : CommaJoined<["-"], "Wl,">, Flags<[LinkerInput, RenderAsInput]>,
442  HelpText<"Pass the comma separated arguments in <arg> to the linker">,
443  MetaVarName<"<arg>">, Group<Link_Group>;
444// FIXME: This is broken; these should not be Joined arguments.
445def Wno_nonportable_cfstrings : Joined<["-"], "Wno-nonportable-cfstrings">, Group<W_Group>,
446  Flags<[CC1Option]>;
447def Wnonportable_cfstrings : Joined<["-"], "Wnonportable-cfstrings">, Group<W_Group>,
448  Flags<[CC1Option]>;
449def Wp_COMMA : CommaJoined<["-"], "Wp,">,
450  HelpText<"Pass the comma separated arguments in <arg> to the preprocessor">,
451  MetaVarName<"<arg>">, Group<Preprocessor_Group>;
452def Wwrite_strings : Flag<["-"], "Wwrite-strings">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
453def Wno_write_strings : Flag<["-"], "Wno-write-strings">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
454def W_Joined : Joined<["-"], "W">, Group<W_Group>, Flags<[CC1Option, CoreOption]>,
455  MetaVarName<"<warning>">, HelpText<"Enable the specified warning">;
456def Xanalyzer : Separate<["-"], "Xanalyzer">,
457  HelpText<"Pass <arg> to the static analyzer">, MetaVarName<"<arg>">,
458  Group<StaticAnalyzer_Group>;
459def Xarch__ : JoinedAndSeparate<["-"], "Xarch_">, Flags<[DriverOption]>;
460def Xassembler : Separate<["-"], "Xassembler">,
461  HelpText<"Pass <arg> to the assembler">, MetaVarName<"<arg>">,
462  Group<CompileOnly_Group>;
463def Xclang : Separate<["-"], "Xclang">,
464  HelpText<"Pass <arg> to the clang compiler">, MetaVarName<"<arg>">,
465  Flags<[DriverOption, CoreOption]>, Group<CompileOnly_Group>;
466def Xcuda_fatbinary : Separate<["-"], "Xcuda-fatbinary">,
467  HelpText<"Pass <arg> to fatbinary invocation">, MetaVarName<"<arg>">;
468def Xcuda_ptxas : Separate<["-"], "Xcuda-ptxas">,
469  HelpText<"Pass <arg> to the ptxas assembler">, MetaVarName<"<arg>">;
470def Xopenmp_target : Separate<["-"], "Xopenmp-target">,
471  HelpText<"Pass <arg> to the target offloading toolchain.">, MetaVarName<"<arg>">;
472def Xopenmp_target_EQ : JoinedAndSeparate<["-"], "Xopenmp-target=">,
473  HelpText<"Pass <arg> to the target offloading toolchain identified by <triple>.">,
474  MetaVarName<"<triple> <arg>">;
475def z : Separate<["-"], "z">, Flags<[LinkerInput, RenderAsInput]>,
476  HelpText<"Pass -z <arg> to the linker">, MetaVarName<"<arg>">,
477  Group<Link_Group>;
478def Xlinker : Separate<["-"], "Xlinker">, Flags<[LinkerInput, RenderAsInput]>,
479  HelpText<"Pass <arg> to the linker">, MetaVarName<"<arg>">,
480  Group<Link_Group>;
481def Xpreprocessor : Separate<["-"], "Xpreprocessor">, Group<Preprocessor_Group>,
482  HelpText<"Pass <arg> to the preprocessor">, MetaVarName<"<arg>">;
483def X_Flag : Flag<["-"], "X">, Group<Link_Group>;
484def X_Joined : Joined<["-"], "X">, IgnoredGCCCompat;
485def Z_Flag : Flag<["-"], "Z">, Group<Link_Group>;
486// FIXME: All we do with this is reject it. Remove.
487def Z_Joined : Joined<["-"], "Z">;
488def all__load : Flag<["-"], "all_load">;
489def allowable__client : Separate<["-"], "allowable_client">;
490def ansi : Flag<["-", "--"], "ansi">;
491def arch__errors__fatal : Flag<["-"], "arch_errors_fatal">;
492def arch : Separate<["-"], "arch">, Flags<[DriverOption]>;
493def arch__only : Separate<["-"], "arch_only">;
494def a : Joined<["-"], "a">;
495def autocomplete : Joined<["--"], "autocomplete=">;
496def bind__at__load : Flag<["-"], "bind_at_load">;
497def bundle__loader : Separate<["-"], "bundle_loader">;
498def bundle : Flag<["-"], "bundle">;
499def b : JoinedOrSeparate<["-"], "b">, Flags<[Unsupported]>;
500def cfguard : Flag<["-"], "cfguard">, Flags<[CC1Option]>,
501  HelpText<"Emit tables required for Windows Control Flow Guard.">;
502def cl_opt_disable : Flag<["-"], "cl-opt-disable">, Group<opencl_Group>, Flags<[CC1Option]>,
503  HelpText<"OpenCL only. This option disables all optimizations. By default optimizations are enabled.">;
504def cl_strict_aliasing : Flag<["-"], "cl-strict-aliasing">, Group<opencl_Group>, Flags<[CC1Option]>,
505  HelpText<"OpenCL only. This option is added for compatibility with OpenCL 1.0.">;
506def cl_single_precision_constant : Flag<["-"], "cl-single-precision-constant">, Group<opencl_Group>, Flags<[CC1Option]>,
507  HelpText<"OpenCL only. Treat double precision floating-point constant as single precision constant.">;
508def cl_finite_math_only : Flag<["-"], "cl-finite-math-only">, Group<opencl_Group>, Flags<[CC1Option]>,
509  HelpText<"OpenCL only. Allow floating-point optimizations that assume arguments and results are not NaNs or +-Inf.">;
510def cl_kernel_arg_info : Flag<["-"], "cl-kernel-arg-info">, Group<opencl_Group>, Flags<[CC1Option]>,
511  HelpText<"OpenCL only. Generate kernel argument metadata.">;
512def cl_unsafe_math_optimizations : Flag<["-"], "cl-unsafe-math-optimizations">, Group<opencl_Group>, Flags<[CC1Option]>,
513  HelpText<"OpenCL only. Allow unsafe floating-point optimizations.  Also implies -cl-no-signed-zeros and -cl-mad-enable.">;
514def cl_fast_relaxed_math : Flag<["-"], "cl-fast-relaxed-math">, Group<opencl_Group>, Flags<[CC1Option]>,
515  HelpText<"OpenCL only. Sets -cl-finite-math-only and -cl-unsafe-math-optimizations, and defines __FAST_RELAXED_MATH__.">;
516def cl_mad_enable : Flag<["-"], "cl-mad-enable">, Group<opencl_Group>, Flags<[CC1Option]>,
517  HelpText<"OpenCL only. Allow use of less precise MAD computations in the generated binary.">;
518def cl_no_signed_zeros : Flag<["-"], "cl-no-signed-zeros">, Group<opencl_Group>, Flags<[CC1Option]>,
519  HelpText<"OpenCL only. Allow use of less precise no signed zeros computations in the generated binary.">;
520def cl_std_EQ : Joined<["-"], "cl-std=">, Group<opencl_Group>, Flags<[CC1Option]>,
521  HelpText<"OpenCL language standard to compile for.">, Values<"cl,CL,cl1.1,CL1.1,cl1.2,CL1.2,cl2.0,CL2.0,c++">;
522def cl_denorms_are_zero : Flag<["-"], "cl-denorms-are-zero">, Group<opencl_Group>, Flags<[CC1Option]>,
523  HelpText<"OpenCL only. Allow denormals to be flushed to zero.">;
524def cl_fp32_correctly_rounded_divide_sqrt : Flag<["-"], "cl-fp32-correctly-rounded-divide-sqrt">, Group<opencl_Group>, Flags<[CC1Option]>,
525  HelpText<"OpenCL only. Specify that single precision floating-point divide and sqrt used in the program source are correctly rounded.">;
526def cl_uniform_work_group_size : Flag<["-"], "cl-uniform-work-group-size">, Group<opencl_Group>, Flags<[CC1Option]>,
527  HelpText<"OpenCL only. Defines that the global work-size be a multiple of the work-group size specified to clEnqueueNDRangeKernel">;
528def client__name : JoinedOrSeparate<["-"], "client_name">;
529def combine : Flag<["-", "--"], "combine">, Flags<[DriverOption, Unsupported]>;
530def compatibility__version : JoinedOrSeparate<["-"], "compatibility_version">;
531def config : Separate<["--"], "config">, Flags<[DriverOption]>,
532  HelpText<"Specifies configuration file">;
533def config_system_dir_EQ : Joined<["--"], "config-system-dir=">, Flags<[DriverOption, HelpHidden]>,
534  HelpText<"System directory for configuration files">;
535def config_user_dir_EQ : Joined<["--"], "config-user-dir=">, Flags<[DriverOption, HelpHidden]>,
536  HelpText<"User directory for configuration files">;
537def coverage : Flag<["-", "--"], "coverage">, Flags<[CoreOption]>;
538def cpp_precomp : Flag<["-"], "cpp-precomp">, Group<clang_ignored_f_Group>;
539def current__version : JoinedOrSeparate<["-"], "current_version">;
540def cxx_isystem : JoinedOrSeparate<["-"], "cxx-isystem">, Group<clang_i_Group>,
541  HelpText<"Add directory to the C++ SYSTEM include search path">, Flags<[CC1Option]>,
542  MetaVarName<"<directory>">;
543def c : Flag<["-"], "c">, Flags<[DriverOption]>, Group<Action_Group>,
544  HelpText<"Only run preprocess, compile, and assemble steps">;
545def cuda_device_only : Flag<["--"], "cuda-device-only">,
546  HelpText<"Compile CUDA code for device only">;
547def cuda_host_only : Flag<["--"], "cuda-host-only">,
548  HelpText<"Compile CUDA code for host only.  Has no effect on non-CUDA "
549           "compilations.">;
550def cuda_compile_host_device : Flag<["--"], "cuda-compile-host-device">,
551  HelpText<"Compile CUDA code for both host and device (default).  Has no "
552           "effect on non-CUDA compilations.">;
553def cuda_include_ptx_EQ : Joined<["--"], "cuda-include-ptx=">, Flags<[DriverOption]>,
554  HelpText<"Include PTX for the following GPU architecture (e.g. sm_35) or 'all'. May be specified more than once.">;
555def no_cuda_include_ptx_EQ : Joined<["--"], "no-cuda-include-ptx=">, Flags<[DriverOption]>,
556  HelpText<"Do not include PTX for the following GPU architecture (e.g. sm_35) or 'all'. May be specified more than once.">;
557def cuda_gpu_arch_EQ : Joined<["--"], "cuda-gpu-arch=">, Flags<[DriverOption]>,
558  HelpText<"CUDA GPU architecture (e.g. sm_35).  May be specified more than once.">;
559def hip_link : Flag<["--"], "hip-link">,
560  HelpText<"Link clang-offload-bundler bundles for HIP">;
561def no_cuda_gpu_arch_EQ : Joined<["--"], "no-cuda-gpu-arch=">, Flags<[DriverOption]>,
562  HelpText<"Remove GPU architecture (e.g. sm_35) from the list of GPUs to compile for. "
563           "'all' resets the list to its default value.">;
564def cuda_noopt_device_debug : Flag<["--"], "cuda-noopt-device-debug">,
565  HelpText<"Enable device-side debug info generation. Disables ptxas optimizations.">;
566def no_cuda_version_check : Flag<["--"], "no-cuda-version-check">,
567  HelpText<"Don't error out if the detected version of the CUDA install is "
568           "too low for the requested CUDA gpu architecture.">;
569def no_cuda_noopt_device_debug : Flag<["--"], "no-cuda-noopt-device-debug">;
570def cuda_path_EQ : Joined<["--"], "cuda-path=">, Group<i_Group>,
571  HelpText<"CUDA installation path">;
572def cuda_path_ignore_env : Flag<["--"], "cuda-path-ignore-env">, Group<i_Group>,
573  HelpText<"Ignore environment variables to detect CUDA installation">;
574def ptxas_path_EQ : Joined<["--"], "ptxas-path=">, Group<i_Group>,
575  HelpText<"Path to ptxas (used for compiling CUDA code)">;
576def fcuda_flush_denormals_to_zero : Flag<["-"], "fcuda-flush-denormals-to-zero">,
577  Flags<[CC1Option]>, HelpText<"Flush denormal floating point values to zero in CUDA device mode.">;
578def fno_cuda_flush_denormals_to_zero : Flag<["-"], "fno-cuda-flush-denormals-to-zero">;
579def fcuda_approx_transcendentals : Flag<["-"], "fcuda-approx-transcendentals">,
580  Flags<[CC1Option]>, HelpText<"Use approximate transcendental functions">;
581def fno_cuda_approx_transcendentals : Flag<["-"], "fno-cuda-approx-transcendentals">;
582def fgpu_rdc : Flag<["-"], "fgpu-rdc">, Flags<[CC1Option]>,
583  HelpText<"Generate relocatable device code, also known as separate compilation mode.">;
584def fno_gpu_rdc : Flag<["-"], "fno-gpu-rdc">;
585def : Flag<["-"], "fcuda-rdc">, Alias<fgpu_rdc>;
586def : Flag<["-"], "fno-cuda-rdc">, Alias<fno_gpu_rdc>;
587def fcuda_short_ptr : Flag<["-"], "fcuda-short-ptr">, Flags<[CC1Option]>,
588  HelpText<"Use 32-bit pointers for accessing const/local/shared address spaces.">;
589def fno_cuda_short_ptr : Flag<["-"], "fno-cuda-short-ptr">;
590def hip_device_lib_path_EQ : Joined<["--"], "hip-device-lib-path=">, Group<Link_Group>,
591  HelpText<"HIP device library path">;
592def hip_device_lib_EQ : Joined<["--"], "hip-device-lib=">, Group<Link_Group>,
593  HelpText<"HIP device library">;
594def fhip_dump_offload_linker_script : Flag<["-"], "fhip-dump-offload-linker-script">,
595  Group<f_Group>, Flags<[NoArgumentUnused, HelpHidden]>;
596def libomptarget_nvptx_path_EQ : Joined<["--"], "libomptarget-nvptx-path=">, Group<i_Group>,
597  HelpText<"Path to libomptarget-nvptx libraries">;
598def dA : Flag<["-"], "dA">, Group<d_Group>;
599def dD : Flag<["-"], "dD">, Group<d_Group>, Flags<[CC1Option]>,
600  HelpText<"Print macro definitions in -E mode in addition to normal output">;
601def dI : Flag<["-"], "dI">, Group<d_Group>, Flags<[CC1Option]>,
602  HelpText<"Print include directives in -E mode in addition to normal output">;
603def dM : Flag<["-"], "dM">, Group<d_Group>, Flags<[CC1Option]>,
604  HelpText<"Print macro definitions in -E mode instead of normal output">;
605def dead__strip : Flag<["-"], "dead_strip">;
606def dependency_file : Separate<["-"], "dependency-file">, Flags<[CC1Option]>,
607  HelpText<"Filename (or -) to write dependency output to">;
608def dependency_dot : Separate<["-"], "dependency-dot">, Flags<[CC1Option]>,
609  HelpText<"Filename to write DOT-formatted header dependencies to">;
610def module_dependency_dir : Separate<["-"], "module-dependency-dir">,
611  Flags<[CC1Option]>, HelpText<"Directory to dump module dependencies to">;
612def dumpmachine : Flag<["-"], "dumpmachine">;
613def dumpspecs : Flag<["-"], "dumpspecs">, Flags<[Unsupported]>;
614def dumpversion : Flag<["-"], "dumpversion">;
615def dylib__file : Separate<["-"], "dylib_file">;
616def dylinker__install__name : JoinedOrSeparate<["-"], "dylinker_install_name">;
617def dylinker : Flag<["-"], "dylinker">;
618def dynamiclib : Flag<["-"], "dynamiclib">;
619def dynamic : Flag<["-"], "dynamic">, Flags<[NoArgumentUnused]>;
620def d_Flag : Flag<["-"], "d">, Group<d_Group>;
621def d_Joined : Joined<["-"], "d">, Group<d_Group>;
622def emit_ast : Flag<["-"], "emit-ast">,
623  HelpText<"Emit Clang AST files for source inputs">;
624def emit_llvm : Flag<["-"], "emit-llvm">, Flags<[CC1Option]>, Group<Action_Group>,
625  HelpText<"Use the LLVM representation for assembler and object files">;
626def exported__symbols__list : Separate<["-"], "exported_symbols_list">;
627def e : JoinedOrSeparate<["-"], "e">, Group<Link_Group>;
628def fPIC : Flag<["-"], "fPIC">, Group<f_Group>;
629def fno_PIC : Flag<["-"], "fno-PIC">, Group<f_Group>;
630def fPIE : Flag<["-"], "fPIE">, Group<f_Group>;
631def fno_PIE : Flag<["-"], "fno-PIE">, Group<f_Group>;
632def faccess_control : Flag<["-"], "faccess-control">, Group<f_Group>;
633def falign_functions : Flag<["-"], "falign-functions">, Group<f_Group>;
634def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<f_Group>;
635def fno_align_functions: Flag<["-"], "fno-align-functions">, Group<f_Group>;
636def fallow_unsupported : Flag<["-"], "fallow-unsupported">, Group<f_Group>;
637def fapple_kext : Flag<["-"], "fapple-kext">, Group<f_Group>, Flags<[CC1Option]>,
638  HelpText<"Use Apple's kernel extensions ABI">;
639def fapple_pragma_pack : Flag<["-"], "fapple-pragma-pack">, Group<f_Group>, Flags<[CC1Option]>,
640  HelpText<"Enable Apple gcc-compatible #pragma pack handling">;
641def shared_libsan : Flag<["-"], "shared-libsan">,
642  HelpText<"Dynamically link the sanitizer runtime">;
643def static_libsan : Flag<["-"], "static-libsan">,
644  HelpText<"Statically link the sanitizer runtime">;
645def : Flag<["-"], "shared-libasan">, Alias<shared_libsan>;
646def fasm : Flag<["-"], "fasm">, Group<f_Group>;
647
648def fasm_blocks : Flag<["-"], "fasm-blocks">, Group<f_Group>, Flags<[CC1Option]>;
649def fno_asm_blocks : Flag<["-"], "fno-asm-blocks">, Group<f_Group>;
650
651def fassume_sane_operator_new : Flag<["-"], "fassume-sane-operator-new">, Group<f_Group>;
652def fastcp : Flag<["-"], "fastcp">, Group<f_Group>;
653def fastf : Flag<["-"], "fastf">, Group<f_Group>;
654def fast : Flag<["-"], "fast">, Group<f_Group>;
655def fasynchronous_unwind_tables : Flag<["-"], "fasynchronous-unwind-tables">, Group<f_Group>;
656
657def fdouble_square_bracket_attributes : Flag<[ "-" ], "fdouble-square-bracket-attributes">,
658  Group<f_Group>, Flags<[DriverOption, CC1Option]>,
659  HelpText<"Enable '[[]]' attributes in all C and C++ language modes">;
660def fno_double_square_bracket_attributes : Flag<[ "-" ], "fno-double-square-bracket-attributes">,
661  Group<f_Group>, Flags<[DriverOption, CC1Option]>,
662  HelpText<"Disable '[[]]' attributes in all C and C++ language modes">;
663
664def fautolink : Flag <["-"], "fautolink">, Group<f_Group>;
665def fno_autolink : Flag <["-"], "fno-autolink">, Group<f_Group>,
666  Flags<[DriverOption, CC1Option]>,
667  HelpText<"Disable generation of linker directives for automatic library linking">;
668
669// C++ Coroutines TS
670def fcoroutines_ts : Flag <["-"], "fcoroutines-ts">, Group<f_Group>,
671  Flags<[DriverOption, CC1Option]>,
672  HelpText<"Enable support for the C++ Coroutines TS">;
673def fno_coroutines_ts : Flag <["-"], "fno-coroutines-ts">, Group<f_Group>,
674  Flags<[DriverOption]>;
675
676def fembed_bitcode_EQ : Joined<["-"], "fembed-bitcode=">,
677    Group<f_Group>, Flags<[DriverOption, CC1Option, CC1AsOption]>, MetaVarName<"<option>">,
678    HelpText<"Embed LLVM bitcode (option: off, all, bitcode, marker)">;
679def fembed_bitcode : Flag<["-"], "fembed-bitcode">, Group<f_Group>,
680  Alias<fembed_bitcode_EQ>, AliasArgs<["all"]>,
681  HelpText<"Embed LLVM IR bitcode as data">;
682def fembed_bitcode_marker : Flag<["-"], "fembed-bitcode-marker">,
683  Alias<fembed_bitcode_EQ>, AliasArgs<["marker"]>,
684  HelpText<"Embed placeholder LLVM IR data as a marker">;
685def fgnu_inline_asm : Flag<["-"], "fgnu-inline-asm">, Group<f_Group>, Flags<[DriverOption]>;
686def fno_gnu_inline_asm : Flag<["-"], "fno-gnu-inline-asm">, Group<f_Group>,
687  Flags<[DriverOption, CC1Option]>,
688  HelpText<"Disable GNU style inline asm">;
689
690def fprofile_sample_use : Flag<["-"], "fprofile-sample-use">, Group<f_Group>,
691    Flags<[CoreOption]>;
692def fno_profile_sample_use : Flag<["-"], "fno-profile-sample-use">, Group<f_Group>,
693    Flags<[CoreOption]>;
694def fprofile_sample_use_EQ : Joined<["-"], "fprofile-sample-use=">,
695    Group<f_Group>, Flags<[DriverOption, CC1Option]>,
696    HelpText<"Enable sample-based profile guided optimizations">;
697def fprofile_sample_accurate : Flag<["-"], "fprofile-sample-accurate">,
698    Group<f_Group>, Flags<[DriverOption, CC1Option]>,
699    HelpText<"Specifies that the sample profile is accurate">,
700    DocBrief<[{Specifies that the sample profile is accurate. If the sample
701               profile is accurate, callsites without profile samples are marked
702               as cold. Otherwise, treat callsites without profile samples as if
703               we have no profile}]>;
704def fno_profile_sample_accurate : Flag<["-"], "fno-profile-sample-accurate">,
705  Group<f_Group>, Flags<[DriverOption]>;
706def fauto_profile : Flag<["-"], "fauto-profile">, Group<f_Group>,
707    Alias<fprofile_sample_use>;
708def fno_auto_profile : Flag<["-"], "fno-auto-profile">, Group<f_Group>,
709    Alias<fno_profile_sample_use>;
710def fauto_profile_EQ : Joined<["-"], "fauto-profile=">,
711    Alias<fprofile_sample_use_EQ>;
712def fauto_profile_accurate : Flag<["-"], "fauto-profile-accurate">,
713    Group<f_Group>, Alias<fprofile_sample_accurate>;
714def fno_auto_profile_accurate : Flag<["-"], "fno-auto-profile-accurate">,
715    Group<f_Group>, Alias<fno_profile_sample_accurate>;
716def fdebug_info_for_profiling : Flag<["-"], "fdebug-info-for-profiling">, Group<f_Group>,
717    Flags<[CC1Option]>,
718    HelpText<"Emit extra debug info to make sample profile more accurate.">;
719def fno_debug_info_for_profiling : Flag<["-"], "fno-debug-info-for-profiling">, Group<f_Group>,
720    Flags<[DriverOption]>,
721    HelpText<"Do not emit extra debug info for sample profiler.">;
722def fprofile_instr_generate : Flag<["-"], "fprofile-instr-generate">,
723    Group<f_Group>, Flags<[CoreOption]>,
724    HelpText<"Generate instrumented code to collect execution counts into default.profraw file (overridden by '=' form of option or LLVM_PROFILE_FILE env var)">;
725def fprofile_instr_generate_EQ : Joined<["-"], "fprofile-instr-generate=">,
726    Group<f_Group>, Flags<[CoreOption]>, MetaVarName<"<file>">,
727    HelpText<"Generate instrumented code to collect execution counts into <file> (overridden by LLVM_PROFILE_FILE env var)">;
728def fprofile_instr_use : Flag<["-"], "fprofile-instr-use">, Group<f_Group>,
729    Flags<[CoreOption]>;
730def fprofile_instr_use_EQ : Joined<["-"], "fprofile-instr-use=">,
731    Group<f_Group>, Flags<[CoreOption]>,
732    HelpText<"Use instrumentation data for profile-guided optimization">;
733def fprofile_remapping_file_EQ : Joined<["-"], "fprofile-remapping-file=">,
734    Group<f_Group>, Flags<[CC1Option, CoreOption]>, MetaVarName<"<file>">,
735    HelpText<"Use the remappings described in <file> to match the profile data against names in the program">;
736def fprofile_remapping_file : Separate<["-"], "fprofile-remapping-file">,
737    Group<f_Group>, Flags<[CoreOption]>, Alias<fprofile_remapping_file_EQ>;
738def fcoverage_mapping : Flag<["-"], "fcoverage-mapping">,
739    Group<f_Group>, Flags<[CC1Option, CoreOption]>,
740    HelpText<"Generate coverage mapping to enable code coverage analysis">;
741def fno_coverage_mapping : Flag<["-"], "fno-coverage-mapping">,
742    Group<f_Group>, Flags<[DriverOption, CoreOption]>,
743    HelpText<"Disable code coverage analysis">;
744def fprofile_generate : Flag<["-"], "fprofile-generate">,
745    Group<f_Group>, Flags<[DriverOption]>,
746    HelpText<"Generate instrumented code to collect execution counts into default.profraw (overridden by LLVM_PROFILE_FILE env var)">;
747def fprofile_generate_EQ : Joined<["-"], "fprofile-generate=">,
748    Group<f_Group>, Flags<[DriverOption]>, MetaVarName<"<directory>">,
749    HelpText<"Generate instrumented code to collect execution counts into <directory>/default.profraw (overridden by LLVM_PROFILE_FILE env var)">;
750def fcs_profile_generate : Flag<["-"], "fcs-profile-generate">,
751    Group<f_Group>, Flags<[DriverOption]>,
752    HelpText<"Generate instrumented code to collect context sensitive execution counts into default.profraw (overridden by LLVM_PROFILE_FILE env var)">;
753def fcs_profile_generate_EQ : Joined<["-"], "fcs-profile-generate=">,
754    Group<f_Group>, Flags<[DriverOption]>, MetaVarName<"<directory>">,
755    HelpText<"Generate instrumented code to collect context sensitive execution counts into <directory>/default.profraw (overridden by LLVM_PROFILE_FILE env var)">;
756def fprofile_use : Flag<["-"], "fprofile-use">, Group<f_Group>,
757    Alias<fprofile_instr_use>;
758def fprofile_use_EQ : Joined<["-"], "fprofile-use=">,
759    Group<f_Group>, Flags<[DriverOption]>, MetaVarName<"<pathname>">,
760    HelpText<"Use instrumentation data for profile-guided optimization. If pathname is a directory, it reads from <pathname>/default.profdata. Otherwise, it reads from file <pathname>.">;
761def fno_profile_instr_generate : Flag<["-"], "fno-profile-instr-generate">,
762    Group<f_Group>, Flags<[DriverOption]>,
763    HelpText<"Disable generation of profile instrumentation.">;
764def fno_profile_generate : Flag<["-"], "fno-profile-generate">,
765    Group<f_Group>, Flags<[DriverOption]>,
766    HelpText<"Disable generation of profile instrumentation.">;
767def fno_profile_instr_use : Flag<["-"], "fno-profile-instr-use">,
768    Group<f_Group>, Flags<[DriverOption]>,
769    HelpText<"Disable using instrumentation data for profile-guided optimization">;
770def fno_profile_use : Flag<["-"], "fno-profile-use">,
771    Alias<fno_profile_instr_use>;
772def fprofile_filter_files_EQ : Joined<["-"], "fprofile-filter-files=">,
773    Group<f_Group>, Flags<[CC1Option, CoreOption]>,
774    HelpText<"Instrument only functions from files where names match any regex separated by a semi-colon">;
775def fprofile_exclude_files_EQ : Joined<["-"], "fprofile-exclude-files=">,
776    Group<f_Group>, Flags<[CC1Option, CoreOption]>,
777    HelpText<"Instrument only functions from files where names don't match all the regexes separated by a semi-colon">;
778def forder_file_instrumentation : Flag<["-"], "forder-file-instrumentation">,
779    Group<f_Group>, Flags<[CC1Option, CoreOption]>,
780    HelpText<"Generate instrumented code to collect order file into default.profraw file (overridden by '=' form of option or LLVM_PROFILE_FILE env var)">;
781
782def faddrsig : Flag<["-"], "faddrsig">, Group<f_Group>, Flags<[CoreOption, CC1Option]>,
783  HelpText<"Emit an address-significance table">;
784def fno_addrsig : Flag<["-"], "fno-addrsig">, Group<f_Group>, Flags<[CoreOption]>,
785  HelpText<"Don't emit an address-significance table">;
786def fblocks : Flag<["-"], "fblocks">, Group<f_Group>, Flags<[CoreOption, CC1Option]>,
787  HelpText<"Enable the 'blocks' language feature">;
788def fbootclasspath_EQ : Joined<["-"], "fbootclasspath=">, Group<f_Group>;
789def fborland_extensions : Flag<["-"], "fborland-extensions">, Group<f_Group>, Flags<[CC1Option]>,
790  HelpText<"Accept non-standard constructs supported by the Borland compiler">;
791def fbuiltin : Flag<["-"], "fbuiltin">, Group<f_Group>, Flags<[CoreOption]>;
792def fbuiltin_module_map : Flag <["-"], "fbuiltin-module-map">, Group<f_Group>,
793  Flags<[DriverOption]>, HelpText<"Load the clang builtins module map file.">;
794def fcaret_diagnostics : Flag<["-"], "fcaret-diagnostics">, Group<f_Group>;
795def fclang_abi_compat_EQ : Joined<["-"], "fclang-abi-compat=">, Group<f_clang_Group>,
796  Flags<[CC1Option]>, MetaVarName<"<version>">, Values<"<major>.<minor>,latest">,
797  HelpText<"Attempt to match the ABI of Clang <version>">;
798def fclasspath_EQ : Joined<["-"], "fclasspath=">, Group<f_Group>;
799def fcolor_diagnostics : Flag<["-"], "fcolor-diagnostics">, Group<f_Group>,
800  Flags<[CoreOption, CC1Option]>, HelpText<"Use colors in diagnostics">;
801def fdiagnostics_color : Flag<["-"], "fdiagnostics-color">, Group<f_Group>,
802  Flags<[CoreOption, DriverOption]>;
803def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">, Group<f_Group>;
804def fansi_escape_codes : Flag<["-"], "fansi-escape-codes">, Group<f_Group>,
805  Flags<[CoreOption, CC1Option]>, HelpText<"Use ANSI escape codes for diagnostics">;
806def fcomment_block_commands : CommaJoined<["-"], "fcomment-block-commands=">, Group<f_clang_Group>, Flags<[CC1Option]>,
807  HelpText<"Treat each comma separated argument in <arg> as a documentation comment block command">,
808  MetaVarName<"<arg>">;
809def fparse_all_comments : Flag<["-"], "fparse-all-comments">, Group<f_clang_Group>, Flags<[CC1Option]>;
810def frecord_command_line : Flag<["-"], "frecord-command-line">,
811  Group<f_clang_Group>;
812def fno_record_command_line : Flag<["-"], "fno-record-command-line">,
813  Group<f_clang_Group>;
814def : Flag<["-"], "frecord-gcc-switches">, Alias<frecord_command_line>;
815def : Flag<["-"], "fno-record-gcc-switches">, Alias<fno_record_command_line>;
816def fcommon : Flag<["-"], "fcommon">, Group<f_Group>;
817def fcompile_resource_EQ : Joined<["-"], "fcompile-resource=">, Group<f_Group>;
818def fcomplete_member_pointers : Flag<["-"], "fcomplete-member-pointers">, Group<f_clang_Group>,
819   Flags<[CoreOption, CC1Option]>,
820   HelpText<"Require member pointer base types to be complete if they would be significant under the Microsoft ABI">;
821def fno_complete_member_pointers : Flag<["-"], "fno-complete-member-pointers">, Group<f_clang_Group>,
822   Flags<[CoreOption]>,
823   HelpText<"Do not require member pointer base types to be complete if they would be significant under the Microsoft ABI">;
824def fcf_runtime_abi_EQ : Joined<["-"], "fcf-runtime-abi=">, Group<f_Group>,
825    Flags<[CC1Option]>;
826def fconstant_cfstrings : Flag<["-"], "fconstant-cfstrings">, Group<f_Group>;
827def fconstant_string_class_EQ : Joined<["-"], "fconstant-string-class=">, Group<f_Group>;
828def fconstexpr_depth_EQ : Joined<["-"], "fconstexpr-depth=">, Group<f_Group>;
829def fconstexpr_steps_EQ : Joined<["-"], "fconstexpr-steps=">, Group<f_Group>;
830def fconstexpr_backtrace_limit_EQ : Joined<["-"], "fconstexpr-backtrace-limit=">,
831                                    Group<f_Group>;
832def fno_crash_diagnostics : Flag<["-"], "fno-crash-diagnostics">, Group<f_clang_Group>, Flags<[NoArgumentUnused, CoreOption]>,
833  HelpText<"Disable auto-generation of preprocessed source files and a script for reproduction during a clang crash">;
834def fcrash_diagnostics_dir : Joined<["-"], "fcrash-diagnostics-dir=">, Group<f_clang_Group>, Flags<[NoArgumentUnused, CoreOption]>;
835def fcreate_profile : Flag<["-"], "fcreate-profile">, Group<f_Group>;
836def fcxx_exceptions: Flag<["-"], "fcxx-exceptions">, Group<f_Group>,
837  HelpText<"Enable C++ exceptions">, Flags<[CC1Option]>;
838def fcxx_modules : Flag <["-"], "fcxx-modules">, Group<f_Group>,
839  Flags<[DriverOption]>;
840def fdebug_pass_arguments : Flag<["-"], "fdebug-pass-arguments">, Group<f_Group>;
841def fdebug_pass_structure : Flag<["-"], "fdebug-pass-structure">, Group<f_Group>;
842def fdepfile_entry : Joined<["-"], "fdepfile-entry=">,
843    Group<f_clang_Group>, Flags<[CC1Option]>;
844def fdiagnostics_fixit_info : Flag<["-"], "fdiagnostics-fixit-info">, Group<f_clang_Group>;
845def fdiagnostics_parseable_fixits : Flag<["-"], "fdiagnostics-parseable-fixits">, Group<f_clang_Group>,
846    Flags<[CoreOption, CC1Option]>, HelpText<"Print fix-its in machine parseable form">;
847def fdiagnostics_print_source_range_info : Flag<["-"], "fdiagnostics-print-source-range-info">,
848    Group<f_clang_Group>,  Flags<[CC1Option]>,
849    HelpText<"Print source range spans in numeric form">;
850def fdiagnostics_show_hotness : Flag<["-"], "fdiagnostics-show-hotness">, Group<f_Group>,
851    Flags<[CC1Option]>, HelpText<"Enable profile hotness information in diagnostic line">;
852def fdiagnostics_hotness_threshold_EQ : Joined<["-"], "fdiagnostics-hotness-threshold=">,
853    Group<f_Group>, Flags<[CC1Option]>, MetaVarName<"<number>">,
854    HelpText<"Prevent optimization remarks from being output if they do not have at least this profile count">;
855def fdiagnostics_show_option : Flag<["-"], "fdiagnostics-show-option">, Group<f_Group>,
856    Flags<[CC1Option]>, HelpText<"Print option name with mappable diagnostics">;
857def fdiagnostics_show_note_include_stack : Flag<["-"], "fdiagnostics-show-note-include-stack">,
858    Group<f_Group>,  Flags<[CC1Option]>, HelpText<"Display include stacks for diagnostic notes">;
859def fdiagnostics_format_EQ : Joined<["-"], "fdiagnostics-format=">, Group<f_clang_Group>;
860def fdiagnostics_show_category_EQ : Joined<["-"], "fdiagnostics-show-category=">, Group<f_clang_Group>;
861def fdiagnostics_show_template_tree : Flag<["-"], "fdiagnostics-show-template-tree">,
862    Group<f_Group>, Flags<[CC1Option]>,
863    HelpText<"Print a template comparison tree for differing templates">;
864def fdeclspec : Flag<["-"], "fdeclspec">, Group<f_clang_Group>,
865  HelpText<"Allow __declspec as a keyword">, Flags<[CC1Option]>;
866def fdiscard_value_names : Flag<["-"], "fdiscard-value-names">, Group<f_clang_Group>,
867  HelpText<"Discard value names in LLVM IR">, Flags<[DriverOption]>;
868def fno_discard_value_names : Flag<["-"], "fno-discard-value-names">, Group<f_clang_Group>,
869  HelpText<"Do not discard value names in LLVM IR">, Flags<[DriverOption]>;
870def fdollars_in_identifiers : Flag<["-"], "fdollars-in-identifiers">, Group<f_Group>,
871  HelpText<"Allow '$' in identifiers">, Flags<[CC1Option]>;
872def fdwarf2_cfi_asm : Flag<["-"], "fdwarf2-cfi-asm">, Group<clang_ignored_f_Group>;
873def fno_dwarf2_cfi_asm : Flag<["-"], "fno-dwarf2-cfi-asm">, Group<clang_ignored_f_Group>;
874def fdwarf_directory_asm : Flag<["-"], "fdwarf-directory-asm">, Group<f_Group>;
875def fno_dwarf_directory_asm : Flag<["-"], "fno-dwarf-directory-asm">, Group<f_Group>, Flags<[CC1Option]>;
876def felide_constructors : Flag<["-"], "felide-constructors">, Group<f_Group>;
877def fno_elide_type : Flag<["-"], "fno-elide-type">, Group<f_Group>,
878    Flags<[CC1Option]>,
879    HelpText<"Do not elide types when printing diagnostics">;
880def feliminate_unused_debug_symbols : Flag<["-"], "feliminate-unused-debug-symbols">, Group<f_Group>;
881def femit_all_decls : Flag<["-"], "femit-all-decls">, Group<f_Group>, Flags<[CC1Option]>,
882  HelpText<"Emit all declarations, even if unused">;
883def femulated_tls : Flag<["-"], "femulated-tls">, Group<f_Group>, Flags<[CC1Option]>,
884  HelpText<"Use emutls functions to access thread_local variables">;
885def fno_emulated_tls : Flag<["-"], "fno-emulated-tls">, Group<f_Group>, Flags<[CC1Option]>;
886def fencoding_EQ : Joined<["-"], "fencoding=">, Group<f_Group>;
887def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group<f_Group>, Flags<[CoreOption]>;
888def fexceptions : Flag<["-"], "fexceptions">, Group<f_Group>, Flags<[CC1Option]>,
889  HelpText<"Enable support for exception handling">;
890def fdwarf_exceptions : Flag<["-"], "fdwarf-exceptions">, Group<f_Group>,
891  Flags<[CC1Option]>, HelpText<"Use DWARF style exceptions">;
892def fsjlj_exceptions : Flag<["-"], "fsjlj-exceptions">, Group<f_Group>,
893  Flags<[CC1Option]>, HelpText<"Use SjLj style exceptions">;
894def fseh_exceptions : Flag<["-"], "fseh-exceptions">, Group<f_Group>,
895  Flags<[CC1Option]>, HelpText<"Use SEH style exceptions">;
896def fexcess_precision_EQ : Joined<["-"], "fexcess-precision=">,
897    Group<clang_ignored_gcc_optimization_f_Group>;
898def : Flag<["-"], "fexpensive-optimizations">, Group<clang_ignored_gcc_optimization_f_Group>;
899def : Flag<["-"], "fno-expensive-optimizations">, Group<clang_ignored_gcc_optimization_f_Group>;
900def fextdirs_EQ : Joined<["-"], "fextdirs=">, Group<f_Group>;
901def : Flag<["-"], "fdefer-pop">, Group<clang_ignored_gcc_optimization_f_Group>;
902def : Flag<["-"], "fno-defer-pop">, Group<clang_ignored_gcc_optimization_f_Group>;
903def : Flag<["-"], "fextended-identifiers">, Group<clang_ignored_f_Group>;
904def : Flag<["-"], "fno-extended-identifiers">, Group<f_Group>, Flags<[Unsupported]>;
905def fhosted : Flag<["-"], "fhosted">, Group<f_Group>;
906def fdenormal_fp_math_EQ : Joined<["-"], "fdenormal-fp-math=">, Group<f_Group>, Flags<[CC1Option]>;
907def ffast_math : Flag<["-"], "ffast-math">, Group<f_Group>, Flags<[CC1Option]>,
908  HelpText<"Allow aggressive, lossy floating-point optimizations">;
909def fno_fast_math : Flag<["-"], "fno-fast-math">, Group<f_Group>;
910def fmath_errno : Flag<["-"], "fmath-errno">, Group<f_Group>, Flags<[CC1Option]>,
911  HelpText<"Require math functions to indicate errors by setting errno">;
912def fno_math_errno : Flag<["-"], "fno-math-errno">, Group<f_Group>;
913def fbracket_depth_EQ : Joined<["-"], "fbracket-depth=">, Group<f_Group>, Flags<[CoreOption]>;
914def fsignaling_math : Flag<["-"], "fsignaling-math">, Group<f_Group>;
915def fno_signaling_math : Flag<["-"], "fno-signaling-math">, Group<f_Group>;
916def fjump_tables : Flag<["-"], "fjump-tables">, Group<f_Group>;
917def fno_jump_tables : Flag<["-"], "fno-jump-tables">, Group<f_Group>, Flags<[CC1Option]>,
918  HelpText<"Do not use jump tables for lowering switches">;
919def fforce_enable_int128 : Flag<["-"], "fforce-enable-int128">,
920  Group<f_Group>, Flags<[CC1Option]>,
921  HelpText<"Enable support for int128_t type">;
922def fno_force_enable_int128 : Flag<["-"], "fno-force-enable-int128">,
923  Group<f_Group>, Flags<[CC1Option]>,
924  HelpText<"Disable support for int128_t type">;
925def fkeep_static_consts : Flag<["-"], "fkeep-static-consts">, Group<f_Group>, Flags<[CC1Option]>,
926  HelpText<"Keep static const variables even if unused">;
927def ffixed_point : Flag<["-"], "ffixed-point">, Group<f_Group>,
928                   Flags<[CC1Option]>, HelpText<"Enable fixed point types">;
929def fno_fixed_point : Flag<["-"], "fno-fixed-point">, Group<f_Group>,
930                      HelpText<"Disable fixed point types">;
931def fcxx_static_destructors : Flag<["-"], "fc++-static-destructors">,
932  Group<f_Group>,
933  HelpText<"Enable C++ static destructor registration (the default)">;
934def fno_cxx_static_destructors : Flag<["-"], "fno-c++-static-destructors">,
935  Group<f_Group>,
936  Flags<[CC1Option]>,
937  HelpText<"Disable C++ static destructor registration">;
938
939// Begin sanitizer flags. These should all be core options exposed in all driver
940// modes.
941let Flags = [CC1Option, CoreOption] in {
942
943def fsanitize_EQ : CommaJoined<["-"], "fsanitize=">, Group<f_clang_Group>,
944                   MetaVarName<"<check>">,
945                   HelpText<"Turn on runtime checks for various forms of undefined "
946                            "or suspicious behavior. See user manual for available checks">;
947def fno_sanitize_EQ : CommaJoined<["-"], "fno-sanitize=">, Group<f_clang_Group>,
948                      Flags<[CoreOption, DriverOption]>;
949def fsanitize_blacklist : Joined<["-"], "fsanitize-blacklist=">,
950                          Group<f_clang_Group>,
951                          HelpText<"Path to blacklist file for sanitizers">;
952def fno_sanitize_blacklist : Flag<["-"], "fno-sanitize-blacklist">,
953                             Group<f_clang_Group>,
954                             HelpText<"Don't use blacklist file for sanitizers">;
955def fsanitize_coverage
956    : CommaJoined<["-"], "fsanitize-coverage=">,
957      Group<f_clang_Group>,
958      HelpText<"Specify the type of coverage instrumentation for Sanitizers">;
959def fno_sanitize_coverage
960    : CommaJoined<["-"], "fno-sanitize-coverage=">,
961      Group<f_clang_Group>, Flags<[CoreOption, DriverOption]>,
962      HelpText<"Disable specified features of coverage instrumentation for "
963               "Sanitizers">, Values<"func,bb,edge,indirect-calls,trace-bb,trace-cmp,trace-div,trace-gep,8bit-counters,trace-pc,trace-pc-guard,no-prune,inline-8bit-counters">;
964def fsanitize_memory_track_origins_EQ : Joined<["-"], "fsanitize-memory-track-origins=">,
965                                        Group<f_clang_Group>,
966                                        HelpText<"Enable origins tracking in MemorySanitizer">;
967def fsanitize_memory_track_origins : Flag<["-"], "fsanitize-memory-track-origins">,
968                                     Group<f_clang_Group>,
969                                     HelpText<"Enable origins tracking in MemorySanitizer">;
970def fno_sanitize_memory_track_origins : Flag<["-"], "fno-sanitize-memory-track-origins">,
971                                        Group<f_clang_Group>,
972                                        Flags<[CoreOption, DriverOption]>,
973                                        HelpText<"Disable origins tracking in MemorySanitizer">;
974def fsanitize_memory_use_after_dtor : Flag<["-"], "fsanitize-memory-use-after-dtor">,
975                                     Group<f_clang_Group>,
976                                     HelpText<"Enable use-after-destroy detection in MemorySanitizer">;
977def fno_sanitize_memory_use_after_dtor : Flag<["-"], "fno-sanitize-memory-use-after-dtor">,
978                                     Group<f_clang_Group>,
979                                     HelpText<"Disable use-after-destroy detection in MemorySanitizer">;
980def fsanitize_address_field_padding : Joined<["-"], "fsanitize-address-field-padding=">,
981                                        Group<f_clang_Group>,
982                                        HelpText<"Level of field padding for AddressSanitizer">;
983def fsanitize_address_use_after_scope : Flag<["-"], "fsanitize-address-use-after-scope">,
984                                        Group<f_clang_Group>,
985                                        HelpText<"Enable use-after-scope detection in AddressSanitizer">;
986def fno_sanitize_address_use_after_scope : Flag<["-"], "fno-sanitize-address-use-after-scope">,
987                                           Group<f_clang_Group>,
988                                           Flags<[CoreOption, DriverOption]>,
989                                           HelpText<"Disable use-after-scope detection in AddressSanitizer">;
990def fsanitize_address_poison_custom_array_cookie
991    : Flag<[ "-" ], "fsanitize-address-poison-custom-array-cookie">,
992      Group<f_clang_Group>,
993      HelpText<"Enable poisoning array cookies when using custom operator new[] in AddressSanitizer">;
994def fno_sanitize_address_poison_custom_array_cookie
995    : Flag<[ "-" ], "fno-sanitize-address-poison-custom-array-cookie">,
996      Group<f_clang_Group>,
997      HelpText<"Disable poisoning array cookies when using custom operator new[] in AddressSanitizer">;
998def fsanitize_address_globals_dead_stripping : Flag<["-"], "fsanitize-address-globals-dead-stripping">,
999                                        Group<f_clang_Group>,
1000                                        HelpText<"Enable linker dead stripping of globals in AddressSanitizer">;
1001def fsanitize_address_use_odr_indicator
1002    : Flag<["-"], "fsanitize-address-use-odr-indicator">,
1003      Group<f_clang_Group>,
1004      HelpText<"Enable ODR indicator globals to avoid false ODR violation reports in partially sanitized programs at the cost of an increase in binary size">;
1005def fno_sanitize_address_use_odr_indicator
1006    : Flag<["-"], "fno-sanitize-address-use-odr-indicator">,
1007      Group<f_clang_Group>,
1008      HelpText<"Disable ODR indicator globals">;
1009def fsanitize_hwaddress_abi_EQ
1010    : Joined<["-"], "fsanitize-hwaddress-abi=">,
1011      Group<f_clang_Group>,
1012      HelpText<"Select the HWAddressSanitizer ABI to target (interceptor or platform, default interceptor)">;
1013def fsanitize_recover : Flag<["-"], "fsanitize-recover">, Group<f_clang_Group>;
1014def fno_sanitize_recover : Flag<["-"], "fno-sanitize-recover">,
1015                           Flags<[CoreOption, DriverOption]>,
1016                           Group<f_clang_Group>;
1017def fsanitize_recover_EQ : CommaJoined<["-"], "fsanitize-recover=">,
1018                           Group<f_clang_Group>,
1019                           HelpText<"Enable recovery for specified sanitizers">;
1020def fno_sanitize_recover_EQ
1021    : CommaJoined<["-"], "fno-sanitize-recover=">,
1022      Group<f_clang_Group>,
1023      Flags<[CoreOption, DriverOption]>,
1024      HelpText<"Disable recovery for specified sanitizers">;
1025def fsanitize_trap_EQ : CommaJoined<["-"], "fsanitize-trap=">, Group<f_clang_Group>,
1026                        HelpText<"Enable trapping for specified sanitizers">;
1027def fno_sanitize_trap_EQ : CommaJoined<["-"], "fno-sanitize-trap=">, Group<f_clang_Group>,
1028                           Flags<[CoreOption, DriverOption]>,
1029                           HelpText<"Disable trapping for specified sanitizers">;
1030def fsanitize_undefined_trap_on_error : Flag<["-"], "fsanitize-undefined-trap-on-error">,
1031                                        Group<f_clang_Group>;
1032def fno_sanitize_undefined_trap_on_error : Flag<["-"], "fno-sanitize-undefined-trap-on-error">,
1033                                           Group<f_clang_Group>;
1034def fsanitize_minimal_runtime : Flag<["-"], "fsanitize-minimal-runtime">,
1035                                        Group<f_clang_Group>;
1036def fno_sanitize_minimal_runtime : Flag<["-"], "fno-sanitize-minimal-runtime">,
1037                                        Group<f_clang_Group>;
1038def fsanitize_link_cxx_runtime : Flag<["-"], "fsanitize-link-c++-runtime">,
1039                                 Group<f_clang_Group>;
1040def fsanitize_cfi_cross_dso : Flag<["-"], "fsanitize-cfi-cross-dso">,
1041                              Group<f_clang_Group>,
1042                              HelpText<"Enable control flow integrity (CFI) checks for cross-DSO calls.">;
1043def fno_sanitize_cfi_cross_dso : Flag<["-"], "fno-sanitize-cfi-cross-dso">,
1044                                 Flags<[CoreOption, DriverOption]>,
1045                                 Group<f_clang_Group>,
1046                                 HelpText<"Disable control flow integrity (CFI) checks for cross-DSO calls.">;
1047def fsanitize_cfi_icall_generalize_pointers : Flag<["-"], "fsanitize-cfi-icall-generalize-pointers">,
1048                                              Group<f_clang_Group>,
1049                                              HelpText<"Generalize pointers in CFI indirect call type signature checks">;
1050def fsanitize_stats : Flag<["-"], "fsanitize-stats">,
1051                              Group<f_clang_Group>,
1052                              HelpText<"Enable sanitizer statistics gathering.">;
1053def fno_sanitize_stats : Flag<["-"], "fno-sanitize-stats">,
1054                                 Group<f_clang_Group>,
1055                                 Flags<[CoreOption, DriverOption]>,
1056                                 HelpText<"Disable sanitizer statistics gathering.">;
1057def fsanitize_thread_memory_access : Flag<["-"], "fsanitize-thread-memory-access">,
1058                                     Group<f_clang_Group>,
1059                                     HelpText<"Enable memory access instrumentation in ThreadSanitizer (default)">;
1060def fno_sanitize_thread_memory_access : Flag<["-"], "fno-sanitize-thread-memory-access">,
1061                                        Group<f_clang_Group>,
1062                                        Flags<[CoreOption, DriverOption]>,
1063                                        HelpText<"Disable memory access instrumentation in ThreadSanitizer">;
1064def fsanitize_thread_func_entry_exit : Flag<["-"], "fsanitize-thread-func-entry-exit">,
1065                                       Group<f_clang_Group>,
1066                                       HelpText<"Enable function entry/exit instrumentation in ThreadSanitizer (default)">;
1067def fno_sanitize_thread_func_entry_exit : Flag<["-"], "fno-sanitize-thread-func-entry-exit">,
1068                                          Group<f_clang_Group>,
1069                                          Flags<[CoreOption, DriverOption]>,
1070                                          HelpText<"Disable function entry/exit instrumentation in ThreadSanitizer">;
1071def fsanitize_thread_atomics : Flag<["-"], "fsanitize-thread-atomics">,
1072                               Group<f_clang_Group>,
1073                               HelpText<"Enable atomic operations instrumentation in ThreadSanitizer (default)">;
1074def fno_sanitize_thread_atomics : Flag<["-"], "fno-sanitize-thread-atomics">,
1075                                  Group<f_clang_Group>,
1076                                  Flags<[CoreOption, DriverOption]>,
1077                                  HelpText<"Disable atomic operations instrumentation in ThreadSanitizer">;
1078def fsanitize_undefined_strip_path_components_EQ : Joined<["-"], "fsanitize-undefined-strip-path-components=">,
1079  Group<f_clang_Group>, MetaVarName<"<number>">,
1080  HelpText<"Strip (or keep only, if negative) a given number of path components "
1081           "when emitting check metadata.">;
1082
1083} // end -f[no-]sanitize* flags
1084
1085def funsafe_math_optimizations : Flag<["-"], "funsafe-math-optimizations">,
1086  Group<f_Group>;
1087def fno_unsafe_math_optimizations : Flag<["-"], "fno-unsafe-math-optimizations">,
1088  Group<f_Group>;
1089def fassociative_math : Flag<["-"], "fassociative-math">, Group<f_Group>;
1090def fno_associative_math : Flag<["-"], "fno-associative-math">, Group<f_Group>;
1091def freciprocal_math :
1092  Flag<["-"], "freciprocal-math">, Group<f_Group>, Flags<[CC1Option]>,
1093  HelpText<"Allow division operations to be reassociated">;
1094def fno_reciprocal_math : Flag<["-"], "fno-reciprocal-math">, Group<f_Group>;
1095def ffinite_math_only : Flag<["-"], "ffinite-math-only">, Group<f_Group>, Flags<[CC1Option]>;
1096def fno_finite_math_only : Flag<["-"], "fno-finite-math-only">, Group<f_Group>;
1097def fsigned_zeros : Flag<["-"], "fsigned-zeros">, Group<f_Group>;
1098def fno_signed_zeros :
1099  Flag<["-"], "fno-signed-zeros">, Group<f_Group>, Flags<[CC1Option]>,
1100  HelpText<"Allow optimizations that ignore the sign of floating point zeros">;
1101def fhonor_nans : Flag<["-"], "fhonor-nans">, Group<f_Group>;
1102def fno_honor_nans : Flag<["-"], "fno-honor-nans">, Group<f_Group>;
1103def fhonor_infinities : Flag<["-"], "fhonor-infinities">, Group<f_Group>;
1104def fno_honor_infinities : Flag<["-"], "fno-honor-infinities">, Group<f_Group>;
1105// This option was originally misspelt "infinites" [sic].
1106def : Flag<["-"], "fhonor-infinites">, Alias<fhonor_infinities>;
1107def : Flag<["-"], "fno-honor-infinites">, Alias<fno_honor_infinities>;
1108def ftrapping_math : Flag<["-"], "ftrapping-math">, Group<f_Group>, Flags<[CC1Option]>;
1109def fno_trapping_math : Flag<["-"], "fno-trapping-math">, Group<f_Group>, Flags<[CC1Option]>;
1110def ffp_contract : Joined<["-"], "ffp-contract=">, Group<f_Group>,
1111  Flags<[CC1Option]>, HelpText<"Form fused FP ops (e.g. FMAs): fast (everywhere)"
1112  " | on (according to FP_CONTRACT pragma, default) | off (never fuse)">, Values<"fast,on,off">;
1113
1114def fstrict_float_cast_overflow : Flag<["-"],
1115  "fstrict-float-cast-overflow">, Group<f_Group>, Flags<[CC1Option]>,
1116  HelpText<"Assume that overflowing float-to-int casts are undefined (default)">;
1117def fno_strict_float_cast_overflow : Flag<["-"],
1118  "fno-strict-float-cast-overflow">, Group<f_Group>, Flags<[CC1Option]>,
1119  HelpText<"Relax language rules and try to match the behavior of the target's native float-to-int conversion instructions">;
1120
1121def ffor_scope : Flag<["-"], "ffor-scope">, Group<f_Group>;
1122def fno_for_scope : Flag<["-"], "fno-for-scope">, Group<f_Group>;
1123
1124def frewrite_includes : Flag<["-"], "frewrite-includes">, Group<f_Group>,
1125  Flags<[CC1Option]>;
1126def fno_rewrite_includes : Flag<["-"], "fno-rewrite-includes">, Group<f_Group>;
1127
1128def frewrite_imports : Flag<["-"], "frewrite-imports">, Group<f_Group>,
1129  Flags<[CC1Option]>;
1130def fno_rewrite_imports : Flag<["-"], "fno-rewrite-imports">, Group<f_Group>;
1131
1132def fdelete_null_pointer_checks : Flag<["-"],
1133  "fdelete-null-pointer-checks">, Group<f_Group>,
1134  HelpText<"Treat usage of null pointers as undefined behavior.">;
1135def fno_delete_null_pointer_checks : Flag<["-"],
1136  "fno-delete-null-pointer-checks">, Group<f_Group>, Flags<[CC1Option]>,
1137  HelpText<"Do not treat usage of null pointers as undefined behavior.">;
1138
1139def frewrite_map_file : Separate<["-"], "frewrite-map-file">,
1140                        Group<f_Group>,
1141                        Flags<[ DriverOption, CC1Option ]>;
1142def frewrite_map_file_EQ : Joined<["-"], "frewrite-map-file=">,
1143                           Group<f_Group>,
1144                           Flags<[DriverOption]>;
1145
1146def fuse_line_directives : Flag<["-"], "fuse-line-directives">, Group<f_Group>,
1147  Flags<[CC1Option]>;
1148def fno_use_line_directives : Flag<["-"], "fno-use-line-directives">, Group<f_Group>;
1149
1150def ffreestanding : Flag<["-"], "ffreestanding">, Group<f_Group>, Flags<[CC1Option]>,
1151  HelpText<"Assert that the compilation takes place in a freestanding environment">;
1152def fgnu_keywords : Flag<["-"], "fgnu-keywords">, Group<f_Group>, Flags<[CC1Option]>,
1153  HelpText<"Allow GNU-extension keywords regardless of language standard">;
1154def fgnu89_inline : Flag<["-"], "fgnu89-inline">, Group<f_Group>, Flags<[CC1Option]>,
1155  HelpText<"Use the gnu89 inline semantics">;
1156def fno_gnu89_inline : Flag<["-"], "fno-gnu89-inline">, Group<f_Group>;
1157def fgnu_runtime : Flag<["-"], "fgnu-runtime">, Group<f_Group>,
1158  HelpText<"Generate output compatible with the standard GNU Objective-C runtime">;
1159def fheinous_gnu_extensions : Flag<["-"], "fheinous-gnu-extensions">, Flags<[CC1Option]>;
1160def filelist : Separate<["-"], "filelist">, Flags<[LinkerInput]>,
1161               Group<Link_Group>;
1162def : Flag<["-"], "findirect-virtual-calls">, Alias<fapple_kext>;
1163def finline_functions : Flag<["-"], "finline-functions">, Group<f_clang_Group>, Flags<[CC1Option]>,
1164  HelpText<"Inline suitable functions">;
1165def finline_hint_functions: Flag<["-"], "finline-hint-functions">, Group<f_clang_Group>, Flags<[CC1Option]>,
1166  HelpText<"Inline functions which are (explicitly or implicitly) marked inline">;
1167def finline : Flag<["-"], "finline">, Group<clang_ignored_f_Group>;
1168def fexperimental_isel : Flag<["-"], "fexperimental-isel">, Group<f_clang_Group>,
1169  HelpText<"Enables the experimental global instruction selector">;
1170def fexperimental_new_pass_manager : Flag<["-"], "fexperimental-new-pass-manager">,
1171  Group<f_clang_Group>, Flags<[CC1Option]>,
1172  HelpText<"Enables an experimental new pass manager in LLVM.">;
1173def finput_charset_EQ : Joined<["-"], "finput-charset=">, Group<f_Group>;
1174def fexec_charset_EQ : Joined<["-"], "fexec-charset=">, Group<f_Group>;
1175def finstrument_functions : Flag<["-"], "finstrument-functions">, Group<f_Group>, Flags<[CC1Option]>,
1176  HelpText<"Generate calls to instrument function entry and exit">;
1177def finstrument_functions_after_inlining : Flag<["-"], "finstrument-functions-after-inlining">, Group<f_Group>, Flags<[CC1Option]>,
1178  HelpText<"Like -finstrument-functions, but insert the calls after inlining">;
1179def finstrument_function_entry_bare : Flag<["-"], "finstrument-function-entry-bare">, Group<f_Group>, Flags<[CC1Option]>,
1180  HelpText<"Instrument function entry only, after inlining, without arguments to the instrumentation call">;
1181def fcf_protection_EQ : Joined<["-"], "fcf-protection=">, Flags<[CoreOption, CC1Option]>, Group<f_Group>,
1182  HelpText<"Instrument control-flow architecture protection. Options: return, branch, full, none.">, Values<"return,branch,full,none">;
1183def fcf_protection : Flag<["-"], "fcf-protection">, Group<f_Group>, Flags<[CoreOption, CC1Option]>,
1184  Alias<fcf_protection_EQ>, AliasArgs<["full"]>,
1185  HelpText<"Enable cf-protection in 'full' mode">;
1186
1187def fxray_instrument : Flag<["-"], "fxray-instrument">, Group<f_Group>,
1188  Flags<[CC1Option]>,
1189  HelpText<"Generate XRay instrumentation sleds on function entry and exit">;
1190def fnoxray_instrument : Flag<["-"], "fno-xray-instrument">, Group<f_Group>,
1191  Flags<[CC1Option]>;
1192
1193def fxray_instruction_threshold_EQ :
1194  JoinedOrSeparate<["-"], "fxray-instruction-threshold=">,
1195  Group<f_Group>, Flags<[CC1Option]>,
1196  HelpText<"Sets the minimum function size to instrument with XRay">;
1197def fxray_instruction_threshold_ :
1198  JoinedOrSeparate<["-"], "fxray-instruction-threshold">,
1199  Group<f_Group>, Flags<[CC1Option]>;
1200
1201def fxray_always_instrument :
1202  JoinedOrSeparate<["-"], "fxray-always-instrument=">,
1203  Group<f_Group>, Flags<[CC1Option]>,
1204  HelpText<"DEPRECATED: Filename defining the whitelist for imbuing the 'always instrument' XRay attribute.">;
1205def fxray_never_instrument :
1206  JoinedOrSeparate<["-"], "fxray-never-instrument=">,
1207  Group<f_Group>, Flags<[CC1Option]>,
1208  HelpText<"DEPRECATED: Filename defining the whitelist for imbuing the 'never instrument' XRay attribute.">;
1209def fxray_attr_list :
1210  JoinedOrSeparate<["-"], "fxray-attr-list=">,
1211  Group<f_Group>, Flags<[CC1Option]>,
1212  HelpText<"Filename defining the list of functions/types for imbuing XRay attributes.">;
1213def fxray_modes :
1214  JoinedOrSeparate<["-"], "fxray-modes=">,
1215  Group<f_Group>, Flags<[CC1Option]>,
1216  HelpText<"List of modes to link in by default into XRay instrumented binaries.">;
1217
1218def fxray_always_emit_customevents : Flag<["-"], "fxray-always-emit-customevents">, Group<f_Group>,
1219  Flags<[CC1Option]>,
1220  HelpText<"Determine whether to always emit __xray_customevent(...) calls even if the function it appears in is not always instrumented.">;
1221def fnoxray_always_emit_customevents : Flag<["-"], "fno-xray-always-emit-customevents">, Group<f_Group>,
1222  Flags<[CC1Option]>;
1223
1224def fxray_always_emit_typedevents : Flag<["-"], "fxray-always-emit-typedevents">, Group<f_Group>,
1225  Flags<[CC1Option]>,
1226  HelpText<"Determine whether to always emit __xray_typedevent(...) calls even if the function it appears in is not always instrumented.">;
1227def fnoxray_always_emit_typedevents : Flag<["-"], "fno-xray-always-emit-typedevents">, Group<f_Group>,
1228  Flags<[CC1Option]>;
1229
1230def fxray_link_deps : Flag<["-"], "fxray-link-deps">, Group<f_Group>,
1231  Flags<[CC1Option]>,
1232  HelpText<"Tells clang to add the link dependencies for XRay.">;
1233def fnoxray_link_deps : Flag<["-"], "fnoxray-link-deps">, Group<f_Group>,
1234  Flags<[CC1Option]>;
1235
1236def fxray_instrumentation_bundle :
1237  JoinedOrSeparate<["-"], "fxray-instrumentation-bundle=">,
1238  Group<f_Group>, Flags<[CC1Option]>,
1239  HelpText<"Select which XRay instrumentation points to emit. Options: all, none, function, custom. Default is 'all'.">;
1240
1241def ffine_grained_bitfield_accesses : Flag<["-"],
1242  "ffine-grained-bitfield-accesses">, Group<f_clang_Group>, Flags<[CC1Option]>,
1243  HelpText<"Use separate accesses for consecutive bitfield runs with legal widths and alignments.">;
1244def fno_fine_grained_bitfield_accesses : Flag<["-"],
1245  "fno-fine-grained-bitfield-accesses">, Group<f_clang_Group>, Flags<[CC1Option]>,
1246  HelpText<"Use large-integer access for consecutive bitfield runs.">;
1247
1248def flat__namespace : Flag<["-"], "flat_namespace">;
1249def flax_vector_conversions : Flag<["-"], "flax-vector-conversions">, Group<f_Group>;
1250def flimited_precision_EQ : Joined<["-"], "flimited-precision=">, Group<f_Group>;
1251def flto_EQ : Joined<["-"], "flto=">, Flags<[CoreOption, CC1Option]>, Group<f_Group>,
1252  HelpText<"Set LTO mode to either 'full' or 'thin'">, Values<"thin,full">;
1253def flto : Flag<["-"], "flto">, Flags<[CoreOption, CC1Option]>, Group<f_Group>,
1254  HelpText<"Enable LTO in 'full' mode">;
1255def fno_lto : Flag<["-"], "fno-lto">, Group<f_Group>,
1256  HelpText<"Disable LTO mode (default)">;
1257def flto_jobs_EQ : Joined<["-"], "flto-jobs=">,
1258  Flags<[CC1Option]>, Group<f_Group>,
1259  HelpText<"Controls the backend parallelism of -flto=thin (default "
1260           "of 0 means the number of threads will be derived from "
1261           "the number of CPUs detected)">;
1262def fthinlto_index_EQ : Joined<["-"], "fthinlto-index=">,
1263  Flags<[CC1Option]>, Group<f_Group>,
1264  HelpText<"Perform ThinLTO importing using provided function summary index">;
1265def fmacro_backtrace_limit_EQ : Joined<["-"], "fmacro-backtrace-limit=">,
1266                                Group<f_Group>, Flags<[DriverOption, CoreOption]>;
1267def fmerge_all_constants : Flag<["-"], "fmerge-all-constants">, Group<f_Group>,
1268  Flags<[CC1Option, CoreOption]>, HelpText<"Allow merging of constants">;
1269def fmessage_length_EQ : Joined<["-"], "fmessage-length=">, Group<f_Group>;
1270def fms_extensions : Flag<["-"], "fms-extensions">, Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1271  HelpText<"Accept some non-standard constructs supported by the Microsoft compiler">;
1272def fms_compatibility : Flag<["-"], "fms-compatibility">, Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1273  HelpText<"Enable full Microsoft Visual C++ compatibility">;
1274def fms_volatile : Joined<["-"], "fms-volatile">, Group<f_Group>, Flags<[CC1Option]>;
1275def fmsc_version : Joined<["-"], "fmsc-version=">, Group<f_Group>, Flags<[DriverOption, CoreOption]>,
1276  HelpText<"Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))">;
1277def fms_compatibility_version
1278    : Joined<["-"], "fms-compatibility-version=">,
1279      Group<f_Group>,
1280      Flags<[ CC1Option, CoreOption ]>,
1281      HelpText<"Dot-separated value representing the Microsoft compiler "
1282               "version number to report in _MSC_VER (0 = don't define it "
1283               "(default))">;
1284def fdelayed_template_parsing : Flag<["-"], "fdelayed-template-parsing">, Group<f_Group>,
1285  HelpText<"Parse templated function definitions at the end of the "
1286           "translation unit">,  Flags<[CC1Option, CoreOption]>;
1287def fms_memptr_rep_EQ : Joined<["-"], "fms-memptr-rep=">, Group<f_Group>, Flags<[CC1Option]>;
1288def fmodules_cache_path : Joined<["-"], "fmodules-cache-path=">, Group<i_Group>,
1289  Flags<[DriverOption, CC1Option]>, MetaVarName<"<directory>">,
1290  HelpText<"Specify the module cache path">;
1291def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Group<i_Group>,
1292  Flags<[DriverOption, CC1Option]>, MetaVarName<"<directory>">,
1293  HelpText<"Specify the module user build path">;
1294def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group<i_Group>,
1295  Flags<[DriverOption, CC1Option]>, MetaVarName<"<directory>">,
1296  HelpText<"Specify the prebuilt module path">;
1297def fmodules_prune_interval : Joined<["-"], "fmodules-prune-interval=">, Group<i_Group>,
1298  Flags<[CC1Option]>, MetaVarName<"<seconds>">,
1299  HelpText<"Specify the interval (in seconds) between attempts to prune the module cache">;
1300def fmodules_prune_after : Joined<["-"], "fmodules-prune-after=">, Group<i_Group>,
1301  Flags<[CC1Option]>, MetaVarName<"<seconds>">,
1302  HelpText<"Specify the interval (in seconds) after which a module file will be considered unused">;
1303def fmodules_search_all : Flag <["-"], "fmodules-search-all">, Group<f_Group>,
1304  Flags<[DriverOption, CC1Option]>,
1305  HelpText<"Search even non-imported modules to resolve references">;
1306def fbuild_session_timestamp : Joined<["-"], "fbuild-session-timestamp=">,
1307  Group<i_Group>, Flags<[CC1Option]>, MetaVarName<"<time since Epoch in seconds>">,
1308  HelpText<"Time when the current build session started">;
1309def fbuild_session_file : Joined<["-"], "fbuild-session-file=">,
1310  Group<i_Group>, MetaVarName<"<file>">,
1311  HelpText<"Use the last modification time of <file> as the build session timestamp">;
1312def fmodules_validate_once_per_build_session : Flag<["-"], "fmodules-validate-once-per-build-session">,
1313  Group<i_Group>, Flags<[CC1Option]>,
1314  HelpText<"Don't verify input files for the modules if the module has been "
1315           "successfully validated or loaded during this build session">;
1316def fmodules_disable_diagnostic_validation : Flag<["-"], "fmodules-disable-diagnostic-validation">,
1317  Group<i_Group>, Flags<[CC1Option]>,
1318  HelpText<"Disable validation of the diagnostic options when loading the module">;
1319def fmodules_validate_system_headers : Flag<["-"], "fmodules-validate-system-headers">,
1320  Group<i_Group>, Flags<[CC1Option]>,
1321  HelpText<"Validate the system headers that a module depends on when loading the module">;
1322def fno_modules_validate_system_headers : Flag<["-"], "fno-modules-validate-system-headers">,
1323  Group<i_Group>, Flags<[DriverOption]>;
1324def fmodules : Flag <["-"], "fmodules">, Group<f_Group>,
1325  Flags<[DriverOption, CC1Option]>,
1326  HelpText<"Enable the 'modules' language feature">;
1327def fimplicit_module_maps : Flag <["-"], "fimplicit-module-maps">, Group<f_Group>,
1328  Flags<[DriverOption, CC1Option]>,
1329  HelpText<"Implicitly search the file system for module map files.">;
1330def fmodules_ts : Flag <["-"], "fmodules-ts">, Group<f_Group>,
1331  Flags<[CC1Option]>, HelpText<"Enable support for the C++ Modules TS">;
1332def fmodule_maps : Flag <["-"], "fmodule-maps">, Alias<fimplicit_module_maps>;
1333def fmodule_name_EQ : Joined<["-"], "fmodule-name=">, Group<f_Group>,
1334  Flags<[DriverOption,CC1Option]>, MetaVarName<"<name>">,
1335  HelpText<"Specify the name of the module to build">;
1336def fmodule_name : Separate<["-"], "fmodule-name">, Alias<fmodule_name_EQ>;
1337def fmodule_implementation_of : Separate<["-"], "fmodule-implementation-of">,
1338  Flags<[CC1Option]>, Alias<fmodule_name_EQ>;
1339def fmodule_map_file : Joined<["-"], "fmodule-map-file=">,
1340  Group<f_Group>, Flags<[DriverOption,CC1Option]>, MetaVarName<"<file>">,
1341  HelpText<"Load this module map file">;
1342def fmodule_file : Joined<["-"], "fmodule-file=">,
1343  Group<i_Group>, Flags<[DriverOption,CC1Option]>, MetaVarName<"[<name>=]<file>">,
1344  HelpText<"Specify the mapping of module name to precompiled module file, or load a module file if name is omitted.">;
1345def fmodules_ignore_macro : Joined<["-"], "fmodules-ignore-macro=">, Group<f_Group>, Flags<[CC1Option]>,
1346  HelpText<"Ignore the definition of the given macro when building and loading modules">;
1347def fmodules_decluse : Flag <["-"], "fmodules-decluse">, Group<f_Group>,
1348  Flags<[DriverOption,CC1Option]>,
1349  HelpText<"Require declaration of modules used within a module">;
1350def fmodules_strict_decluse : Flag <["-"], "fmodules-strict-decluse">, Group<f_Group>,
1351  Flags<[DriverOption,CC1Option]>,
1352  HelpText<"Like -fmodules-decluse but requires all headers to be in modules">;
1353def fno_modules_search_all : Flag <["-"], "fno-modules-search-all">, Group<f_Group>,
1354  Flags<[DriverOption, CC1Option]>;
1355def fno_implicit_modules :
1356  Flag <["-"], "fno-implicit-modules">,
1357  Group<f_Group>, Flags<[DriverOption, CC1Option]>;
1358def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-system-headers">, Group<f_Group>, Flags<[CC1Option]>;
1359
1360def fmudflapth : Flag<["-"], "fmudflapth">, Group<f_Group>;
1361def fmudflap : Flag<["-"], "fmudflap">, Group<f_Group>;
1362def fnested_functions : Flag<["-"], "fnested-functions">, Group<f_Group>;
1363def fnext_runtime : Flag<["-"], "fnext-runtime">, Group<f_Group>;
1364def fno_access_control : Flag<["-"], "fno-access-control">, Group<f_Group>, Flags<[CC1Option]>,
1365  HelpText<"Disable C++ access control">;
1366def fno_apple_pragma_pack : Flag<["-"], "fno-apple-pragma-pack">, Group<f_Group>;
1367def fno_asm : Flag<["-"], "fno-asm">, Group<f_Group>;
1368def fno_asynchronous_unwind_tables : Flag<["-"], "fno-asynchronous-unwind-tables">, Group<f_Group>;
1369def fno_assume_sane_operator_new : Flag<["-"], "fno-assume-sane-operator-new">, Group<f_Group>,
1370  HelpText<"Don't assume that C++'s global operator new can't alias any pointer">,
1371  Flags<[CC1Option]>;
1372def fno_blocks : Flag<["-"], "fno-blocks">, Group<f_Group>, Flags<[CoreOption]>;
1373def fno_borland_extensions : Flag<["-"], "fno-borland-extensions">, Group<f_Group>;
1374def fno_builtin : Flag<["-"], "fno-builtin">, Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1375  HelpText<"Disable implicit builtin knowledge of functions">;
1376def fno_builtin_ : Joined<["-"], "fno-builtin-">, Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1377  HelpText<"Disable implicit builtin knowledge of a specific function">;
1378def fno_caret_diagnostics : Flag<["-"], "fno-caret-diagnostics">, Group<f_Group>,
1379 Flags<[CC1Option]>;
1380def fno_color_diagnostics : Flag<["-"], "fno-color-diagnostics">, Group<f_Group>,
1381  Flags<[CoreOption, CC1Option]>;
1382def fno_diagnostics_color : Flag<["-"], "fno-diagnostics-color">, Group<f_Group>,
1383  Flags<[CoreOption, DriverOption]>;
1384def fno_common : Flag<["-"], "fno-common">, Group<f_Group>, Flags<[CC1Option]>,
1385    HelpText<"Compile common globals like normal definitions">;
1386def fno_constant_cfstrings : Flag<["-"], "fno-constant-cfstrings">, Group<f_Group>,
1387  Flags<[CC1Option]>,
1388  HelpText<"Disable creation of CodeFoundation-type constant strings">;
1389def fno_cxx_exceptions: Flag<["-"], "fno-cxx-exceptions">, Group<f_Group>;
1390def fno_cxx_modules : Flag <["-"], "fno-cxx-modules">, Group<f_Group>,
1391  Flags<[DriverOption]>;
1392def fno_diagnostics_fixit_info : Flag<["-"], "fno-diagnostics-fixit-info">, Group<f_Group>,
1393  Flags<[CC1Option]>, HelpText<"Do not include fixit information in diagnostics">;
1394def fno_diagnostics_show_hotness : Flag<["-"], "fno-diagnostics-show-hotness">, Group<f_Group>;
1395def fno_diagnostics_show_option : Flag<["-"], "fno-diagnostics-show-option">, Group<f_Group>;
1396def fno_diagnostics_show_note_include_stack : Flag<["-"], "fno-diagnostics-show-note-include-stack">,
1397    Flags<[CC1Option]>, Group<f_Group>;
1398def fdigraphs : Flag<["-"], "fdigraphs">, Group<f_Group>, Flags<[CC1Option]>,
1399  HelpText<"Enable alternative token representations '<:', ':>', '<%', '%>', '%:', '%:%:' (default)">;
1400def fno_digraphs : Flag<["-"], "fno-digraphs">, Group<f_Group>, Flags<[CC1Option]>,
1401  HelpText<"Disallow alternative token representations '<:', ':>', '<%', '%>', '%:', '%:%:'">;
1402def fno_declspec : Flag<["-"], "fno-declspec">, Group<f_clang_Group>,
1403  HelpText<"Disallow __declspec as a keyword">, Flags<[CC1Option]>;
1404def fno_dollars_in_identifiers : Flag<["-"], "fno-dollars-in-identifiers">, Group<f_Group>,
1405  HelpText<"Disallow '$' in identifiers">, Flags<[CC1Option]>;
1406def fno_elide_constructors : Flag<["-"], "fno-elide-constructors">, Group<f_Group>,
1407  HelpText<"Disable C++ copy constructor elision">, Flags<[CC1Option]>;
1408def fno_eliminate_unused_debug_symbols : Flag<["-"], "fno-eliminate-unused-debug-symbols">, Group<f_Group>;
1409def fno_exceptions : Flag<["-"], "fno-exceptions">, Group<f_Group>;
1410def fno_gnu_keywords : Flag<["-"], "fno-gnu-keywords">, Group<f_Group>, Flags<[CC1Option]>;
1411def fno_inline_functions : Flag<["-"], "fno-inline-functions">, Group<f_clang_Group>, Flags<[CC1Option]>;
1412def fno_inline : Flag<["-"], "fno-inline">, Group<f_clang_Group>, Flags<[CC1Option]>;
1413def fno_experimental_isel : Flag<["-"], "fno-experimental-isel">, Group<f_clang_Group>,
1414  HelpText<"Disables the experimental global instruction selector">;
1415def fno_experimental_new_pass_manager : Flag<["-"], "fno-experimental-new-pass-manager">,
1416  Group<f_clang_Group>, Flags<[CC1Option]>,
1417  HelpText<"Disables an experimental new pass manager in LLVM.">;
1418def fveclib : Joined<["-"], "fveclib=">, Group<f_Group>, Flags<[CC1Option]>,
1419    HelpText<"Use the given vector functions library">, Values<"Accelerate,SVML,none">;
1420def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>,
1421  HelpText<"Disallow implicit conversions between vectors with a different number of elements or different element types">, Flags<[CC1Option]>;
1422def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">, Group<f_Group>,
1423  HelpText<"Disallow merging of constants">;
1424def fno_modules : Flag <["-"], "fno-modules">, Group<f_Group>,
1425  Flags<[DriverOption]>;
1426def fno_implicit_module_maps : Flag <["-"], "fno-implicit-module-maps">, Group<f_Group>,
1427  Flags<[DriverOption]>;
1428def fno_module_maps : Flag <["-"], "fno-module-maps">, Alias<fno_implicit_module_maps>;
1429def fno_modules_decluse : Flag <["-"], "fno-modules-decluse">, Group<f_Group>,
1430  Flags<[DriverOption]>;
1431def fno_modules_strict_decluse : Flag <["-"], "fno-strict-modules-decluse">, Group<f_Group>,
1432  Flags<[DriverOption]>;
1433def fimplicit_modules : Flag <["-"], "fimplicit-modules">, Group<f_Group>,
1434  Flags<[DriverOption]>;
1435def fmodule_file_deps : Flag <["-"], "fmodule-file-deps">, Group<f_Group>,
1436  Flags<[DriverOption]>;
1437def fno_module_file_deps : Flag <["-"], "fno-module-file-deps">, Group<f_Group>,
1438  Flags<[DriverOption]>;
1439def fno_ms_extensions : Flag<["-"], "fno-ms-extensions">, Group<f_Group>,
1440  Flags<[CoreOption]>;
1441def fno_ms_compatibility : Flag<["-"], "fno-ms-compatibility">, Group<f_Group>,
1442  Flags<[CoreOption]>;
1443def fno_delayed_template_parsing : Flag<["-"], "fno-delayed-template-parsing">, Group<f_Group>,
1444  HelpText<"Disable delayed template parsing">,
1445  Flags<[DriverOption, CoreOption]>;
1446def fno_objc_exceptions: Flag<["-"], "fno-objc-exceptions">, Group<f_Group>;
1447def fno_objc_legacy_dispatch : Flag<["-"], "fno-objc-legacy-dispatch">, Group<f_Group>;
1448def fno_objc_weak : Flag<["-"], "fno-objc-weak">, Group<f_Group>, Flags<[CC1Option]>;
1449def fno_omit_frame_pointer : Flag<["-"], "fno-omit-frame-pointer">, Group<f_Group>;
1450def fno_operator_names : Flag<["-"], "fno-operator-names">, Group<f_Group>,
1451  HelpText<"Do not treat C++ operator name keywords as synonyms for operators">,
1452  Flags<[CC1Option]>;
1453def fno_pascal_strings : Flag<["-"], "fno-pascal-strings">, Group<f_Group>;
1454def fno_rtti : Flag<["-"], "fno-rtti">, Group<f_Group>, Flags<[CC1Option]>,
1455  HelpText<"Disable generation of rtti information">;
1456def fno_rtti_data : Flag<["-"], "fno-rtti-data">, Group<f_Group>, Flags<[CC1Option]>,
1457  HelpText<"Control emission of RTTI data">;
1458def fno_short_enums : Flag<["-"], "fno-short-enums">, Group<f_Group>;
1459def fno_show_column : Flag<["-"], "fno-show-column">, Group<f_Group>, Flags<[CC1Option]>,
1460  HelpText<"Do not include column number on diagnostics">;
1461def fno_show_source_location : Flag<["-"], "fno-show-source-location">, Group<f_Group>,
1462  Flags<[CC1Option]>, HelpText<"Do not include source location information with diagnostics">;
1463def fdiagnostics_absolute_paths : Flag<["-"], "fdiagnostics-absolute-paths">, Group<f_Group>,
1464  Flags<[CC1Option, CoreOption]>, HelpText<"Print absolute paths in diagnostics">;
1465def fno_spell_checking : Flag<["-"], "fno-spell-checking">, Group<f_Group>,
1466  Flags<[CC1Option]>, HelpText<"Disable spell-checking">;
1467def fno_stack_protector : Flag<["-"], "fno-stack-protector">, Group<f_Group>,
1468  HelpText<"Disable the use of stack protectors">;
1469def fno_strict_aliasing : Flag<["-"], "fno-strict-aliasing">, Group<f_Group>,
1470  Flags<[DriverOption, CoreOption]>;
1471def fstruct_path_tbaa : Flag<["-"], "fstruct-path-tbaa">, Group<f_Group>;
1472def fno_struct_path_tbaa : Flag<["-"], "fno-struct-path-tbaa">, Group<f_Group>;
1473def fno_strict_enums : Flag<["-"], "fno-strict-enums">, Group<f_Group>;
1474def fno_strict_vtable_pointers: Flag<["-"], "fno-strict-vtable-pointers">,
1475  Group<f_Group>;
1476def fno_strict_overflow : Flag<["-"], "fno-strict-overflow">, Group<f_Group>;
1477def fno_threadsafe_statics : Flag<["-"], "fno-threadsafe-statics">, Group<f_Group>,
1478  Flags<[CC1Option]>, HelpText<"Do not emit code to make initialization of local statics thread safe">;
1479def fno_use_cxa_atexit : Flag<["-"], "fno-use-cxa-atexit">, Group<f_Group>, Flags<[CC1Option]>,
1480  HelpText<"Don't use __cxa_atexit for calling destructors">;
1481def fno_register_global_dtors_with_atexit : Flag<["-"], "fno-register-global-dtors-with-atexit">, Group<f_Group>,
1482  HelpText<"Don't use atexit or __cxa_atexit to register global destructors">;
1483def fno_use_init_array : Flag<["-"], "fno-use-init-array">, Group<f_Group>, Flags<[CC1Option]>,
1484  HelpText<"Don't use .init_array instead of .ctors">;
1485def fno_unit_at_a_time : Flag<["-"], "fno-unit-at-a-time">, Group<f_Group>;
1486def fno_unwind_tables : Flag<["-"], "fno-unwind-tables">, Group<f_Group>;
1487def fno_verbose_asm : Flag<["-"], "fno-verbose-asm">, Group<f_Group>;
1488def fno_working_directory : Flag<["-"], "fno-working-directory">, Group<f_Group>;
1489def fno_wrapv : Flag<["-"], "fno-wrapv">, Group<f_Group>;
1490def fno_zero_initialized_in_bss : Flag<["-"], "fno-zero-initialized-in-bss">, Group<f_Group>;
1491def fobjc_arc : Flag<["-"], "fobjc-arc">, Group<f_Group>, Flags<[CC1Option]>,
1492  HelpText<"Synthesize retain and release calls for Objective-C pointers">;
1493def fno_objc_arc : Flag<["-"], "fno-objc-arc">, Group<f_Group>;
1494def fobjc_convert_messages_to_runtime_calls :
1495  Flag<["-"], "fobjc-convert-messages-to-runtime-calls">, Group<f_Group>;
1496def fno_objc_convert_messages_to_runtime_calls :
1497  Flag<["-"], "fno-objc-convert-messages-to-runtime-calls">, Group<f_Group>, Flags<[CC1Option]>;
1498def fobjc_arc_exceptions : Flag<["-"], "fobjc-arc-exceptions">, Group<f_Group>, Flags<[CC1Option]>,
1499  HelpText<"Use EH-safe code when synthesizing retains and releases in -fobjc-arc">;
1500def fno_objc_arc_exceptions : Flag<["-"], "fno-objc-arc-exceptions">, Group<f_Group>;
1501def fobjc_atdefs : Flag<["-"], "fobjc-atdefs">, Group<clang_ignored_f_Group>;
1502def fobjc_call_cxx_cdtors : Flag<["-"], "fobjc-call-cxx-cdtors">, Group<clang_ignored_f_Group>;
1503def fobjc_exceptions: Flag<["-"], "fobjc-exceptions">, Group<f_Group>,
1504  HelpText<"Enable Objective-C exceptions">, Flags<[CC1Option]>;
1505def fapplication_extension : Flag<["-"], "fapplication-extension">,
1506  Group<f_Group>, Flags<[CC1Option]>,
1507  HelpText<"Restrict code to those available for App Extensions">;
1508def fno_application_extension : Flag<["-"], "fno-application-extension">,
1509  Group<f_Group>;
1510def frelaxed_template_template_args : Flag<["-"], "frelaxed-template-template-args">,
1511  Flags<[CC1Option]>, HelpText<"Enable C++17 relaxed template template argument matching">,
1512  Group<f_Group>;
1513def fno_relaxed_template_template_args : Flag<["-"], "fno-relaxed-template-template-args">,
1514  Group<f_Group>;
1515def fsized_deallocation : Flag<["-"], "fsized-deallocation">, Flags<[CC1Option]>,
1516  HelpText<"Enable C++14 sized global deallocation functions">, Group<f_Group>;
1517def fno_sized_deallocation: Flag<["-"], "fno-sized-deallocation">, Group<f_Group>;
1518def faligned_allocation : Flag<["-"], "faligned-allocation">, Flags<[CC1Option]>,
1519  HelpText<"Enable C++17 aligned allocation functions">, Group<f_Group>;
1520def fno_aligned_allocation: Flag<["-"], "fno-aligned-allocation">,
1521  Group<f_Group>, Flags<[CC1Option]>;
1522def fnew_alignment_EQ : Joined<["-"], "fnew-alignment=">,
1523  HelpText<"Specifies the largest alignment guaranteed by '::operator new(size_t)'">,
1524  MetaVarName<"<align>">, Group<f_Group>, Flags<[CC1Option]>;
1525def : Separate<["-"], "fnew-alignment">, Alias<fnew_alignment_EQ>;
1526def : Flag<["-"], "faligned-new">, Alias<faligned_allocation>;
1527def : Flag<["-"], "fno-aligned-new">, Alias<fno_aligned_allocation>;
1528def faligned_new_EQ : Joined<["-"], "faligned-new=">;
1529
1530def fobjc_legacy_dispatch : Flag<["-"], "fobjc-legacy-dispatch">, Group<f_Group>;
1531def fobjc_new_property : Flag<["-"], "fobjc-new-property">, Group<clang_ignored_f_Group>;
1532def fobjc_infer_related_result_type : Flag<["-"], "fobjc-infer-related-result-type">,
1533                                      Group<f_Group>;
1534def fno_objc_infer_related_result_type : Flag<["-"],
1535  "fno-objc-infer-related-result-type">, Group<f_Group>,
1536  HelpText<
1537    "do not infer Objective-C related result type based on method family">,
1538  Flags<[CC1Option]>;
1539def fobjc_link_runtime: Flag<["-"], "fobjc-link-runtime">, Group<f_Group>;
1540def fobjc_weak : Flag<["-"], "fobjc-weak">, Group<f_Group>, Flags<[CC1Option]>,
1541  HelpText<"Enable ARC-style weak references in Objective-C">;
1542
1543// Objective-C ABI options.
1544def fobjc_runtime_EQ : Joined<["-"], "fobjc-runtime=">, Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1545  HelpText<"Specify the target Objective-C runtime kind and version">;
1546def fobjc_abi_version_EQ : Joined<["-"], "fobjc-abi-version=">, Group<f_Group>;
1547def fobjc_nonfragile_abi_version_EQ : Joined<["-"], "fobjc-nonfragile-abi-version=">, Group<f_Group>;
1548def fobjc_nonfragile_abi : Flag<["-"], "fobjc-nonfragile-abi">, Group<f_Group>;
1549def fno_objc_nonfragile_abi : Flag<["-"], "fno-objc-nonfragile-abi">, Group<f_Group>;
1550
1551def fobjc_sender_dependent_dispatch : Flag<["-"], "fobjc-sender-dependent-dispatch">, Group<f_Group>;
1552def fomit_frame_pointer : Flag<["-"], "fomit-frame-pointer">, Group<f_Group>;
1553def fopenmp : Flag<["-"], "fopenmp">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>,
1554  HelpText<"Parse OpenMP pragmas and generate parallel code.">;
1555def fno_openmp : Flag<["-"], "fno-openmp">, Group<f_Group>, Flags<[NoArgumentUnused]>;
1556def fopenmp_version_EQ : Joined<["-"], "fopenmp-version=">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>;
1557def fopenmp_EQ : Joined<["-"], "fopenmp=">, Group<f_Group>;
1558def fopenmp_use_tls : Flag<["-"], "fopenmp-use-tls">, Group<f_Group>,
1559  Flags<[NoArgumentUnused, HelpHidden]>;
1560def fnoopenmp_use_tls : Flag<["-"], "fnoopenmp-use-tls">, Group<f_Group>,
1561  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1562def fopenmp_targets_EQ : CommaJoined<["-"], "fopenmp-targets=">, Flags<[DriverOption, CC1Option]>,
1563  HelpText<"Specify comma-separated list of triples OpenMP offloading targets to be supported">;
1564def fopenmp_dump_offload_linker_script : Flag<["-"], "fopenmp-dump-offload-linker-script">,
1565  Group<f_Group>, Flags<[NoArgumentUnused, HelpHidden]>;
1566def fopenmp_relocatable_target : Flag<["-"], "fopenmp-relocatable-target">,
1567  Group<f_Group>, Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1568def fnoopenmp_relocatable_target : Flag<["-"], "fnoopenmp-relocatable-target">,
1569  Group<f_Group>, Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1570def fopenmp_simd : Flag<["-"], "fopenmp-simd">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>,
1571  HelpText<"Emit OpenMP code only for SIMD-based constructs.">;
1572def fno_openmp_simd : Flag<["-"], "fno-openmp-simd">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>;
1573def fopenmp_cuda_mode : Flag<["-"], "fopenmp-cuda-mode">, Group<f_Group>,
1574  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1575def fno_openmp_cuda_mode : Flag<["-"], "fno-openmp-cuda-mode">, Group<f_Group>,
1576  Flags<[NoArgumentUnused, HelpHidden]>;
1577def fopenmp_cuda_force_full_runtime : Flag<["-"], "fopenmp-cuda-force-full-runtime">, Group<f_Group>,
1578  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1579def fno_openmp_cuda_force_full_runtime : Flag<["-"], "fno-openmp-cuda-force-full-runtime">, Group<f_Group>,
1580  Flags<[NoArgumentUnused, HelpHidden]>;
1581def fopenmp_cuda_number_of_sm_EQ : Joined<["-"], "fopenmp-cuda-number-of-sm=">, Group<f_Group>,
1582  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1583def fopenmp_cuda_blocks_per_sm_EQ : Joined<["-"], "fopenmp-cuda-blocks-per-sm=">, Group<f_Group>,
1584  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1585def fopenmp_cuda_teams_reduction_recs_num_EQ : Joined<["-"], "fopenmp-cuda-teams-reduction-recs-num=">, Group<f_Group>,
1586  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1587def fopenmp_optimistic_collapse : Flag<["-"], "fopenmp-optimistic-collapse">, Group<f_Group>,
1588  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1589def fno_openmp_optimistic_collapse : Flag<["-"], "fno-openmp-optimistic-collapse">, Group<f_Group>,
1590  Flags<[NoArgumentUnused, HelpHidden]>;
1591def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group<f_Group>;
1592def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group<f_Group>;
1593def fno_escaping_block_tail_calls : Flag<["-"], "fno-escaping-block-tail-calls">, Group<f_Group>, Flags<[CC1Option]>;
1594def fescaping_block_tail_calls : Flag<["-"], "fescaping-block-tail-calls">, Group<f_Group>;
1595def force__cpusubtype__ALL : Flag<["-"], "force_cpusubtype_ALL">;
1596def force__flat__namespace : Flag<["-"], "force_flat_namespace">;
1597def force__load : Separate<["-"], "force_load">;
1598def force_addr : Joined<["-"], "fforce-addr">, Group<clang_ignored_f_Group>;
1599def foutput_class_dir_EQ : Joined<["-"], "foutput-class-dir=">, Group<f_Group>;
1600def fpack_struct : Flag<["-"], "fpack-struct">, Group<f_Group>;
1601def fno_pack_struct : Flag<["-"], "fno-pack-struct">, Group<f_Group>;
1602def fpack_struct_EQ : Joined<["-"], "fpack-struct=">, Group<f_Group>, Flags<[CC1Option]>,
1603  HelpText<"Specify the default maximum struct packing alignment">;
1604def fmax_type_align_EQ : Joined<["-"], "fmax-type-align=">, Group<f_Group>, Flags<[CC1Option]>,
1605  HelpText<"Specify the maximum alignment to enforce on pointers lacking an explicit alignment">;
1606def fno_max_type_align : Flag<["-"], "fno-max-type-align">, Group<f_Group>;
1607def fpascal_strings : Flag<["-"], "fpascal-strings">, Group<f_Group>, Flags<[CC1Option]>,
1608  HelpText<"Recognize and construct Pascal-style string literals">;
1609def fpcc_struct_return : Flag<["-"], "fpcc-struct-return">, Group<f_Group>, Flags<[CC1Option]>,
1610  HelpText<"Override the default ABI to return all structs on the stack">;
1611def fpch_preprocess : Flag<["-"], "fpch-preprocess">, Group<f_Group>;
1612def fpic : Flag<["-"], "fpic">, Group<f_Group>;
1613def fno_pic : Flag<["-"], "fno-pic">, Group<f_Group>;
1614def fpie : Flag<["-"], "fpie">, Group<f_Group>;
1615def fno_pie : Flag<["-"], "fno-pie">, Group<f_Group>;
1616def fplt : Flag<["-"], "fplt">, Group<f_Group>, Flags<[CC1Option]>,
1617  HelpText<"Use the PLT to make function calls">;
1618def fno_plt : Flag<["-"], "fno-plt">, Group<f_Group>, Flags<[CC1Option]>,
1619  HelpText<"Do not use the PLT to make function calls">;
1620def fropi : Flag<["-"], "fropi">, Group<f_Group>, Flags<[CC1Option]>;
1621def fno_ropi : Flag<["-"], "fno-ropi">, Group<f_Group>;
1622def frwpi : Flag<["-"], "frwpi">, Group<f_Group>, Flags<[CC1Option]>;
1623def fno_rwpi : Flag<["-"], "fno-rwpi">, Group<f_Group>;
1624def fplugin_EQ : Joined<["-"], "fplugin=">, Group<f_Group>, Flags<[DriverOption]>, MetaVarName<"<dsopath>">,
1625  HelpText<"Load the named plugin (dynamic shared object)">;
1626def fpass_plugin_EQ : Joined<["-"], "fpass-plugin=">,
1627  Group<f_Group>, Flags<[CC1Option]>, MetaVarName<"<dsopath>">,
1628  HelpText<"Load pass plugin from a dynamic shared object file (only with new pass manager).">;
1629def fpreserve_as_comments : Flag<["-"], "fpreserve-as-comments">, Group<f_Group>;
1630def fno_preserve_as_comments : Flag<["-"], "fno-preserve-as-comments">, Group<f_Group>, Flags<[CC1Option]>,
1631  HelpText<"Do not preserve comments in inline assembly">;
1632def fprofile_arcs : Flag<["-"], "fprofile-arcs">, Group<f_Group>;
1633def fno_profile_arcs : Flag<["-"], "fno-profile-arcs">, Group<f_Group>;
1634def framework : Separate<["-"], "framework">, Flags<[LinkerInput]>;
1635def frandom_seed_EQ : Joined<["-"], "frandom-seed=">, Group<clang_ignored_f_Group>;
1636def freg_struct_return : Flag<["-"], "freg-struct-return">, Group<f_Group>, Flags<[CC1Option]>,
1637  HelpText<"Override the default ABI to return small structs in registers">;
1638def frtti : Flag<["-"], "frtti">, Group<f_Group>;
1639def : Flag<["-"], "fsched-interblock">, Group<clang_ignored_f_Group>;
1640def fshort_enums : Flag<["-"], "fshort-enums">, Group<f_Group>, Flags<[CC1Option]>,
1641  HelpText<"Allocate to an enum type only as many bytes as it needs for the declared range of possible values">;
1642def fchar8__t : Flag<["-"], "fchar8_t">, Group<f_Group>, Flags<[CC1Option]>,
1643  HelpText<"Enable C++ builtin type char8_t">;
1644def fno_char8__t : Flag<["-"], "fno-char8_t">, Group<f_Group>, Flags<[CC1Option]>,
1645  HelpText<"Disable C++ builtin type char8_t">;
1646def fshort_wchar : Flag<["-"], "fshort-wchar">, Group<f_Group>,
1647  HelpText<"Force wchar_t to be a short unsigned int">;
1648def fno_short_wchar : Flag<["-"], "fno-short-wchar">, Group<f_Group>,
1649  HelpText<"Force wchar_t to be an unsigned int">;
1650def fshow_overloads_EQ : Joined<["-"], "fshow-overloads=">, Group<f_Group>, Flags<[CC1Option]>,
1651  HelpText<"Which overload candidates to show when overload resolution fails: "
1652           "best|all; defaults to all">, Values<"best,all">;
1653def fshow_column : Flag<["-"], "fshow-column">, Group<f_Group>, Flags<[CC1Option]>;
1654def fshow_source_location : Flag<["-"], "fshow-source-location">, Group<f_Group>;
1655def fspell_checking : Flag<["-"], "fspell-checking">, Group<f_Group>;
1656def fspell_checking_limit_EQ : Joined<["-"], "fspell-checking-limit=">, Group<f_Group>;
1657def fsigned_bitfields : Flag<["-"], "fsigned-bitfields">, Group<f_Group>;
1658def fsigned_char : Flag<["-"], "fsigned-char">, Group<f_Group>;
1659def fno_signed_char : Flag<["-"], "fno-signed-char">, Group<f_Group>,
1660    Flags<[CC1Option]>, HelpText<"Char is unsigned">;
1661def fsplit_stack : Flag<["-"], "fsplit-stack">, Group<f_Group>;
1662def fstack_protector_all : Flag<["-"], "fstack-protector-all">, Group<f_Group>,
1663  HelpText<"Enable stack protectors for all functions">;
1664def fstack_protector_strong : Flag<["-"], "fstack-protector-strong">, Group<f_Group>,
1665  HelpText<"Enable stack protectors for some functions vulnerable to stack smashing. "
1666           "Compared to -fstack-protector, this uses a stronger heuristic "
1667           "that includes functions containing arrays of any size (and any type), "
1668           "as well as any calls to alloca or the taking of an address from a local variable">;
1669def fstack_protector : Flag<["-"], "fstack-protector">, Group<f_Group>,
1670  HelpText<"Enable stack protectors for some functions vulnerable to stack smashing. "
1671           "This uses a loose heuristic which considers functions vulnerable "
1672           "if they contain a char (or 8bit integer) array or constant sized calls to "
1673           "alloca, which are of greater size than ssp-buffer-size (default: 8 bytes). "
1674           "All variable sized calls to alloca are considered vulnerable">;
1675def ftrivial_auto_var_init : Joined<["-"], "ftrivial-auto-var-init=">, Group<f_Group>,
1676  Flags<[CC1Option]>, HelpText<"Initialize trivial automatic stack variables: uninitialized (default)"
1677  " | pattern">, Values<"uninitialized,pattern">;
1678def enable_trivial_var_init_zero : Joined<["-"], "enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang">,
1679  Flags<[CC1Option]>,
1680  HelpText<"Trivial automatic variable initialization to zero is only here for benchmarks, it'll eventually be removed, and I'm OK with that because I'm only using it to benchmark">;
1681def fstandalone_debug : Flag<["-"], "fstandalone-debug">, Group<f_Group>, Flags<[CoreOption]>,
1682  HelpText<"Emit full debug info for all types used by the program">;
1683def fno_standalone_debug : Flag<["-"], "fno-standalone-debug">, Group<f_Group>, Flags<[CoreOption]>,
1684  HelpText<"Limit debug information produced to reduce size of debug binary">;
1685def flimit_debug_info : Flag<["-"], "flimit-debug-info">, Flags<[CoreOption]>, Alias<fno_standalone_debug>;
1686def fno_limit_debug_info : Flag<["-"], "fno-limit-debug-info">, Flags<[CoreOption]>, Alias<fstandalone_debug>;
1687def fdebug_macro : Flag<["-"], "fdebug-macro">, Group<f_Group>, Flags<[CoreOption]>,
1688  HelpText<"Emit macro debug information">;
1689def fno_debug_macro : Flag<["-"], "fno-debug-macro">, Group<f_Group>, Flags<[CoreOption]>,
1690  HelpText<"Do not emit macro debug information">;
1691def fstrict_aliasing : Flag<["-"], "fstrict-aliasing">, Group<f_Group>,
1692  Flags<[DriverOption, CoreOption]>;
1693def fstrict_enums : Flag<["-"], "fstrict-enums">, Group<f_Group>, Flags<[CC1Option]>,
1694  HelpText<"Enable optimizations based on the strict definition of an enum's "
1695           "value range">;
1696def fstrict_vtable_pointers: Flag<["-"], "fstrict-vtable-pointers">,
1697  Group<f_Group>, Flags<[CC1Option]>,
1698  HelpText<"Enable optimizations based on the strict rules for overwriting "
1699             "polymorphic C++ objects">;
1700def fstrict_overflow : Flag<["-"], "fstrict-overflow">, Group<f_Group>;
1701def fsyntax_only : Flag<["-"], "fsyntax-only">,
1702  Flags<[DriverOption,CoreOption,CC1Option]>, Group<Action_Group>;
1703def ftabstop_EQ : Joined<["-"], "ftabstop=">, Group<f_Group>;
1704def ftemplate_depth_EQ : Joined<["-"], "ftemplate-depth=">, Group<f_Group>;
1705def ftemplate_depth_ : Joined<["-"], "ftemplate-depth-">, Group<f_Group>;
1706def ftemplate_backtrace_limit_EQ : Joined<["-"], "ftemplate-backtrace-limit=">,
1707                                   Group<f_Group>;
1708def foperator_arrow_depth_EQ : Joined<["-"], "foperator-arrow-depth=">,
1709                               Group<f_Group>;
1710
1711def fsave_optimization_record : Flag<["-"], "fsave-optimization-record">,
1712  Group<f_Group>, HelpText<"Generate a YAML optimization record file">;
1713def fno_save_optimization_record : Flag<["-"], "fno-save-optimization-record">,
1714  Group<f_Group>, Flags<[NoArgumentUnused]>;
1715def foptimization_record_file_EQ : Joined<["-"], "foptimization-record-file=">,
1716  Group<f_Group>,
1717  HelpText<"Specify the file name of any generated YAML optimization record">;
1718def foptimization_record_passes_EQ : Joined<["-"], "foptimization-record-passes=">,
1719  Group<f_Group>,
1720  HelpText<"Only include passes which match a specified regular expression in the generated optimization record (by default, include all passes)">;
1721
1722
1723def ftest_coverage : Flag<["-"], "ftest-coverage">, Group<f_Group>;
1724def fvectorize : Flag<["-"], "fvectorize">, Group<f_Group>,
1725  HelpText<"Enable the loop vectorization passes">;
1726def fno_vectorize : Flag<["-"], "fno-vectorize">, Group<f_Group>;
1727def : Flag<["-"], "ftree-vectorize">, Alias<fvectorize>;
1728def : Flag<["-"], "fno-tree-vectorize">, Alias<fno_vectorize>;
1729def fslp_vectorize : Flag<["-"], "fslp-vectorize">, Group<f_Group>,
1730  HelpText<"Enable the superword-level parallelism vectorization passes">;
1731def fno_slp_vectorize : Flag<["-"], "fno-slp-vectorize">, Group<f_Group>;
1732def : Flag<["-"], "ftree-slp-vectorize">, Alias<fslp_vectorize>;
1733def : Flag<["-"], "fno-tree-slp-vectorize">, Alias<fno_slp_vectorize>;
1734def Wlarge_by_value_copy_def : Flag<["-"], "Wlarge-by-value-copy">,
1735  HelpText<"Warn if a function definition returns or accepts an object larger "
1736           "in bytes than a given value">, Flags<[HelpHidden]>;
1737def Wlarge_by_value_copy_EQ : Joined<["-"], "Wlarge-by-value-copy=">, Flags<[CC1Option]>;
1738
1739// These "special" warning flags are effectively processed as f_Group flags by the driver:
1740// Just silence warnings about -Wlarger-than for now.
1741def Wlarger_than_EQ : Joined<["-"], "Wlarger-than=">, Group<clang_ignored_f_Group>;
1742def Wlarger_than_ : Joined<["-"], "Wlarger-than-">, Alias<Wlarger_than_EQ>;
1743def Wframe_larger_than_EQ : Joined<["-"], "Wframe-larger-than=">, Group<f_Group>, Flags<[DriverOption]>;
1744
1745def : Flag<["-"], "fterminated-vtables">, Alias<fapple_kext>;
1746def fthreadsafe_statics : Flag<["-"], "fthreadsafe-statics">, Group<f_Group>;
1747def ftime_report : Flag<["-"], "ftime-report">, Group<f_Group>, Flags<[CC1Option]>;
1748def ftlsmodel_EQ : Joined<["-"], "ftls-model=">, Group<f_Group>, Flags<[CC1Option]>;
1749def ftrapv : Flag<["-"], "ftrapv">, Group<f_Group>, Flags<[CC1Option]>,
1750  HelpText<"Trap on integer overflow">;
1751def ftrapv_handler_EQ : Joined<["-"], "ftrapv-handler=">, Group<f_Group>,
1752  MetaVarName<"<function name>">,
1753  HelpText<"Specify the function to be called on overflow">;
1754def ftrapv_handler : Separate<["-"], "ftrapv-handler">, Group<f_Group>, Flags<[CC1Option]>;
1755def ftrap_function_EQ : Joined<["-"], "ftrap-function=">, Group<f_Group>, Flags<[CC1Option]>,
1756  HelpText<"Issue call to specified function rather than a trap instruction">;
1757def funit_at_a_time : Flag<["-"], "funit-at-a-time">, Group<f_Group>;
1758def funroll_loops : Flag<["-"], "funroll-loops">, Group<f_Group>,
1759  HelpText<"Turn on loop unroller">, Flags<[CC1Option]>;
1760def fno_unroll_loops : Flag<["-"], "fno-unroll-loops">, Group<f_Group>,
1761  HelpText<"Turn off loop unroller">, Flags<[CC1Option]>;
1762def freroll_loops : Flag<["-"], "freroll-loops">, Group<f_Group>,
1763  HelpText<"Turn on loop reroller">, Flags<[CC1Option]>;
1764def fno_reroll_loops : Flag<["-"], "fno-reroll-loops">, Group<f_Group>,
1765  HelpText<"Turn off loop reroller">;
1766def ftrigraphs : Flag<["-"], "ftrigraphs">, Group<f_Group>,
1767  HelpText<"Process trigraph sequences">, Flags<[CC1Option]>;
1768def fno_trigraphs : Flag<["-"], "fno-trigraphs">, Group<f_Group>,
1769  HelpText<"Do not process trigraph sequences">, Flags<[CC1Option]>;
1770def funsigned_bitfields : Flag<["-"], "funsigned-bitfields">, Group<f_Group>;
1771def funsigned_char : Flag<["-"], "funsigned-char">, Group<f_Group>;
1772def fno_unsigned_char : Flag<["-"], "fno-unsigned-char">;
1773def funwind_tables : Flag<["-"], "funwind-tables">, Group<f_Group>;
1774def fuse_cxa_atexit : Flag<["-"], "fuse-cxa-atexit">, Group<f_Group>;
1775def fregister_global_dtors_with_atexit : Flag<["-"], "fregister-global-dtors-with-atexit">, Group<f_Group>, Flags<[CC1Option]>,
1776  HelpText<"Use atexit or __cxa_atexit to register global destructors">;
1777def fuse_init_array : Flag<["-"], "fuse-init-array">, Group<f_Group>, Flags<[CC1Option]>,
1778  HelpText<"Use .init_array instead of .ctors">;
1779def fno_var_tracking : Flag<["-"], "fno-var-tracking">, Group<clang_ignored_f_Group>;
1780def fverbose_asm : Flag<["-"], "fverbose-asm">, Group<f_Group>;
1781def fvisibility_EQ : Joined<["-"], "fvisibility=">, Group<f_Group>,
1782  HelpText<"Set the default symbol visibility for all global declarations">, Values<"hidden,default">;
1783def fvisibility_inlines_hidden : Flag<["-"], "fvisibility-inlines-hidden">, Group<f_Group>,
1784  HelpText<"Give inline C++ member functions hidden visibility by default">,
1785  Flags<[CC1Option]>;
1786def fvisibility_ms_compat : Flag<["-"], "fvisibility-ms-compat">, Group<f_Group>,
1787  HelpText<"Give global types 'default' visibility and global functions and "
1788           "variables 'hidden' visibility by default">;
1789def fvisibility_global_new_delete_hidden : Flag<["-"], "fvisibility-global-new-delete-hidden">, Group<f_Group>,
1790  HelpText<"Give global C++ operator new and delete declarations hidden visibility">, Flags<[CC1Option]>;
1791def fwhole_program_vtables : Flag<["-"], "fwhole-program-vtables">, Group<f_Group>,
1792  Flags<[CoreOption, CC1Option]>,
1793  HelpText<"Enables whole-program vtable optimization. Requires -flto">;
1794def fno_whole_program_vtables : Flag<["-"], "fno-whole-program-vtables">, Group<f_Group>,
1795  Flags<[CoreOption]>;
1796def fsplit_lto_unit : Flag<["-"], "fsplit-lto-unit">, Group<f_Group>,
1797  Flags<[CoreOption, CC1Option]>,
1798  HelpText<"Enables splitting of the LTO unit.">;
1799def fno_split_lto_unit : Flag<["-"], "fno-split-lto-unit">, Group<f_Group>,
1800  Flags<[CoreOption]>;
1801def fforce_emit_vtables : Flag<["-"], "fforce-emit-vtables">, Group<f_Group>,
1802    Flags<[CC1Option]>,
1803    HelpText<"Emits more virtual tables to improve devirtualization">;
1804def fno_force_emit_vtables : Flag<["-"], "fno-force-emit-vtables">, Group<f_Group>,
1805  Flags<[CoreOption]>;
1806def fwrapv : Flag<["-"], "fwrapv">, Group<f_Group>, Flags<[CC1Option]>,
1807  HelpText<"Treat signed integer overflow as two's complement">;
1808def fwritable_strings : Flag<["-"], "fwritable-strings">, Group<f_Group>, Flags<[CC1Option]>,
1809  HelpText<"Store string literals as writable data">;
1810def fzero_initialized_in_bss : Flag<["-"], "fzero-initialized-in-bss">, Group<f_Group>;
1811def ffunction_sections : Flag<["-"], "ffunction-sections">, Group<f_Group>,
1812  Flags<[CC1Option]>,
1813  HelpText<"Place each function in its own section (ELF Only)">;
1814def fno_function_sections : Flag<["-"], "fno-function-sections">,
1815  Group<f_Group>, Flags<[CC1Option]>;
1816def fdata_sections : Flag <["-"], "fdata-sections">, Group<f_Group>,
1817 Flags<[CC1Option]>, HelpText<"Place each data in its own section (ELF Only)">;
1818def fno_data_sections : Flag <["-"], "fno-data-sections">, Group<f_Group>,
1819  Flags<[CC1Option]>;
1820def fstack_size_section : Flag<["-"], "fstack-size-section">, Group<f_Group>, Flags<[CC1Option]>,
1821  HelpText<"Emit section containing metadata on function stack sizes">;
1822def fno_stack_size_section : Flag<["-"], "fno-stack-size-section">, Group<f_Group>, Flags<[CC1Option]>,
1823  HelpText<"Don't emit section containing metadata on function stack sizes">;
1824
1825def funique_section_names : Flag <["-"], "funique-section-names">,
1826  Group<f_Group>, Flags<[CC1Option]>,
1827  HelpText<"Use unique names for text and data sections (ELF Only)">;
1828def fno_unique_section_names : Flag <["-"], "fno-unique-section-names">,
1829  Group<f_Group>, Flags<[CC1Option]>;
1830
1831def fstrict_return : Flag<["-"], "fstrict-return">, Group<f_Group>,
1832  Flags<[CC1Option]>,
1833  HelpText<"Always treat control flow paths that fall off the end of a "
1834           "non-void function as unreachable">;
1835def fno_strict_return : Flag<["-"], "fno-strict-return">, Group<f_Group>,
1836  Flags<[CC1Option]>;
1837
1838def fallow_editor_placeholders : Flag<["-"], "fallow-editor-placeholders">,
1839  Group<f_Group>, Flags<[CC1Option]>,
1840  HelpText<"Treat editor placeholders as valid source code">;
1841def fno_allow_editor_placeholders : Flag<["-"],
1842  "fno-allow-editor-placeholders">, Group<f_Group>;
1843
1844def fdebug_types_section: Flag <["-"], "fdebug-types-section">, Group<f_Group>,
1845  Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">;
1846def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group<f_Group>,
1847  Flags<[CC1Option]>;
1848def fdebug_ranges_base_address: Flag <["-"], "fdebug-ranges-base-address">, Group<f_Group>,
1849  Flags<[CC1Option]>, HelpText<"Use DWARF base address selection entries in debug_ranges">;
1850def fno_debug_ranges_base_address: Flag <["-"], "fno-debug-ranges-base-address">, Group<f_Group>,
1851  Flags<[CC1Option]>;
1852def fsplit_dwarf_inlining: Flag <["-"], "fsplit-dwarf-inlining">, Group<f_Group>,
1853  Flags<[CC1Option]>, HelpText<"Provide minimal debug info in the object/executable to facilitate online symbolication/stack traces in the absence of .dwo/.dwp files when using Split DWARF">;
1854def fno_split_dwarf_inlining: Flag<["-"], "fno-split-dwarf-inlining">, Group<f_Group>,
1855  Flags<[CC1Option]>;
1856def fdebug_prefix_map_EQ
1857  : Joined<["-"], "fdebug-prefix-map=">, Group<f_Group>,
1858    Flags<[CC1Option,CC1AsOption]>,
1859    HelpText<"remap file source paths in debug info">;
1860def g_Flag : Flag<["-"], "g">, Group<g_Group>,
1861  HelpText<"Generate source-level debug information">;
1862def gline_tables_only : Flag<["-"], "gline-tables-only">, Group<gN_Group>,
1863  Flags<[CoreOption]>, HelpText<"Emit debug line number tables only">;
1864def gline_directives_only : Flag<["-"], "gline-directives-only">, Group<gN_Group>,
1865  Flags<[CoreOption]>, HelpText<"Emit debug line info directives only">;
1866def gmlt : Flag<["-"], "gmlt">, Alias<gline_tables_only>;
1867def g0 : Flag<["-"], "g0">, Group<gN_Group>;
1868def g1 : Flag<["-"], "g1">, Group<gN_Group>, Alias<gline_tables_only>;
1869def g2 : Flag<["-"], "g2">, Group<gN_Group>;
1870def g3 : Flag<["-"], "g3">, Group<gN_Group>;
1871def ggdb : Flag<["-"], "ggdb">, Group<gTune_Group>;
1872def ggdb0 : Flag<["-"], "ggdb0">, Group<ggdbN_Group>;
1873def ggdb1 : Flag<["-"], "ggdb1">, Group<ggdbN_Group>;
1874def ggdb2 : Flag<["-"], "ggdb2">, Group<ggdbN_Group>;
1875def ggdb3 : Flag<["-"], "ggdb3">, Group<ggdbN_Group>;
1876def glldb : Flag<["-"], "glldb">, Group<gTune_Group>;
1877def gsce : Flag<["-"], "gsce">, Group<gTune_Group>;
1878def gdwarf_2 : Flag<["-"], "gdwarf-2">, Group<g_Group>,
1879  HelpText<"Generate source-level debug information with dwarf version 2">;
1880def gdwarf_3 : Flag<["-"], "gdwarf-3">, Group<g_Group>,
1881  HelpText<"Generate source-level debug information with dwarf version 3">;
1882def gdwarf_4 : Flag<["-"], "gdwarf-4">, Group<g_Group>,
1883  HelpText<"Generate source-level debug information with dwarf version 4">;
1884def gdwarf_5 : Flag<["-"], "gdwarf-5">, Group<g_Group>,
1885  HelpText<"Generate source-level debug information with dwarf version 5">;
1886
1887def gcodeview : Flag<["-"], "gcodeview">,
1888  HelpText<"Generate CodeView debug information">,
1889  Flags<[CC1Option, CC1AsOption, CoreOption]>;
1890def gcodeview_ghash : Flag<["-"], "gcodeview-ghash">,
1891  HelpText<"Emit type record hashes in a .debug$H section">,
1892  Flags<[CC1Option, CoreOption]>;
1893def gno_codeview_ghash : Flag<["-"], "gno-codeview-ghash">, Flags<[CoreOption]>;
1894
1895// Equivalent to our default dwarf version. Forces usual dwarf emission when
1896// CodeView is enabled.
1897def gdwarf : Flag<["-"], "gdwarf">, Alias<gdwarf_4>, Flags<[CoreOption]>;
1898
1899def gfull : Flag<["-"], "gfull">, Group<g_Group>;
1900def gused : Flag<["-"], "gused">, Group<g_Group>;
1901def gstabs : Joined<["-"], "gstabs">, Group<g_Group>, Flags<[Unsupported]>;
1902def gcoff : Joined<["-"], "gcoff">, Group<g_Group>, Flags<[Unsupported]>;
1903def gxcoff : Joined<["-"], "gxcoff">, Group<g_Group>, Flags<[Unsupported]>;
1904def gvms : Joined<["-"], "gvms">, Group<g_Group>, Flags<[Unsupported]>;
1905def gtoggle : Flag<["-"], "gtoggle">, Group<g_flags_Group>, Flags<[Unsupported]>;
1906def grecord_command_line : Flag<["-"], "grecord-command-line">,
1907  Group<g_flags_Group>;
1908def gno_record_command_line : Flag<["-"], "gno-record-command-line">,
1909  Group<g_flags_Group>;
1910def : Flag<["-"], "grecord-gcc-switches">, Alias<grecord_command_line>;
1911def : Flag<["-"], "gno-record-gcc-switches">, Alias<gno_record_command_line>;
1912def gstrict_dwarf : Flag<["-"], "gstrict-dwarf">, Group<g_flags_Group>;
1913def gno_strict_dwarf : Flag<["-"], "gno-strict-dwarf">, Group<g_flags_Group>;
1914def gcolumn_info : Flag<["-"], "gcolumn-info">, Group<g_flags_Group>, Flags<[CoreOption]>;
1915def gno_column_info : Flag<["-"], "gno-column-info">, Group<g_flags_Group>, Flags<[CoreOption]>;
1916def gsplit_dwarf : Flag<["-"], "gsplit-dwarf">, Group<g_flags_Group>;
1917def gsplit_dwarf_EQ : Joined<["-"], "gsplit-dwarf=">, Group<g_flags_Group>,
1918  HelpText<"Set DWARF fission mode to either 'split' or 'single'">,
1919  Values<"split,single">;
1920def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group<g_flags_Group>, Flags<[CC1Option]>;
1921def gno_gnu_pubnames : Flag<["-"], "gno-gnu-pubnames">, Group<g_flags_Group>, Flags<[CC1Option]>;
1922def gpubnames : Flag<["-"], "gpubnames">, Group<g_flags_Group>, Flags<[CC1Option]>;
1923def gno_pubnames : Flag<["-"], "gno-pubnames">, Group<g_flags_Group>, Flags<[CC1Option]>;
1924def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group<g_flags_Group>;
1925def gmodules : Flag <["-"], "gmodules">, Group<gN_Group>,
1926  HelpText<"Generate debug info with external references to clang modules"
1927           " or precompiled headers">;
1928def gz : Flag<["-"], "gz">, Group<g_flags_Group>,
1929    HelpText<"DWARF debug sections compression type">;
1930def gz_EQ : Joined<["-"], "gz=">, Group<g_flags_Group>,
1931    HelpText<"DWARF debug sections compression type">;
1932def gembed_source : Flag<["-"], "gembed-source">, Group<g_flags_Group>, Flags<[CC1Option]>,
1933    HelpText<"Embed source text in DWARF debug sections">;
1934def gno_embed_source : Flag<["-"], "gno-embed-source">, Group<g_flags_Group>,
1935    Flags<[DriverOption]>,
1936    HelpText<"Restore the default behavior of not embedding source text in DWARF debug sections">;
1937def headerpad__max__install__names : Joined<["-"], "headerpad_max_install_names">;
1938def help : Flag<["-", "--"], "help">, Flags<[CC1Option,CC1AsOption]>,
1939  HelpText<"Display available options">;
1940def index_header_map : Flag<["-"], "index-header-map">, Flags<[CC1Option]>,
1941  HelpText<"Make the next included directory (-I or -F) an indexer header map">;
1942def idirafter : JoinedOrSeparate<["-"], "idirafter">, Group<clang_i_Group>, Flags<[CC1Option]>,
1943  HelpText<"Add directory to AFTER include search path">;
1944def iframework : JoinedOrSeparate<["-"], "iframework">, Group<clang_i_Group>, Flags<[CC1Option]>,
1945  HelpText<"Add directory to SYSTEM framework search path">;
1946def iframeworkwithsysroot : JoinedOrSeparate<["-"], "iframeworkwithsysroot">,
1947  Group<clang_i_Group>,
1948  HelpText<"Add directory to SYSTEM framework search path, "
1949           "absolute paths are relative to -isysroot">,
1950  MetaVarName<"<directory>">, Flags<[CC1Option]>;
1951def imacros : JoinedOrSeparate<["-", "--"], "imacros">, Group<clang_i_Group>, Flags<[CC1Option]>,
1952  HelpText<"Include macros from file before parsing">, MetaVarName<"<file>">;
1953def image__base : Separate<["-"], "image_base">;
1954def include_ : JoinedOrSeparate<["-", "--"], "include">, Group<clang_i_Group>, EnumName<"include">,
1955    MetaVarName<"<file>">, HelpText<"Include file before parsing">, Flags<[CC1Option]>;
1956def include_pch : Separate<["-"], "include-pch">, Group<clang_i_Group>, Flags<[CC1Option]>,
1957  HelpText<"Include precompiled header file">, MetaVarName<"<file>">;
1958def relocatable_pch : Flag<["-", "--"], "relocatable-pch">, Flags<[CC1Option]>,
1959  HelpText<"Whether to build a relocatable precompiled header">;
1960def verify_pch : Flag<["-"], "verify-pch">, Group<Action_Group>, Flags<[CC1Option]>,
1961  HelpText<"Load and verify that a pre-compiled header file is not stale">;
1962def init : Separate<["-"], "init">;
1963def install__name : Separate<["-"], "install_name">;
1964def iprefix : JoinedOrSeparate<["-"], "iprefix">, Group<clang_i_Group>, Flags<[CC1Option]>,
1965  HelpText<"Set the -iwithprefix/-iwithprefixbefore prefix">, MetaVarName<"<dir>">;
1966def iquote : JoinedOrSeparate<["-"], "iquote">, Group<clang_i_Group>, Flags<[CC1Option]>,
1967  HelpText<"Add directory to QUOTE include search path">, MetaVarName<"<directory>">;
1968def isysroot : JoinedOrSeparate<["-"], "isysroot">, Group<clang_i_Group>, Flags<[CC1Option]>,
1969  HelpText<"Set the system root directory (usually /)">, MetaVarName<"<dir>">;
1970def isystem : JoinedOrSeparate<["-"], "isystem">, Group<clang_i_Group>,
1971  Flags<[CC1Option]>,
1972  HelpText<"Add directory to SYSTEM include search path">, MetaVarName<"<directory>">;
1973def isystem_after : JoinedOrSeparate<["-"], "isystem-after">,
1974  Group<clang_i_Group>, Flags<[DriverOption]>, MetaVarName<"<directory>">,
1975  HelpText<"Add directory to end of the SYSTEM include search path">;
1976def iwithprefixbefore : JoinedOrSeparate<["-"], "iwithprefixbefore">, Group<clang_i_Group>,
1977  HelpText<"Set directory to include search path with prefix">, MetaVarName<"<dir>">,
1978  Flags<[CC1Option]>;
1979def iwithprefix : JoinedOrSeparate<["-"], "iwithprefix">, Group<clang_i_Group>, Flags<[CC1Option]>,
1980  HelpText<"Set directory to SYSTEM include search path with prefix">, MetaVarName<"<dir>">;
1981def iwithsysroot : JoinedOrSeparate<["-"], "iwithsysroot">, Group<clang_i_Group>,
1982  HelpText<"Add directory to SYSTEM include search path, "
1983           "absolute paths are relative to -isysroot">, MetaVarName<"<directory>">,
1984  Flags<[CC1Option]>;
1985def ivfsoverlay : JoinedOrSeparate<["-"], "ivfsoverlay">, Group<clang_i_Group>, Flags<[CC1Option]>,
1986  HelpText<"Overlay the virtual filesystem described by file over the real file system">;
1987def imultilib : Separate<["-"], "imultilib">, Group<gfortran_Group>;
1988def keep__private__externs : Flag<["-"], "keep_private_externs">;
1989def l : JoinedOrSeparate<["-"], "l">, Flags<[LinkerInput, RenderJoined]>,
1990        Group<Link_Group>;
1991def lazy__framework : Separate<["-"], "lazy_framework">, Flags<[LinkerInput]>;
1992def lazy__library : Separate<["-"], "lazy_library">, Flags<[LinkerInput]>;
1993def mlittle_endian : Flag<["-"], "mlittle-endian">, Flags<[DriverOption]>;
1994def EL : Flag<["-"], "EL">, Alias<mlittle_endian>;
1995def mbig_endian : Flag<["-"], "mbig-endian">, Flags<[DriverOption]>;
1996def EB : Flag<["-"], "EB">, Alias<mbig_endian>;
1997def m16 : Flag<["-"], "m16">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
1998def m32 : Flag<["-"], "m32">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
1999def mqdsp6_compat : Flag<["-"], "mqdsp6-compat">, Group<m_Group>, Flags<[DriverOption,CC1Option]>,
2000  HelpText<"Enable hexagon-qdsp6 backward compatibility">;
2001def m64 : Flag<["-"], "m64">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
2002def mx32 : Flag<["-"], "mx32">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
2003def mabi_EQ : Joined<["-"], "mabi=">, Group<m_Group>;
2004def miamcu : Flag<["-"], "miamcu">, Group<m_Group>, Flags<[DriverOption, CoreOption]>,
2005  HelpText<"Use Intel MCU ABI">;
2006def mno_iamcu : Flag<["-"], "mno-iamcu">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
2007def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group<clang_ignored_m_Group>;
2008def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group<clang_ignored_m_Group>;
2009def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group<clang_ignored_m_Group>;
2010def mfancy_math_387 : Flag<["-"], "mfancy-math-387">, Group<clang_ignored_m_Group>;
2011def mlong_calls : Flag<["-"], "mlong-calls">, Group<m_Group>,
2012  HelpText<"Generate branches with extended addressability, usually via indirect jumps.">;
2013def mno_long_calls : Flag<["-"], "mno-long-calls">, Group<m_Group>,
2014  HelpText<"Restore the default behaviour of not generating long calls">;
2015def mexecute_only : Flag<["-"], "mexecute-only">, Group<m_arm_Features_Group>,
2016  HelpText<"Disallow generation of data access to code sections (ARM only)">;
2017def mno_execute_only : Flag<["-"], "mno-execute-only">, Group<m_arm_Features_Group>,
2018  HelpText<"Allow generation of data access to code sections (ARM only)">;
2019def mtp_mode_EQ : Joined<["-"], "mtp=">, Group<m_arm_Features_Group>, Values<"soft, cp15">,
2020  HelpText<"Read thread pointer from coprocessor register (ARM only)">;
2021def mpure_code : Flag<["-"], "mpure-code">, Alias<mexecute_only>; // Alias for GCC compatibility
2022def mno_pure_code : Flag<["-"], "mno-pure-code">, Alias<mno_execute_only>;
2023def mtvos_version_min_EQ : Joined<["-"], "mtvos-version-min=">, Group<m_Group>;
2024def mappletvos_version_min_EQ : Joined<["-"], "mappletvos-version-min=">, Alias<mtvos_version_min_EQ>;
2025def mtvos_simulator_version_min_EQ : Joined<["-"], "mtvos-simulator-version-min=">;
2026def mappletvsimulator_version_min_EQ : Joined<["-"], "mappletvsimulator-version-min=">, Alias<mtvos_simulator_version_min_EQ>;
2027def mwatchos_version_min_EQ : Joined<["-"], "mwatchos-version-min=">, Group<m_Group>;
2028def mwatchos_simulator_version_min_EQ : Joined<["-"], "mwatchos-simulator-version-min=">;
2029def mwatchsimulator_version_min_EQ : Joined<["-"], "mwatchsimulator-version-min=">, Alias<mwatchos_simulator_version_min_EQ>;
2030def march_EQ : Joined<["-"], "march=">, Group<m_Group>, Flags<[CoreOption]>;
2031def masm_EQ : Joined<["-"], "masm=">, Group<m_Group>, Flags<[DriverOption]>;
2032def mcmodel_EQ : Joined<["-"], "mcmodel=">, Group<m_Group>;
2033def mimplicit_it_EQ : Joined<["-"], "mimplicit-it=">, Group<m_Group>;
2034def mdefault_build_attributes : Joined<["-"], "mdefault-build-attributes">, Group<m_Group>;
2035def mno_default_build_attributes : Joined<["-"], "mno-default-build-attributes">, Group<m_Group>;
2036def mconstant_cfstrings : Flag<["-"], "mconstant-cfstrings">, Group<clang_ignored_m_Group>;
2037def mconsole : Joined<["-"], "mconsole">, Group<m_Group>, Flags<[DriverOption]>;
2038def mwindows : Joined<["-"], "mwindows">, Group<m_Group>, Flags<[DriverOption]>;
2039def mdll : Joined<["-"], "mdll">, Group<m_Group>, Flags<[DriverOption]>;
2040def municode : Joined<["-"], "municode">, Group<m_Group>, Flags<[DriverOption]>;
2041def mthreads : Joined<["-"], "mthreads">, Group<m_Group>, Flags<[DriverOption]>;
2042def mcpu_EQ : Joined<["-"], "mcpu=">, Group<m_Group>;
2043def mmcu_EQ : Joined<["-"], "mmcu=">, Group<m_Group>;
2044def mdynamic_no_pic : Joined<["-"], "mdynamic-no-pic">, Group<m_Group>;
2045def mfix_and_continue : Flag<["-"], "mfix-and-continue">, Group<clang_ignored_m_Group>;
2046def mieee_fp : Flag<["-"], "mieee-fp">, Group<clang_ignored_m_Group>;
2047def minline_all_stringops : Flag<["-"], "minline-all-stringops">, Group<clang_ignored_m_Group>;
2048def mno_inline_all_stringops : Flag<["-"], "mno-inline-all-stringops">, Group<clang_ignored_m_Group>;
2049def malign_double : Flag<["-"], "malign-double">, Group<m_Group>, Flags<[CC1Option]>,
2050  HelpText<"Align doubles to two words in structs (x86 only)">;
2051def mfloat_abi_EQ : Joined<["-"], "mfloat-abi=">, Group<m_Group>, Values<"soft,softfp,hard">;
2052def mfpmath_EQ : Joined<["-"], "mfpmath=">, Group<m_Group>;
2053def mfpu_EQ : Joined<["-"], "mfpu=">, Group<m_Group>;
2054def mhwdiv_EQ : Joined<["-"], "mhwdiv=">, Group<m_Group>;
2055def mhwmult_EQ : Joined<["-"], "mhwmult=">, Group<m_Group>;
2056def mglobal_merge : Flag<["-"], "mglobal-merge">, Group<m_Group>, Flags<[CC1Option]>,
2057  HelpText<"Enable merging of globals">;
2058def mhard_float : Flag<["-"], "mhard-float">, Group<m_Group>;
2059def miphoneos_version_min_EQ : Joined<["-"], "miphoneos-version-min=">, Group<m_Group>;
2060def mios_version_min_EQ : Joined<["-"], "mios-version-min=">,
2061  Alias<miphoneos_version_min_EQ>, HelpText<"Set iOS deployment target">;
2062def mios_simulator_version_min_EQ : Joined<["-"], "mios-simulator-version-min=">;
2063def miphonesimulator_version_min_EQ : Joined<["-"], "miphonesimulator-version-min=">, Alias<mios_simulator_version_min_EQ>;
2064def mkernel : Flag<["-"], "mkernel">, Group<m_Group>;
2065def mlinker_version_EQ : Joined<["-"], "mlinker-version=">,
2066  Flags<[DriverOption]>;
2067def mllvm : Separate<["-"], "mllvm">, Flags<[CC1Option,CC1AsOption,CoreOption]>,
2068  HelpText<"Additional arguments to forward to LLVM's option processing">;
2069def mmacosx_version_min_EQ : Joined<["-"], "mmacosx-version-min=">,
2070  Group<m_Group>, HelpText<"Set Mac OS X deployment target">;
2071def mmacos_version_min_EQ : Joined<["-"], "mmacos-version-min=">,
2072  Group<m_Group>, Alias<mmacosx_version_min_EQ>;
2073def mms_bitfields : Flag<["-"], "mms-bitfields">, Group<m_Group>, Flags<[CC1Option]>,
2074  HelpText<"Set the default structure layout to be compatible with the Microsoft compiler standard">;
2075def moutline : Flag<["-"], "moutline">, Group<f_clang_Group>, Flags<[CC1Option]>,
2076    HelpText<"Enable function outlining (AArch64 only)">;
2077def mno_outline : Flag<["-"], "mno-outline">, Group<f_clang_Group>, Flags<[CC1Option]>,
2078    HelpText<"Disable function outlining (AArch64 only)">;
2079def mno_ms_bitfields : Flag<["-"], "mno-ms-bitfields">, Group<m_Group>,
2080  HelpText<"Do not set the default structure layout to be compatible with the Microsoft compiler standard">;
2081def mstackrealign : Flag<["-"], "mstackrealign">, Group<m_Group>, Flags<[CC1Option]>,
2082  HelpText<"Force realign the stack at entry to every function">;
2083def mstack_alignment : Joined<["-"], "mstack-alignment=">, Group<m_Group>, Flags<[CC1Option]>,
2084  HelpText<"Set the stack alignment">;
2085def mstack_probe_size : Joined<["-"], "mstack-probe-size=">, Group<m_Group>, Flags<[CC1Option]>,
2086  HelpText<"Set the stack probe size">;
2087def mstack_arg_probe : Flag<["-"], "mstack-arg-probe">, Group<m_Group>,
2088  HelpText<"Enable stack probes">;
2089def mno_stack_arg_probe : Flag<["-"], "mno-stack-arg-probe">, Group<m_Group>, Flags<[CC1Option]>,
2090  HelpText<"Disable stack probes which are enabled by default">;
2091def mthread_model : Separate<["-"], "mthread-model">, Group<m_Group>, Flags<[CC1Option]>,
2092  HelpText<"The thread model to use, e.g. posix, single (posix by default)">, Values<"posix,single">;
2093def meabi : Separate<["-"], "meabi">, Group<m_Group>, Flags<[CC1Option]>,
2094  HelpText<"Set EABI type, e.g. 4, 5 or gnu (default depends on triple)">, Values<"default,4,5,gnu">;
2095
2096def mno_constant_cfstrings : Flag<["-"], "mno-constant-cfstrings">, Group<m_Group>;
2097def mno_global_merge : Flag<["-"], "mno-global-merge">, Group<m_Group>, Flags<[CC1Option]>,
2098  HelpText<"Disable merging of globals">;
2099def mno_pascal_strings : Flag<["-"], "mno-pascal-strings">,
2100  Alias<fno_pascal_strings>;
2101def mno_red_zone : Flag<["-"], "mno-red-zone">, Group<m_Group>;
2102def mno_tls_direct_seg_refs : Flag<["-"], "mno-tls-direct-seg-refs">, Group<m_Group>, Flags<[CC1Option]>,
2103  HelpText<"Disable direct TLS access through segment registers">;
2104def mno_relax_all : Flag<["-"], "mno-relax-all">, Group<m_Group>;
2105def mno_rtd: Flag<["-"], "mno-rtd">, Group<m_Group>;
2106def mno_soft_float : Flag<["-"], "mno-soft-float">, Group<m_Group>;
2107def mno_stackrealign : Flag<["-"], "mno-stackrealign">, Group<m_Group>;
2108
2109def mretpoline : Flag<["-"], "mretpoline">, Group<m_Group>, Flags<[CoreOption,DriverOption]>;
2110def mno_retpoline : Flag<["-"], "mno-retpoline">, Group<m_Group>, Flags<[CoreOption,DriverOption]>;
2111def mspeculative_load_hardening : Flag<["-"], "mspeculative-load-hardening">,
2112  Group<m_Group>, Flags<[CoreOption,CC1Option]>;
2113def mno_speculative_load_hardening : Flag<["-"], "mno-speculative-load-hardening">,
2114  Group<m_Group>, Flags<[CoreOption]>;
2115
2116def mrelax : Flag<["-"], "mrelax">, Group<m_riscv_Features_Group>,
2117  HelpText<"Enable linker relaxation">;
2118def mno_relax : Flag<["-"], "mno-relax">, Group<m_riscv_Features_Group>,
2119  HelpText<"Disable linker relaxation">;
2120
2121def munaligned_access : Flag<["-"], "munaligned-access">, Group<m_arm_Features_Group>,
2122  HelpText<"Allow memory accesses to be unaligned (AArch32/AArch64 only)">;
2123def mno_unaligned_access : Flag<["-"], "mno-unaligned-access">, Group<m_arm_Features_Group>,
2124  HelpText<"Force all memory accesses to be aligned (AArch32/AArch64 only)">;
2125def mstrict_align : Flag<["-"], "mstrict-align">, Alias<mno_unaligned_access>, Flags<[CC1Option,HelpHidden]>,
2126  HelpText<"Force all memory accesses to be aligned (same as mno-unaligned-access)">;
2127def mno_thumb : Flag<["-"], "mno-thumb">, Group<m_arm_Features_Group>;
2128def mrestrict_it: Flag<["-"], "mrestrict-it">, Group<m_arm_Features_Group>,
2129  HelpText<"Disallow generation of deprecated IT blocks for ARMv8. It is on by default for ARMv8 Thumb mode.">;
2130def mno_restrict_it: Flag<["-"], "mno-restrict-it">, Group<m_arm_Features_Group>,
2131  HelpText<"Allow generation of deprecated IT blocks for ARMv8. It is off by default for ARMv8 Thumb mode">;
2132def marm : Flag<["-"], "marm">, Alias<mno_thumb>;
2133def ffixed_r9 : Flag<["-"], "ffixed-r9">, Group<m_arm_Features_Group>,
2134  HelpText<"Reserve the r9 register (ARM only)">;
2135def mno_movt : Flag<["-"], "mno-movt">, Group<m_arm_Features_Group>,
2136  HelpText<"Disallow use of movt/movw pairs (ARM only)">;
2137def mcrc : Flag<["-"], "mcrc">, Group<m_Group>,
2138  HelpText<"Allow use of CRC instructions (ARM/Mips only)">;
2139def mnocrc : Flag<["-"], "mnocrc">, Group<m_arm_Features_Group>,
2140  HelpText<"Disallow use of CRC instructions (ARM only)">;
2141def mno_neg_immediates: Flag<["-"], "mno-neg-immediates">, Group<m_arm_Features_Group>,
2142  HelpText<"Disallow converting instructions with negative immediates to their negation or inversion.">;
2143
2144def mgeneral_regs_only : Flag<["-"], "mgeneral-regs-only">, Group<m_aarch64_Features_Group>,
2145  HelpText<"Generate code which only uses the general purpose registers (AArch64 only)">;
2146def mfix_cortex_a53_835769 : Flag<["-"], "mfix-cortex-a53-835769">,
2147  Group<m_aarch64_Features_Group>,
2148  HelpText<"Workaround Cortex-A53 erratum 835769 (AArch64 only)">;
2149def mno_fix_cortex_a53_835769 : Flag<["-"], "mno-fix-cortex-a53-835769">,
2150  Group<m_aarch64_Features_Group>,
2151  HelpText<"Don't workaround Cortex-A53 erratum 835769 (AArch64 only)">;
2152foreach i = {1-7,9-15,18,20-28} in
2153  def ffixed_x#i : Flag<["-"], "ffixed-x"#i>, Group<m_aarch64_Features_Group>,
2154    HelpText<"Reserve the "#i#" register (AArch64 only)">;
2155
2156foreach i = {8-15,18} in
2157  def fcall_saved_x#i : Flag<["-"], "fcall-saved-x"#i>, Group<m_aarch64_Features_Group>,
2158    HelpText<"Make the x"#i#" register call-saved (AArch64 only)">;
2159
2160def msign_return_address_EQ : Joined<["-"], "msign-return-address=">,
2161  Flags<[CC1Option]>, Group<m_Group>, Values<"none,all,non-leaf">,
2162  HelpText<"Select return address signing scope">;
2163def mbranch_protection_EQ : Joined<["-"], "mbranch-protection=">,
2164  HelpText<"Enforce targets of indirect branches and function returns">;
2165
2166def msimd128 : Flag<["-"], "msimd128">, Group<m_wasm_Features_Group>;
2167def munimplemented_simd128 : Flag<["-"], "munimplemented-simd128">, Group<m_wasm_Features_Group>;
2168def mno_unimplemented_simd128 : Flag<["-"], "mno-unimplemented-simd128">, Group<m_wasm_Features_Group>;
2169def mno_simd128 : Flag<["-"], "mno-simd128">, Group<m_wasm_Features_Group>;
2170def mnontrapping_fptoint : Flag<["-"], "mnontrapping-fptoint">, Group<m_wasm_Features_Group>;
2171def mno_nontrapping_fptoint : Flag<["-"], "mno-nontrapping-fptoint">, Group<m_wasm_Features_Group>;
2172def msign_ext : Flag<["-"], "msign-ext">, Group<m_wasm_Features_Group>;
2173def mno_sign_ext : Flag<["-"], "mno-sign-ext">, Group<m_wasm_Features_Group>;
2174def mexception_handing : Flag<["-"], "mexception-handling">, Group<m_wasm_Features_Group>;
2175def mno_exception_handing : Flag<["-"], "mno-exception-handling">, Group<m_wasm_Features_Group>;
2176def matomics : Flag<["-"], "matomics">, Group<m_wasm_Features_Group>;
2177def mno_atomics : Flag<["-"], "mno-atomics">, Group<m_wasm_Features_Group>;
2178def mbulk_memory : Flag<["-"], "mbulk-memory">, Group<m_wasm_Features_Group>;
2179def mno_bulk_memory : Flag<["-"], "mno-bulk-memory">, Group<m_wasm_Features_Group>;
2180
2181def mamdgpu_debugger_abi : Joined<["-"], "mamdgpu-debugger-abi=">,
2182  Flags<[HelpHidden]>,
2183  Group<m_Group>,
2184  HelpText<"Generate additional code for specified <version> of debugger ABI (AMDGPU only)">,
2185  MetaVarName<"<version>">;
2186
2187def mcode_object_v3 : Flag<["-"], "mcode-object-v3">, Group<m_amdgpu_Features_Group>,
2188  HelpText<"Enable code object v3 (AMDGPU only)">;
2189def mno_code_object_v3 : Flag<["-"], "mno-code-object-v3">, Group<m_amdgpu_Features_Group>,
2190  HelpText<"Disable code object v3 (AMDGPU only)">;
2191def mxnack : Flag<["-"], "mxnack">, Group<m_amdgpu_Features_Group>,
2192  HelpText<"Enable XNACK (AMDGPU only)">;
2193def mno_xnack : Flag<["-"], "mno-xnack">, Group<m_amdgpu_Features_Group>,
2194  HelpText<"Disable XNACK (AMDGPU only)">;
2195def msram_ecc : Flag<["-"], "msram-ecc">, Group<m_amdgpu_Features_Group>,
2196  HelpText<"Enable SRAM ECC (AMDGPU only)">;
2197def mno_sram_ecc : Flag<["-"], "mno-sram-ecc">, Group<m_amdgpu_Features_Group>,
2198  HelpText<"Disable SRAM ECC (AMDGPU only)">;
2199
2200def faltivec : Flag<["-"], "faltivec">, Group<f_Group>, Flags<[DriverOption]>;
2201def fno_altivec : Flag<["-"], "fno-altivec">, Group<f_Group>, Flags<[DriverOption]>;
2202def maltivec : Flag<["-"], "maltivec">, Group<m_ppc_Features_Group>;
2203def mno_altivec : Flag<["-"], "mno-altivec">, Group<m_ppc_Features_Group>;
2204def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>;
2205def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>;
2206def msecure_plt : Flag<["-"], "msecure-plt">, Group<m_ppc_Features_Group>;
2207def mpower8_vector : Flag<["-"], "mpower8-vector">,
2208    Group<m_ppc_Features_Group>;
2209def mno_power8_vector : Flag<["-"], "mno-power8-vector">,
2210    Group<m_ppc_Features_Group>;
2211def mpower9_vector : Flag<["-"], "mpower9-vector">,
2212    Group<m_ppc_Features_Group>;
2213def mno_power9_vector : Flag<["-"], "mno-power9-vector">,
2214    Group<m_ppc_Features_Group>;
2215def mpower8_crypto : Flag<["-"], "mcrypto">,
2216    Group<m_ppc_Features_Group>;
2217def mnopower8_crypto : Flag<["-"], "mno-crypto">,
2218    Group<m_ppc_Features_Group>;
2219def mdirect_move : Flag<["-"], "mdirect-move">,
2220    Group<m_ppc_Features_Group>;
2221def mnodirect_move : Flag<["-"], "mno-direct-move">,
2222    Group<m_ppc_Features_Group>;
2223def mhtm : Flag<["-"], "mhtm">, Group<m_ppc_Features_Group>;
2224def mno_htm : Flag<["-"], "mno-htm">, Group<m_ppc_Features_Group>;
2225def mfprnd : Flag<["-"], "mfprnd">, Group<m_ppc_Features_Group>;
2226def mno_fprnd : Flag<["-"], "mno-fprnd">, Group<m_ppc_Features_Group>;
2227def mcmpb : Flag<["-"], "mcmpb">, Group<m_ppc_Features_Group>;
2228def mno_cmpb : Flag<["-"], "mno-cmpb">, Group<m_ppc_Features_Group>;
2229def misel : Flag<["-"], "misel">, Group<m_ppc_Features_Group>;
2230def mno_isel : Flag<["-"], "mno-isel">, Group<m_ppc_Features_Group>;
2231def mmfocrf : Flag<["-"], "mmfocrf">, Group<m_ppc_Features_Group>;
2232def mmfcrf : Flag<["-"], "mmfcrf">, Alias<mmfocrf>;
2233def mno_mfocrf : Flag<["-"], "mno-mfocrf">, Group<m_ppc_Features_Group>;
2234def mno_mfcrf : Flag<["-"], "mno-mfcrf">, Alias<mno_mfocrf>;
2235def mpopcntd : Flag<["-"], "mpopcntd">, Group<m_ppc_Features_Group>;
2236def mno_popcntd : Flag<["-"], "mno-popcntd">, Group<m_ppc_Features_Group>;
2237def mqpx : Flag<["-"], "mqpx">, Group<m_ppc_Features_Group>;
2238def mno_qpx : Flag<["-"], "mno-qpx">, Group<m_ppc_Features_Group>;
2239def mcrbits : Flag<["-"], "mcrbits">, Group<m_ppc_Features_Group>;
2240def mno_crbits : Flag<["-"], "mno-crbits">, Group<m_ppc_Features_Group>;
2241def minvariant_function_descriptors :
2242  Flag<["-"], "minvariant-function-descriptors">, Group<m_ppc_Features_Group>;
2243def mno_invariant_function_descriptors :
2244  Flag<["-"], "mno-invariant-function-descriptors">,
2245  Group<m_ppc_Features_Group>;
2246def mfloat128: Flag<["-"], "mfloat128">,
2247    Group<m_ppc_Features_Group>;
2248def mno_float128 : Flag<["-"], "mno-float128">,
2249    Group<m_ppc_Features_Group>;
2250def mlongcall: Flag<["-"], "mlongcall">,
2251    Group<m_ppc_Features_Group>;
2252def mno_longcall : Flag<["-"], "mno-longcall">,
2253    Group<m_ppc_Features_Group>;
2254
2255def mvx : Flag<["-"], "mvx">, Group<m_Group>;
2256def mno_vx : Flag<["-"], "mno-vx">, Group<m_Group>;
2257
2258def fzvector : Flag<["-"], "fzvector">, Group<f_Group>, Flags<[CC1Option]>,
2259  HelpText<"Enable System z vector language extension">;
2260def fno_zvector : Flag<["-"], "fno-zvector">, Group<f_Group>,
2261  Flags<[CC1Option]>;
2262def mzvector : Flag<["-"], "mzvector">, Alias<fzvector>;
2263def mno_zvector : Flag<["-"], "mno-zvector">, Alias<fno_zvector>;
2264
2265def mbackchain : Flag<["-"], "mbackchain">, Group<m_Group>, Flags<[DriverOption,CC1Option]>,
2266  HelpText<"Link stack frames through backchain on System Z">;
2267def mno_backchain : Flag<["-"], "mno-backchain">, Group<m_Group>, Flags<[DriverOption,CC1Option]>;
2268
2269def mno_warn_nonportable_cfstrings : Flag<["-"], "mno-warn-nonportable-cfstrings">, Group<m_Group>;
2270def mno_omit_leaf_frame_pointer : Flag<["-"], "mno-omit-leaf-frame-pointer">, Group<m_Group>;
2271def momit_leaf_frame_pointer : Flag<["-"], "momit-leaf-frame-pointer">, Group<m_Group>,
2272  HelpText<"Omit frame pointer setup for leaf functions">, Flags<[CC1Option]>;
2273def moslib_EQ : Joined<["-"], "moslib=">, Group<m_Group>;
2274def mpascal_strings : Flag<["-"], "mpascal-strings">, Alias<fpascal_strings>;
2275def mred_zone : Flag<["-"], "mred-zone">, Group<m_Group>;
2276def mtls_direct_seg_refs : Flag<["-"], "mtls-direct-seg-refs">, Group<m_Group>,
2277  HelpText<"Enable direct TLS access through segment registers (default)">;
2278def mregparm_EQ : Joined<["-"], "mregparm=">, Group<m_Group>;
2279def mrelax_all : Flag<["-"], "mrelax-all">, Group<m_Group>, Flags<[CC1Option,CC1AsOption]>,
2280  HelpText<"(integrated-as) Relax all machine instructions">;
2281def mincremental_linker_compatible : Flag<["-"], "mincremental-linker-compatible">, Group<m_Group>,
2282  Flags<[CC1Option,CC1AsOption]>,
2283  HelpText<"(integrated-as) Emit an object file which can be used with an incremental linker">;
2284def mno_incremental_linker_compatible : Flag<["-"], "mno-incremental-linker-compatible">, Group<m_Group>,
2285  HelpText<"(integrated-as) Emit an object file which cannot be used with an incremental linker">;
2286def mrtd : Flag<["-"], "mrtd">, Group<m_Group>, Flags<[CC1Option]>,
2287  HelpText<"Make StdCall calling convention the default">;
2288def msmall_data_threshold_EQ : Joined <["-"], "msmall-data-threshold=">,
2289  Group<m_Group>, Alias<G>;
2290def msoft_float : Flag<["-"], "msoft-float">, Group<m_Group>, Flags<[CC1Option]>,
2291  HelpText<"Use software floating point">;
2292def mno_implicit_float : Flag<["-"], "mno-implicit-float">, Group<m_Group>,
2293  HelpText<"Don't generate implicit floating point instructions">;
2294def mimplicit_float : Flag<["-"], "mimplicit-float">, Group<m_Group>;
2295def mrecip : Flag<["-"], "mrecip">, Group<m_Group>;
2296def mrecip_EQ : CommaJoined<["-"], "mrecip=">, Group<m_Group>, Flags<[CC1Option]>;
2297def mprefer_vector_width_EQ : Joined<["-"], "mprefer-vector-width=">, Group<m_Group>, Flags<[CC1Option]>,
2298  HelpText<"Specifies preferred vector width for auto-vectorization. Defaults to 'none' which allows target specific decisions.">;
2299def mpie_copy_relocations : Flag<["-"], "mpie-copy-relocations">, Group<m_Group>,
2300  Flags<[CC1Option]>,
2301  HelpText<"Use copy relocations support for PIE builds">;
2302def mno_pie_copy_relocations : Flag<["-"], "mno-pie-copy-relocations">, Group<m_Group>;
2303def mfentry : Flag<["-"], "mfentry">, HelpText<"Insert calls to fentry at function entry (x86 only)">,
2304  Flags<[CC1Option]>, Group<m_Group>;
2305def mips16 : Flag<["-"], "mips16">, Group<m_mips_Features_Group>;
2306def mno_mips16 : Flag<["-"], "mno-mips16">, Group<m_mips_Features_Group>;
2307def mmicromips : Flag<["-"], "mmicromips">, Group<m_mips_Features_Group>;
2308def mno_micromips : Flag<["-"], "mno-micromips">, Group<m_mips_Features_Group>;
2309def mxgot : Flag<["-"], "mxgot">, Group<m_mips_Features_Group>;
2310def mno_xgot : Flag<["-"], "mno-xgot">, Group<m_mips_Features_Group>;
2311def mldc1_sdc1 : Flag<["-"], "mldc1-sdc1">, Group<m_mips_Features_Group>;
2312def mno_ldc1_sdc1 : Flag<["-"], "mno-ldc1-sdc1">, Group<m_mips_Features_Group>;
2313def mcheck_zero_division : Flag<["-"], "mcheck-zero-division">,
2314                           Group<m_mips_Features_Group>;
2315def mno_check_zero_division : Flag<["-"], "mno-check-zero-division">,
2316                              Group<m_mips_Features_Group>;
2317def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">,
2318                           Group<m_mips_Features_Group>;
2319def mbranch_likely : Flag<["-"], "mbranch-likely">, Group<m_Group>,
2320  IgnoredGCCCompat;
2321def mno_branch_likely : Flag<["-"], "mno-branch-likely">, Group<m_Group>,
2322  IgnoredGCCCompat;
2323def mindirect_jump_EQ : Joined<["-"], "mindirect-jump=">,
2324  Group<m_mips_Features_Group>,
2325  HelpText<"Change indirect jump instructions to inhibit speculation">;
2326def mdsp : Flag<["-"], "mdsp">, Group<m_mips_Features_Group>;
2327def mno_dsp : Flag<["-"], "mno-dsp">, Group<m_mips_Features_Group>;
2328def mdspr2 : Flag<["-"], "mdspr2">, Group<m_mips_Features_Group>;
2329def mno_dspr2 : Flag<["-"], "mno-dspr2">, Group<m_mips_Features_Group>;
2330def msingle_float : Flag<["-"], "msingle-float">, Group<m_mips_Features_Group>;
2331def mdouble_float : Flag<["-"], "mdouble-float">, Group<m_mips_Features_Group>;
2332def mmadd4 : Flag<["-"], "mmadd4">, Group<m_mips_Features_Group>,
2333  HelpText<"Enable the generation of 4-operand madd.s, madd.d and related instructions.">;
2334def mno_madd4 : Flag<["-"], "mno-madd4">, Group<m_mips_Features_Group>,
2335  HelpText<"Disable the generation of 4-operand madd.s, madd.d and related instructions.">;
2336def mmsa : Flag<["-"], "mmsa">, Group<m_mips_Features_Group>,
2337  HelpText<"Enable MSA ASE (MIPS only)">;
2338def mno_msa : Flag<["-"], "mno-msa">, Group<m_mips_Features_Group>,
2339  HelpText<"Disable MSA ASE (MIPS only)">;
2340def mmt : Flag<["-"], "mmt">, Group<m_mips_Features_Group>,
2341  HelpText<"Enable MT ASE (MIPS only)">;
2342def mno_mt : Flag<["-"], "mno-mt">, Group<m_mips_Features_Group>,
2343  HelpText<"Disable MT ASE (MIPS only)">;
2344def mfp64 : Flag<["-"], "mfp64">, Group<m_mips_Features_Group>,
2345  HelpText<"Use 64-bit floating point registers (MIPS only)">;
2346def mfp32 : Flag<["-"], "mfp32">, Group<m_mips_Features_Group>,
2347  HelpText<"Use 32-bit floating point registers (MIPS only)">;
2348def mgpopt : Flag<["-"], "mgpopt">, Group<m_mips_Features_Group>,
2349  HelpText<"Use GP relative accesses for symbols known to be in a small"
2350           " data section (MIPS)">;
2351def mno_gpopt : Flag<["-"], "mno-gpopt">, Group<m_mips_Features_Group>,
2352  HelpText<"Do not use GP relative accesses for symbols known to be in a small"
2353           " data section (MIPS)">;
2354def mlocal_sdata : Flag<["-"], "mlocal-sdata">,
2355  Group<m_mips_Features_Group>,
2356  HelpText<"Extend the -G behaviour to object local data (MIPS)">;
2357def mno_local_sdata : Flag<["-"], "mno-local-sdata">,
2358  Group<m_mips_Features_Group>,
2359  HelpText<"Do not extend the -G behaviour to object local data (MIPS)">;
2360def mextern_sdata : Flag<["-"], "mextern-sdata">,
2361  Group<m_mips_Features_Group>,
2362  HelpText<"Assume that externally defined data is in the small data if it"
2363           " meets the -G <size> threshold (MIPS)">;
2364def mno_extern_sdata : Flag<["-"], "mno-extern-sdata">,
2365  Group<m_mips_Features_Group>,
2366  HelpText<"Do not assume that externally defined data is in the small data if"
2367           " it meets the -G <size> threshold (MIPS)">;
2368def membedded_data : Flag<["-"], "membedded-data">,
2369  Group<m_mips_Features_Group>,
2370  HelpText<"Place constants in the .rodata section instead of the .sdata "
2371           "section even if they meet the -G <size> threshold (MIPS)">;
2372def mno_embedded_data : Flag<["-"], "mno-embedded-data">,
2373  Group<m_mips_Features_Group>,
2374  HelpText<"Do not place constants in the .rodata section instead of the "
2375           ".sdata if they meet the -G <size> threshold (MIPS)">;
2376def mnan_EQ : Joined<["-"], "mnan=">, Group<m_mips_Features_Group>;
2377def mabs_EQ : Joined<["-"], "mabs=">, Group<m_mips_Features_Group>;
2378def mabicalls : Flag<["-"], "mabicalls">, Group<m_mips_Features_Group>,
2379  HelpText<"Enable SVR4-style position-independent code (Mips only)">;
2380def mno_abicalls : Flag<["-"], "mno-abicalls">, Group<m_mips_Features_Group>,
2381  HelpText<"Disable SVR4-style position-independent code (Mips only)">;
2382def mno_crc : Flag<["-"], "mno-crc">, Group<m_mips_Features_Group>,
2383  HelpText<"Disallow use of CRC instructions (Mips only)">;
2384def mvirt : Flag<["-"], "mvirt">, Group<m_mips_Features_Group>;
2385def mno_virt : Flag<["-"], "mno-virt">, Group<m_mips_Features_Group>;
2386def mginv : Flag<["-"], "mginv">, Group<m_mips_Features_Group>;
2387def mno_ginv : Flag<["-"], "mno-ginv">, Group<m_mips_Features_Group>;
2388def mips1 : Flag<["-"], "mips1">,
2389  Alias<march_EQ>, AliasArgs<["mips1"]>, Group<m_mips_Features_Group>,
2390  HelpText<"Equivalent to -march=mips1">, Flags<[HelpHidden]>;
2391def mips2 : Flag<["-"], "mips2">,
2392  Alias<march_EQ>, AliasArgs<["mips2"]>, Group<m_mips_Features_Group>,
2393  HelpText<"Equivalent to -march=mips2">, Flags<[HelpHidden]>;
2394def mips3 : Flag<["-"], "mips3">,
2395  Alias<march_EQ>, AliasArgs<["mips3"]>, Group<m_mips_Features_Group>,
2396  HelpText<"Equivalent to -march=mips3">, Flags<[HelpHidden]>;
2397def mips4 : Flag<["-"], "mips4">,
2398  Alias<march_EQ>, AliasArgs<["mips4"]>, Group<m_mips_Features_Group>,
2399  HelpText<"Equivalent to -march=mips4">, Flags<[HelpHidden]>;
2400def mips5 : Flag<["-"], "mips5">,
2401  Alias<march_EQ>, AliasArgs<["mips5"]>, Group<m_mips_Features_Group>,
2402  HelpText<"Equivalent to -march=mips5">, Flags<[HelpHidden]>;
2403def mips32 : Flag<["-"], "mips32">,
2404  Alias<march_EQ>, AliasArgs<["mips32"]>, Group<m_mips_Features_Group>,
2405  HelpText<"Equivalent to -march=mips32">, Flags<[HelpHidden]>;
2406def mips32r2 : Flag<["-"], "mips32r2">,
2407  Alias<march_EQ>, AliasArgs<["mips32r2"]>, Group<m_mips_Features_Group>,
2408  HelpText<"Equivalent to -march=mips32r2">, Flags<[HelpHidden]>;
2409def mips32r3 : Flag<["-"], "mips32r3">,
2410  Alias<march_EQ>, AliasArgs<["mips32r3"]>, Group<m_mips_Features_Group>,
2411  HelpText<"Equivalent to -march=mips32r3">, Flags<[HelpHidden]>;
2412def mips32r5 : Flag<["-"], "mips32r5">,
2413  Alias<march_EQ>, AliasArgs<["mips32r5"]>, Group<m_mips_Features_Group>,
2414  HelpText<"Equivalent to -march=mips32r5">, Flags<[HelpHidden]>;
2415def mips32r6 : Flag<["-"], "mips32r6">,
2416  Alias<march_EQ>, AliasArgs<["mips32r6"]>, Group<m_mips_Features_Group>,
2417  HelpText<"Equivalent to -march=mips32r6">, Flags<[HelpHidden]>;
2418def mips64 : Flag<["-"], "mips64">,
2419  Alias<march_EQ>, AliasArgs<["mips64"]>, Group<m_mips_Features_Group>,
2420  HelpText<"Equivalent to -march=mips64">, Flags<[HelpHidden]>;
2421def mips64r2 : Flag<["-"], "mips64r2">,
2422  Alias<march_EQ>, AliasArgs<["mips64r2"]>, Group<m_mips_Features_Group>,
2423  HelpText<"Equivalent to -march=mips64r2">, Flags<[HelpHidden]>;
2424def mips64r3 : Flag<["-"], "mips64r3">,
2425  Alias<march_EQ>, AliasArgs<["mips64r3"]>, Group<m_mips_Features_Group>,
2426  HelpText<"Equivalent to -march=mips64r3">, Flags<[HelpHidden]>;
2427def mips64r5 : Flag<["-"], "mips64r5">,
2428  Alias<march_EQ>, AliasArgs<["mips64r5"]>, Group<m_mips_Features_Group>,
2429  HelpText<"Equivalent to -march=mips64r5">, Flags<[HelpHidden]>;
2430def mips64r6 : Flag<["-"], "mips64r6">,
2431  Alias<march_EQ>, AliasArgs<["mips64r6"]>, Group<m_mips_Features_Group>,
2432  HelpText<"Equivalent to -march=mips64r6">, Flags<[HelpHidden]>;
2433def mfpxx : Flag<["-"], "mfpxx">, Group<m_mips_Features_Group>,
2434  HelpText<"Avoid FPU mode dependent operations when used with the O32 ABI">,
2435  Flags<[HelpHidden]>;
2436def modd_spreg : Flag<["-"], "modd-spreg">, Group<m_mips_Features_Group>,
2437  HelpText<"Enable odd single-precision floating point registers">,
2438  Flags<[HelpHidden]>;
2439def mno_odd_spreg : Flag<["-"], "mno-odd-spreg">, Group<m_mips_Features_Group>,
2440  HelpText<"Disable odd single-precision floating point registers">,
2441  Flags<[HelpHidden]>;
2442def mrelax_pic_calls : Flag<["-"], "mrelax-pic-calls">,
2443  Group<m_mips_Features_Group>,
2444  HelpText<"Produce relaxation hints for linkers to try optimizing PIC "
2445           "call sequences into direct calls (MIPS only)">, Flags<[HelpHidden]>;
2446def mno_relax_pic_calls : Flag<["-"], "mno-relax-pic-calls">,
2447  Group<m_mips_Features_Group>,
2448  HelpText<"Do not produce relaxation hints for linkers to try optimizing PIC "
2449           "call sequences into direct calls (MIPS only)">, Flags<[HelpHidden]>;
2450def mglibc : Flag<["-"], "mglibc">, Group<m_libc_Group>, Flags<[HelpHidden]>;
2451def muclibc : Flag<["-"], "muclibc">, Group<m_libc_Group>, Flags<[HelpHidden]>;
2452def module_file_info : Flag<["-"], "module-file-info">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>,
2453  HelpText<"Provide information about a particular module file">;
2454def mthumb : Flag<["-"], "mthumb">, Group<m_Group>;
2455def mtune_EQ : Joined<["-"], "mtune=">, Group<m_Group>;
2456def multi__module : Flag<["-"], "multi_module">;
2457def multiply__defined__unused : Separate<["-"], "multiply_defined_unused">;
2458def multiply__defined : Separate<["-"], "multiply_defined">;
2459def mwarn_nonportable_cfstrings : Flag<["-"], "mwarn-nonportable-cfstrings">, Group<m_Group>;
2460def no_canonical_prefixes : Flag<["-"], "no-canonical-prefixes">, Flags<[HelpHidden, CoreOption]>,
2461  HelpText<"Use relative instead of canonical paths">;
2462def no_cpp_precomp : Flag<["-"], "no-cpp-precomp">, Group<clang_ignored_f_Group>;
2463def no_integrated_cpp : Flag<["-", "--"], "no-integrated-cpp">, Flags<[DriverOption]>;
2464def no_pedantic : Flag<["-", "--"], "no-pedantic">, Group<pedantic_Group>;
2465def no__dead__strip__inits__and__terms : Flag<["-"], "no_dead_strip_inits_and_terms">;
2466def nobuiltininc : Flag<["-"], "nobuiltininc">, Flags<[CC1Option, CoreOption]>,
2467  HelpText<"Disable builtin #include directories">;
2468def nocudainc : Flag<["-"], "nocudainc">;
2469def nocudalib : Flag<["-"], "nocudalib">;
2470def nodefaultlibs : Flag<["-"], "nodefaultlibs">;
2471def nofixprebinding : Flag<["-"], "nofixprebinding">;
2472def nolibc : Flag<["-"], "nolibc">;
2473def nomultidefs : Flag<["-"], "nomultidefs">;
2474def nopie : Flag<["-"], "nopie">;
2475def no_pie : Flag<["-"], "no-pie">, Alias<nopie>;
2476def noprebind : Flag<["-"], "noprebind">;
2477def noseglinkedit : Flag<["-"], "noseglinkedit">;
2478def nostartfiles : Flag<["-"], "nostartfiles">;
2479def nostdinc : Flag<["-"], "nostdinc">, Flags<[CoreOption]>;
2480def nostdlibinc : Flag<["-"], "nostdlibinc">;
2481def nostdincxx : Flag<["-"], "nostdinc++">, Flags<[CC1Option]>,
2482  HelpText<"Disable standard #include directories for the C++ standard library">;
2483def nostdlib : Flag<["-"], "nostdlib">;
2484def nostdlibxx : Flag<["-"], "nostdlib++">;
2485def object : Flag<["-"], "object">;
2486def o : JoinedOrSeparate<["-"], "o">, Flags<[DriverOption, RenderAsInput, CC1Option, CC1AsOption]>,
2487  HelpText<"Write output to <file>">, MetaVarName<"<file>">;
2488def pagezero__size : JoinedOrSeparate<["-"], "pagezero_size">;
2489def pass_exit_codes : Flag<["-", "--"], "pass-exit-codes">, Flags<[Unsupported]>;
2490def pedantic_errors : Flag<["-", "--"], "pedantic-errors">, Group<pedantic_Group>, Flags<[CC1Option]>;
2491def pedantic : Flag<["-", "--"], "pedantic">, Group<pedantic_Group>, Flags<[CC1Option]>;
2492def pg : Flag<["-"], "pg">, HelpText<"Enable mcount instrumentation">, Flags<[CC1Option]>;
2493def pipe : Flag<["-", "--"], "pipe">,
2494  HelpText<"Use pipes between commands, when possible">;
2495def prebind__all__twolevel__modules : Flag<["-"], "prebind_all_twolevel_modules">;
2496def prebind : Flag<["-"], "prebind">;
2497def preload : Flag<["-"], "preload">;
2498def print_file_name_EQ : Joined<["-", "--"], "print-file-name=">,
2499  HelpText<"Print the full library path of <file>">, MetaVarName<"<file>">;
2500def print_ivar_layout : Flag<["-"], "print-ivar-layout">, Flags<[CC1Option]>,
2501  HelpText<"Enable Objective-C Ivar layout bitmap print trace">;
2502def print_libgcc_file_name : Flag<["-", "--"], "print-libgcc-file-name">,
2503  HelpText<"Print the library path for the currently used compiler runtime "
2504           "library (\"libgcc.a\" or \"libclang_rt.builtins.*.a\")">;
2505def print_multi_directory : Flag<["-", "--"], "print-multi-directory">;
2506def print_multi_lib : Flag<["-", "--"], "print-multi-lib">;
2507def print_multi_os_directory : Flag<["-", "--"], "print-multi-os-directory">,
2508  Flags<[Unsupported]>;
2509def print_target_triple : Flag<["-", "--"], "print-target-triple">,
2510  HelpText<"Print the normalized target triple">;
2511def print_effective_triple : Flag<["-", "--"], "print-effective-triple">,
2512  HelpText<"Print the effective target triple">;
2513def print_prog_name_EQ : Joined<["-", "--"], "print-prog-name=">,
2514  HelpText<"Print the full program path of <name>">, MetaVarName<"<name>">;
2515def print_resource_dir : Flag<["-", "--"], "print-resource-dir">,
2516  HelpText<"Print the resource directory pathname">;
2517def print_search_dirs : Flag<["-", "--"], "print-search-dirs">,
2518  HelpText<"Print the paths used for finding libraries and programs">;
2519def private__bundle : Flag<["-"], "private_bundle">;
2520def pthreads : Flag<["-"], "pthreads">;
2521def pthread : Flag<["-"], "pthread">, Flags<[CC1Option]>,
2522  HelpText<"Support POSIX threads in generated code">;
2523def no_pthread : Flag<["-"], "no-pthread">, Flags<[CC1Option]>;
2524def p : Flag<["-"], "p">;
2525def pie : Flag<["-"], "pie">;
2526def static_pie : Flag<["-"], "static-pie">;
2527def read__only__relocs : Separate<["-"], "read_only_relocs">;
2528def remap : Flag<["-"], "remap">;
2529def rewrite_objc : Flag<["-"], "rewrite-objc">, Flags<[DriverOption,CC1Option]>,
2530  HelpText<"Rewrite Objective-C source to C++">, Group<Action_Group>;
2531def rewrite_legacy_objc : Flag<["-"], "rewrite-legacy-objc">, Flags<[DriverOption]>,
2532  HelpText<"Rewrite Legacy Objective-C source to C++">;
2533def rdynamic : Flag<["-"], "rdynamic">;
2534def resource_dir : Separate<["-"], "resource-dir">,
2535  Flags<[DriverOption, CC1Option, CoreOption, HelpHidden]>,
2536  HelpText<"The directory which holds the compiler resource files">;
2537def resource_dir_EQ : Joined<["-"], "resource-dir=">, Flags<[DriverOption, CoreOption]>,
2538  Alias<resource_dir>;
2539def rpath : Separate<["-"], "rpath">, Flags<[LinkerInput]>, Group<Link_Group>;
2540def rtlib_EQ : Joined<["-", "--"], "rtlib=">,
2541  HelpText<"Compiler runtime library to use">;
2542def frtlib_add_rpath: Flag<["-"], "frtlib-add-rpath">, Flags<[NoArgumentUnused]>,
2543  HelpText<"Add -rpath with architecture-specific resource directory to the linker flags">;
2544def fno_rtlib_add_rpath: Flag<["-"], "fno-rtlib-add-rpath">, Flags<[NoArgumentUnused]>,
2545  HelpText<"Do not add -rpath with architecture-specific resource directory to the linker flags">;
2546def r : Flag<["-"], "r">, Flags<[LinkerInput,NoArgumentUnused]>,
2547        Group<Link_Group>;
2548def save_temps_EQ : Joined<["-", "--"], "save-temps=">, Flags<[CC1Option, DriverOption]>,
2549  HelpText<"Save intermediate compilation results.">;
2550def save_temps : Flag<["-", "--"], "save-temps">, Flags<[DriverOption]>,
2551  Alias<save_temps_EQ>, AliasArgs<["cwd"]>,
2552  HelpText<"Save intermediate compilation results">;
2553def save_stats_EQ : Joined<["-", "--"], "save-stats=">, Flags<[DriverOption]>,
2554  HelpText<"Save llvm statistics.">;
2555def save_stats : Flag<["-", "--"], "save-stats">, Flags<[DriverOption]>,
2556  Alias<save_stats_EQ>, AliasArgs<["cwd"]>,
2557  HelpText<"Save llvm statistics.">;
2558def via_file_asm : Flag<["-", "--"], "via-file-asm">, InternalDebugOpt,
2559  HelpText<"Write assembly to file for input to assemble jobs">;
2560def sectalign : MultiArg<["-"], "sectalign", 3>;
2561def sectcreate : MultiArg<["-"], "sectcreate", 3>;
2562def sectobjectsymbols : MultiArg<["-"], "sectobjectsymbols", 2>;
2563def sectorder : MultiArg<["-"], "sectorder", 3>;
2564def seg1addr : JoinedOrSeparate<["-"], "seg1addr">;
2565def seg__addr__table__filename : Separate<["-"], "seg_addr_table_filename">;
2566def seg__addr__table : Separate<["-"], "seg_addr_table">;
2567def segaddr : MultiArg<["-"], "segaddr", 2>;
2568def segcreate : MultiArg<["-"], "segcreate", 3>;
2569def seglinkedit : Flag<["-"], "seglinkedit">;
2570def segprot : MultiArg<["-"], "segprot", 3>;
2571def segs__read__only__addr : Separate<["-"], "segs_read_only_addr">;
2572def segs__read__write__addr : Separate<["-"], "segs_read_write_addr">;
2573def segs__read__ : Joined<["-"], "segs_read_">;
2574def shared_libgcc : Flag<["-"], "shared-libgcc">;
2575def shared : Flag<["-", "--"], "shared">;
2576def single__module : Flag<["-"], "single_module">;
2577def specs_EQ : Joined<["-", "--"], "specs=">;
2578def specs : Separate<["-", "--"], "specs">, Flags<[Unsupported]>;
2579def static_libgcc : Flag<["-"], "static-libgcc">;
2580def static_libstdcxx : Flag<["-"], "static-libstdc++">;
2581def static : Flag<["-", "--"], "static">, Flags<[NoArgumentUnused]>;
2582def std_default_EQ : Joined<["-"], "std-default=">;
2583def std_EQ : Joined<["-", "--"], "std=">, Flags<[CC1Option]>,
2584  Group<CompileOnly_Group>, HelpText<"Language standard to compile for">,
2585  ValuesCode<[{
2586    const char *Values =
2587    #define LANGSTANDARD(id, name, lang, desc, features) name ","
2588    #define LANGSTANDARD_ALIAS(id, alias) alias ","
2589    #include "clang/Frontend/LangStandards.def"
2590    ;
2591  }]>;
2592def stdlib_EQ : Joined<["-", "--"], "stdlib=">, Flags<[CC1Option]>,
2593  HelpText<"C++ standard library to use">, Values<"libc++,libstdc++,platform">;
2594def unwindlib_EQ : Joined<["-", "--"], "unwindlib=">, Flags<[CC1Option]>,
2595  HelpText<"Unwind library to use">, Values<"libgcc,unwindlib,platform">;
2596def sub__library : JoinedOrSeparate<["-"], "sub_library">;
2597def sub__umbrella : JoinedOrSeparate<["-"], "sub_umbrella">;
2598def system_header_prefix : Joined<["--"], "system-header-prefix=">,
2599  Group<clang_i_Group>, Flags<[CC1Option]>, MetaVarName<"<prefix>">,
2600  HelpText<"Treat all #include paths starting with <prefix> as including a "
2601           "system header.">;
2602def : Separate<["--"], "system-header-prefix">, Alias<system_header_prefix>;
2603def no_system_header_prefix : Joined<["--"], "no-system-header-prefix=">,
2604  Group<clang_i_Group>, Flags<[CC1Option]>, MetaVarName<"<prefix>">,
2605  HelpText<"Treat all #include paths starting with <prefix> as not including a "
2606           "system header.">;
2607def : Separate<["--"], "no-system-header-prefix">, Alias<no_system_header_prefix>;
2608def s : Flag<["-"], "s">, Group<Link_Group>;
2609def target : Joined<["--"], "target=">, Flags<[DriverOption, CoreOption]>,
2610  HelpText<"Generate code for the given target">;
2611def gcc_toolchain : Joined<["--"], "gcc-toolchain=">, Flags<[DriverOption]>,
2612  HelpText<"Use the gcc toolchain at the given directory">;
2613def time : Flag<["-"], "time">,
2614  HelpText<"Time individual commands">;
2615def traditional_cpp : Flag<["-", "--"], "traditional-cpp">, Flags<[CC1Option]>,
2616  HelpText<"Enable some traditional CPP emulation">;
2617def traditional : Flag<["-", "--"], "traditional">;
2618def trigraphs : Flag<["-", "--"], "trigraphs">, Alias<ftrigraphs>,
2619  HelpText<"Process trigraph sequences">;
2620def twolevel__namespace__hints : Flag<["-"], "twolevel_namespace_hints">;
2621def twolevel__namespace : Flag<["-"], "twolevel_namespace">;
2622def t : Flag<["-"], "t">, Group<Link_Group>;
2623def umbrella : Separate<["-"], "umbrella">;
2624def undefined : JoinedOrSeparate<["-"], "undefined">, Group<u_Group>;
2625def undef : Flag<["-"], "undef">, Group<u_Group>, Flags<[CC1Option]>,
2626  HelpText<"undef all system defines">;
2627def unexported__symbols__list : Separate<["-"], "unexported_symbols_list">;
2628def u : JoinedOrSeparate<["-"], "u">, Group<u_Group>;
2629def v : Flag<["-"], "v">, Flags<[CC1Option, CoreOption]>,
2630  HelpText<"Show commands to run and use verbose output">;
2631def verify_debug_info : Flag<["--"], "verify-debug-info">, Flags<[DriverOption]>,
2632  HelpText<"Verify the binary representation of debug output">;
2633def weak_l : Joined<["-"], "weak-l">, Flags<[LinkerInput]>;
2634def weak__framework : Separate<["-"], "weak_framework">, Flags<[LinkerInput]>;
2635def weak__library : Separate<["-"], "weak_library">, Flags<[LinkerInput]>;
2636def weak__reference__mismatches : Separate<["-"], "weak_reference_mismatches">;
2637def whatsloaded : Flag<["-"], "whatsloaded">;
2638def whyload : Flag<["-"], "whyload">;
2639def w : Flag<["-"], "w">, HelpText<"Suppress all warnings">, Flags<[CC1Option]>;
2640def x : JoinedOrSeparate<["-"], "x">, Flags<[DriverOption,CC1Option]>,
2641  HelpText<"Treat subsequent input files as having type <language>">,
2642  MetaVarName<"<language>">;
2643def y : Joined<["-"], "y">;
2644
2645def fintegrated_as : Flag<["-"], "fintegrated-as">, Flags<[DriverOption]>,
2646                     Group<f_Group>, HelpText<"Enable the integrated assembler">;
2647def fno_integrated_as : Flag<["-"], "fno-integrated-as">,
2648                        Flags<[CC1Option, DriverOption]>, Group<f_Group>,
2649                        HelpText<"Disable the integrated assembler">;
2650def : Flag<["-"], "integrated-as">, Alias<fintegrated_as>, Flags<[DriverOption]>;
2651def : Flag<["-"], "no-integrated-as">, Alias<fno_integrated_as>,
2652      Flags<[CC1Option, DriverOption]>;
2653
2654def working_directory : JoinedOrSeparate<["-"], "working-directory">, Flags<[CC1Option]>,
2655  HelpText<"Resolve file paths relative to the specified directory">;
2656def working_directory_EQ : Joined<["-"], "working-directory=">, Flags<[CC1Option]>,
2657  Alias<working_directory>;
2658
2659// Double dash options, which are usually an alias for one of the previous
2660// options.
2661
2662def _mhwdiv_EQ : Joined<["--"], "mhwdiv=">, Alias<mhwdiv_EQ>;
2663def _mhwdiv : Separate<["--"], "mhwdiv">, Alias<mhwdiv_EQ>;
2664def _CLASSPATH_EQ : Joined<["--"], "CLASSPATH=">, Alias<fclasspath_EQ>;
2665def _CLASSPATH : Separate<["--"], "CLASSPATH">, Alias<fclasspath_EQ>;
2666def _all_warnings : Flag<["--"], "all-warnings">, Alias<Wall>;
2667def _analyze_auto : Flag<["--"], "analyze-auto">, Flags<[DriverOption]>;
2668def _analyzer_no_default_checks : Flag<["--"], "analyzer-no-default-checks">, Flags<[DriverOption]>;
2669def _analyzer_output : JoinedOrSeparate<["--"], "analyzer-output">, Flags<[DriverOption]>,
2670  HelpText<"Static analyzer report output format (html|plist|plist-multi-file|plist-html|text).">;
2671def _analyze : Flag<["--"], "analyze">, Flags<[DriverOption, CoreOption]>,
2672  HelpText<"Run the static analyzer">;
2673def _assemble : Flag<["--"], "assemble">, Alias<S>;
2674def _assert_EQ : Joined<["--"], "assert=">, Alias<A>;
2675def _assert : Separate<["--"], "assert">, Alias<A>;
2676def _bootclasspath_EQ : Joined<["--"], "bootclasspath=">, Alias<fbootclasspath_EQ>;
2677def _bootclasspath : Separate<["--"], "bootclasspath">, Alias<fbootclasspath_EQ>;
2678def _classpath_EQ : Joined<["--"], "classpath=">, Alias<fclasspath_EQ>;
2679def _classpath : Separate<["--"], "classpath">, Alias<fclasspath_EQ>;
2680def _comments_in_macros : Flag<["--"], "comments-in-macros">, Alias<CC>;
2681def _comments : Flag<["--"], "comments">, Alias<C>;
2682def _compile : Flag<["--"], "compile">, Alias<c>;
2683def _constant_cfstrings : Flag<["--"], "constant-cfstrings">;
2684def _debug_EQ : Joined<["--"], "debug=">, Alias<g_Flag>;
2685def _debug : Flag<["--"], "debug">, Alias<g_Flag>;
2686def _define_macro_EQ : Joined<["--"], "define-macro=">, Alias<D>;
2687def _define_macro : Separate<["--"], "define-macro">, Alias<D>;
2688def _dependencies : Flag<["--"], "dependencies">, Alias<M>;
2689def _dyld_prefix_EQ : Joined<["--"], "dyld-prefix=">;
2690def _dyld_prefix : Separate<["--"], "dyld-prefix">, Alias<_dyld_prefix_EQ>;
2691def _encoding_EQ : Joined<["--"], "encoding=">, Alias<fencoding_EQ>;
2692def _encoding : Separate<["--"], "encoding">, Alias<fencoding_EQ>;
2693def _entry : Flag<["--"], "entry">, Alias<e>;
2694def _extdirs_EQ : Joined<["--"], "extdirs=">, Alias<fextdirs_EQ>;
2695def _extdirs : Separate<["--"], "extdirs">, Alias<fextdirs_EQ>;
2696def _extra_warnings : Flag<["--"], "extra-warnings">, Alias<W_Joined>;
2697def _for_linker_EQ : Joined<["--"], "for-linker=">, Alias<Xlinker>;
2698def _for_linker : Separate<["--"], "for-linker">, Alias<Xlinker>;
2699def _force_link_EQ : Joined<["--"], "force-link=">, Alias<u>;
2700def _force_link : Separate<["--"], "force-link">, Alias<u>;
2701def _help_hidden : Flag<["--"], "help-hidden">,
2702  HelpText<"Display help for hidden options">;
2703def _imacros_EQ : Joined<["--"], "imacros=">, Alias<imacros>;
2704def _include_barrier : Flag<["--"], "include-barrier">, Alias<I_>;
2705def _include_directory_after_EQ : Joined<["--"], "include-directory-after=">, Alias<idirafter>;
2706def _include_directory_after : Separate<["--"], "include-directory-after">, Alias<idirafter>;
2707def _include_directory_EQ : Joined<["--"], "include-directory=">, Alias<I>;
2708def _include_directory : Separate<["--"], "include-directory">, Alias<I>;
2709def _include_prefix_EQ : Joined<["--"], "include-prefix=">, Alias<iprefix>;
2710def _include_prefix : Separate<["--"], "include-prefix">, Alias<iprefix>;
2711def _include_with_prefix_after_EQ : Joined<["--"], "include-with-prefix-after=">, Alias<iwithprefix>;
2712def _include_with_prefix_after : Separate<["--"], "include-with-prefix-after">, Alias<iwithprefix>;
2713def _include_with_prefix_before_EQ : Joined<["--"], "include-with-prefix-before=">, Alias<iwithprefixbefore>;
2714def _include_with_prefix_before : Separate<["--"], "include-with-prefix-before">, Alias<iwithprefixbefore>;
2715def _include_with_prefix_EQ : Joined<["--"], "include-with-prefix=">, Alias<iwithprefix>;
2716def _include_with_prefix : Separate<["--"], "include-with-prefix">, Alias<iwithprefix>;
2717def _include_EQ : Joined<["--"], "include=">, Alias<include_>;
2718def _language_EQ : Joined<["--"], "language=">, Alias<x>;
2719def _language : Separate<["--"], "language">, Alias<x>;
2720def _library_directory_EQ : Joined<["--"], "library-directory=">, Alias<L>;
2721def _library_directory : Separate<["--"], "library-directory">, Alias<L>;
2722def _no_line_commands : Flag<["--"], "no-line-commands">, Alias<P>;
2723def _no_standard_includes : Flag<["--"], "no-standard-includes">, Alias<nostdinc>;
2724def _no_standard_libraries : Flag<["--"], "no-standard-libraries">, Alias<nostdlib>;
2725def _no_undefined : Flag<["--"], "no-undefined">, Flags<[LinkerInput]>;
2726def _no_warnings : Flag<["--"], "no-warnings">, Alias<w>;
2727def _optimize_EQ : Joined<["--"], "optimize=">, Alias<O>;
2728def _optimize : Flag<["--"], "optimize">, Alias<O>;
2729def _output_class_directory_EQ : Joined<["--"], "output-class-directory=">, Alias<foutput_class_dir_EQ>;
2730def _output_class_directory : Separate<["--"], "output-class-directory">, Alias<foutput_class_dir_EQ>;
2731def _output_EQ : Joined<["--"], "output=">, Alias<o>;
2732def _output : Separate<["--"], "output">, Alias<o>;
2733def _param : Separate<["--"], "param">, Group<CompileOnly_Group>;
2734def _param_EQ : Joined<["--"], "param=">, Alias<_param>;
2735def _precompile : Flag<["--"], "precompile">, Flags<[DriverOption]>,
2736  Group<Action_Group>, HelpText<"Only precompile the input">;
2737def _prefix_EQ : Joined<["--"], "prefix=">, Alias<B>;
2738def _prefix : Separate<["--"], "prefix">, Alias<B>;
2739def _preprocess : Flag<["--"], "preprocess">, Alias<E>;
2740def _print_diagnostic_categories : Flag<["--"], "print-diagnostic-categories">;
2741def _print_file_name : Separate<["--"], "print-file-name">, Alias<print_file_name_EQ>;
2742def _print_missing_file_dependencies : Flag<["--"], "print-missing-file-dependencies">, Alias<MG>;
2743def _print_prog_name : Separate<["--"], "print-prog-name">, Alias<print_prog_name_EQ>;
2744def _profile_blocks : Flag<["--"], "profile-blocks">, Alias<a>;
2745def _profile : Flag<["--"], "profile">, Alias<p>;
2746def _resource_EQ : Joined<["--"], "resource=">, Alias<fcompile_resource_EQ>;
2747def _resource : Separate<["--"], "resource">, Alias<fcompile_resource_EQ>;
2748def _rtlib : Separate<["--"], "rtlib">, Alias<rtlib_EQ>;
2749def _serialize_diags : Separate<["-", "--"], "serialize-diagnostics">, Flags<[DriverOption]>,
2750  HelpText<"Serialize compiler diagnostics to a file">;
2751// We give --version different semantics from -version.
2752def _version : Flag<["--"], "version">, Flags<[CoreOption, CC1Option]>,
2753  HelpText<"Print version information">;
2754def _signed_char : Flag<["--"], "signed-char">, Alias<fsigned_char>;
2755def _std : Separate<["--"], "std">, Alias<std_EQ>;
2756def _stdlib : Separate<["--"], "stdlib">, Alias<stdlib_EQ>;
2757def _sysroot_EQ : Joined<["--"], "sysroot=">;
2758def _sysroot : Separate<["--"], "sysroot">, Alias<_sysroot_EQ>;
2759def _target_help : Flag<["--"], "target-help">;
2760def _trace_includes : Flag<["--"], "trace-includes">, Alias<H>;
2761def _undefine_macro_EQ : Joined<["--"], "undefine-macro=">, Alias<U>;
2762def _undefine_macro : Separate<["--"], "undefine-macro">, Alias<U>;
2763def _unsigned_char : Flag<["--"], "unsigned-char">, Alias<funsigned_char>;
2764def _user_dependencies : Flag<["--"], "user-dependencies">, Alias<MM>;
2765def _verbose : Flag<["--"], "verbose">, Alias<v>;
2766def _warn__EQ : Joined<["--"], "warn-=">, Alias<W_Joined>;
2767def _warn_ : Joined<["--"], "warn-">, Alias<W_Joined>;
2768def _write_dependencies : Flag<["--"], "write-dependencies">, Alias<MD>;
2769def _write_user_dependencies : Flag<["--"], "write-user-dependencies">, Alias<MMD>;
2770def _ : Joined<["--"], "">, Flags<[Unsupported]>;
2771
2772// Hexagon feature flags.
2773def mieee_rnd_near : Flag<["-"], "mieee-rnd-near">,
2774  Group<m_hexagon_Features_Group>;
2775def mv5 : Flag<["-"], "mv5">, Group<m_hexagon_Features_Group>, Alias<mcpu_EQ>,
2776  AliasArgs<["hexagonv5"]>;
2777def mv55 : Flag<["-"], "mv55">, Group<m_hexagon_Features_Group>,
2778  Alias<mcpu_EQ>, AliasArgs<["hexagonv55"]>;
2779def mv60 : Flag<["-"], "mv60">, Group<m_hexagon_Features_Group>,
2780  Alias<mcpu_EQ>, AliasArgs<["hexagonv60"]>;
2781def mv62 : Flag<["-"], "mv62">, Group<m_hexagon_Features_Group>,
2782  Alias<mcpu_EQ>, AliasArgs<["hexagonv62"]>;
2783def mv65 : Flag<["-"], "mv65">, Group<m_hexagon_Features_Group>,
2784  Alias<mcpu_EQ>, AliasArgs<["hexagonv65"]>;
2785def mv66 : Flag<["-"], "mv66">, Group<m_hexagon_Features_Group>,
2786  Alias<mcpu_EQ>, AliasArgs<["hexagonv66"]>;
2787def mhexagon_hvx : Flag<["-"], "mhvx">, Group<m_hexagon_Features_HVX_Group>,
2788  HelpText<"Enable Hexagon Vector eXtensions">;
2789def mhexagon_hvx_EQ : Joined<["-"], "mhvx=">,
2790  Group<m_hexagon_Features_HVX_Group>,
2791  HelpText<"Enable Hexagon Vector eXtensions">;
2792def mno_hexagon_hvx : Flag<["-"], "mno-hvx">,
2793  Group<m_hexagon_Features_HVX_Group>,
2794  HelpText<"Disable Hexagon Vector eXtensions">;
2795def mhexagon_hvx_length_EQ : Joined<["-"], "mhvx-length=">,
2796  Group<m_hexagon_Features_HVX_Group>, HelpText<"Set Hexagon Vector Length">,
2797  Values<"64B,128B">;
2798def ffixed_r19: Flag<["-"], "ffixed-r19">,
2799  HelpText<"Reserve register r19 (Hexagon only)">;
2800def mmemops : Flag<["-"], "mmemops">, Group<m_hexagon_Features_Group>,
2801  Flags<[CC1Option]>, HelpText<"Enable generation of memop instructions">;
2802def mno_memops : Flag<["-"], "mno-memops">, Group<m_hexagon_Features_Group>,
2803  Flags<[CC1Option]>, HelpText<"Disable generation of memop instructions">;
2804def mpackets : Flag<["-"], "mpackets">, Group<m_hexagon_Features_Group>,
2805  Flags<[CC1Option]>, HelpText<"Enable generation of instruction packets">;
2806def mno_packets : Flag<["-"], "mno-packets">, Group<m_hexagon_Features_Group>,
2807  Flags<[CC1Option]>, HelpText<"Disable generation of instruction packets">;
2808def mnvj : Flag<["-"], "mnvj">, Group<m_hexagon_Features_Group>,
2809  Flags<[CC1Option]>, HelpText<"Enable generation of new-value jumps">;
2810def mno_nvj : Flag<["-"], "mno-nvj">, Group<m_hexagon_Features_Group>,
2811  Flags<[CC1Option]>, HelpText<"Disable generation of new-value jumps">;
2812def mnvs : Flag<["-"], "mnvs">, Group<m_hexagon_Features_Group>,
2813  Flags<[CC1Option]>, HelpText<"Enable generation of new-value stores">;
2814def mno_nvs : Flag<["-"], "mno-nvs">, Group<m_hexagon_Features_Group>,
2815  Flags<[CC1Option]>, HelpText<"Disable generation of new-value stores">;
2816
2817
2818// X86 feature flags
2819def mx87 : Flag<["-"], "mx87">, Group<m_x86_Features_Group>;
2820def mno_x87 : Flag<["-"], "mno-x87">, Group<m_x86_Features_Group>;
2821def m80387 : Flag<["-"], "m80387">, Alias<mx87>;
2822def mno_80387 : Flag<["-"], "mno-80387">, Alias<mno_x87>;
2823def mmmx : Flag<["-"], "mmmx">, Group<m_x86_Features_Group>;
2824def mno_mmx : Flag<["-"], "mno-mmx">, Group<m_x86_Features_Group>;
2825def m3dnow : Flag<["-"], "m3dnow">, Group<m_x86_Features_Group>;
2826def mno_3dnow : Flag<["-"], "mno-3dnow">, Group<m_x86_Features_Group>;
2827def m3dnowa : Flag<["-"], "m3dnowa">, Group<m_x86_Features_Group>;
2828def mno_3dnowa : Flag<["-"], "mno-3dnowa">, Group<m_x86_Features_Group>;
2829def msse : Flag<["-"], "msse">, Group<m_x86_Features_Group>;
2830def mno_sse : Flag<["-"], "mno-sse">, Group<m_x86_Features_Group>;
2831def msse2 : Flag<["-"], "msse2">, Group<m_x86_Features_Group>;
2832def mno_sse2 : Flag<["-"], "mno-sse2">, Group<m_x86_Features_Group>;
2833def msse3 : Flag<["-"], "msse3">, Group<m_x86_Features_Group>;
2834def mno_sse3 : Flag<["-"], "mno-sse3">, Group<m_x86_Features_Group>;
2835def mssse3 : Flag<["-"], "mssse3">, Group<m_x86_Features_Group>;
2836def mno_ssse3 : Flag<["-"], "mno-ssse3">, Group<m_x86_Features_Group>;
2837def msse4_1 : Flag<["-"], "msse4.1">, Group<m_x86_Features_Group>;
2838def mno_sse4_1 : Flag<["-"], "mno-sse4.1">, Group<m_x86_Features_Group>;
2839def msse4_2 : Flag<["-"], "msse4.2">, Group<m_x86_Features_Group>;
2840def mno_sse4_2 : Flag<["-"], "mno-sse4.2">, Group<m_x86_Features_Group>;
2841def msse4 : Flag<["-"], "msse4">, Alias<msse4_2>;
2842// -mno-sse4 turns off sse4.1 which has the effect of turning off everything
2843// later than 4.1. -msse4 turns on 4.2 which has the effect of turning on
2844// everything earlier than 4.2.
2845def mno_sse4 : Flag<["-"], "mno-sse4">, Alias<mno_sse4_1>;
2846def msse4a : Flag<["-"], "msse4a">, Group<m_x86_Features_Group>;
2847def mno_sse4a : Flag<["-"], "mno-sse4a">, Group<m_x86_Features_Group>;
2848def mavx : Flag<["-"], "mavx">, Group<m_x86_Features_Group>;
2849def mno_avx : Flag<["-"], "mno-avx">, Group<m_x86_Features_Group>;
2850def mavx2 : Flag<["-"], "mavx2">, Group<m_x86_Features_Group>;
2851def mno_avx2 : Flag<["-"], "mno-avx2">, Group<m_x86_Features_Group>;
2852def mavx512f : Flag<["-"], "mavx512f">, Group<m_x86_Features_Group>;
2853def mno_avx512f : Flag<["-"], "mno-avx512f">, Group<m_x86_Features_Group>;
2854def mavx512bitalg : Flag<["-"], "mavx512bitalg">, Group<m_x86_Features_Group>;
2855def mno_avx512bitalg : Flag<["-"], "mno-avx512bitalg">, Group<m_x86_Features_Group>;
2856def mavx512bw : Flag<["-"], "mavx512bw">, Group<m_x86_Features_Group>;
2857def mno_avx512bw : Flag<["-"], "mno-avx512bw">, Group<m_x86_Features_Group>;
2858def mavx512cd : Flag<["-"], "mavx512cd">, Group<m_x86_Features_Group>;
2859def mno_avx512cd : Flag<["-"], "mno-avx512cd">, Group<m_x86_Features_Group>;
2860def mavx512dq : Flag<["-"], "mavx512dq">, Group<m_x86_Features_Group>;
2861def mno_avx512dq : Flag<["-"], "mno-avx512dq">, Group<m_x86_Features_Group>;
2862def mavx512er : Flag<["-"], "mavx512er">, Group<m_x86_Features_Group>;
2863def mno_avx512er : Flag<["-"], "mno-avx512er">, Group<m_x86_Features_Group>;
2864def mavx512ifma : Flag<["-"], "mavx512ifma">, Group<m_x86_Features_Group>;
2865def mno_avx512ifma : Flag<["-"], "mno-avx512ifma">, Group<m_x86_Features_Group>;
2866def mavx512pf : Flag<["-"], "mavx512pf">, Group<m_x86_Features_Group>;
2867def mno_avx512pf : Flag<["-"], "mno-avx512pf">, Group<m_x86_Features_Group>;
2868def mavx512vbmi : Flag<["-"], "mavx512vbmi">, Group<m_x86_Features_Group>;
2869def mno_avx512vbmi : Flag<["-"], "mno-avx512vbmi">, Group<m_x86_Features_Group>;
2870def mavx512vbmi2 : Flag<["-"], "mavx512vbmi2">, Group<m_x86_Features_Group>;
2871def mno_avx512vbmi2 : Flag<["-"], "mno-avx512vbmi2">, Group<m_x86_Features_Group>;
2872def mavx512vl : Flag<["-"], "mavx512vl">, Group<m_x86_Features_Group>;
2873def mno_avx512vl : Flag<["-"], "mno-avx512vl">, Group<m_x86_Features_Group>;
2874def mavx512vnni : Flag<["-"], "mavx512vnni">, Group<m_x86_Features_Group>;
2875def mno_avx512vnni : Flag<["-"], "mno-avx512vnni">, Group<m_x86_Features_Group>;
2876def mavx512vpopcntdq : Flag<["-"], "mavx512vpopcntdq">, Group<m_x86_Features_Group>;
2877def mno_avx512vpopcntdq : Flag<["-"], "mno-avx512vpopcntdq">, Group<m_x86_Features_Group>;
2878def madx : Flag<["-"], "madx">, Group<m_x86_Features_Group>;
2879def mno_adx : Flag<["-"], "mno-adx">, Group<m_x86_Features_Group>;
2880def maes : Flag<["-"], "maes">, Group<m_x86_Features_Group>;
2881def mno_aes : Flag<["-"], "mno-aes">, Group<m_x86_Features_Group>;
2882def mbmi : Flag<["-"], "mbmi">, Group<m_x86_Features_Group>;
2883def mno_bmi : Flag<["-"], "mno-bmi">, Group<m_x86_Features_Group>;
2884def mbmi2 : Flag<["-"], "mbmi2">, Group<m_x86_Features_Group>;
2885def mno_bmi2 : Flag<["-"], "mno-bmi2">, Group<m_x86_Features_Group>;
2886def mcldemote : Flag<["-"], "mcldemote">, Group<m_x86_Features_Group>;
2887def mno_cldemote : Flag<["-"], "mno-cldemote">, Group<m_x86_Features_Group>;
2888def mclflushopt : Flag<["-"], "mclflushopt">, Group<m_x86_Features_Group>;
2889def mno_clflushopt : Flag<["-"], "mno-clflushopt">, Group<m_x86_Features_Group>;
2890def mclwb : Flag<["-"], "mclwb">, Group<m_x86_Features_Group>;
2891def mno_clwb : Flag<["-"], "mno-clwb">, Group<m_x86_Features_Group>;
2892def mwbnoinvd : Flag<["-"], "mwbnoinvd">, Group<m_x86_Features_Group>;
2893def mno_wbnoinvd : Flag<["-"], "mno-wbnoinvd">, Group<m_x86_Features_Group>;
2894def mclzero : Flag<["-"], "mclzero">, Group<m_x86_Features_Group>;
2895def mno_clzero : Flag<["-"], "mno-clzero">, Group<m_x86_Features_Group>;
2896def mcx16 : Flag<["-"], "mcx16">, Group<m_x86_Features_Group>;
2897def mno_cx16 : Flag<["-"], "mno-cx16">, Group<m_x86_Features_Group>;
2898def mf16c : Flag<["-"], "mf16c">, Group<m_x86_Features_Group>;
2899def mno_f16c : Flag<["-"], "mno-f16c">, Group<m_x86_Features_Group>;
2900def mfma : Flag<["-"], "mfma">, Group<m_x86_Features_Group>;
2901def mno_fma : Flag<["-"], "mno-fma">, Group<m_x86_Features_Group>;
2902def mfma4 : Flag<["-"], "mfma4">, Group<m_x86_Features_Group>;
2903def mno_fma4 : Flag<["-"], "mno-fma4">, Group<m_x86_Features_Group>;
2904def mfsgsbase : Flag<["-"], "mfsgsbase">, Group<m_x86_Features_Group>;
2905def mno_fsgsbase : Flag<["-"], "mno-fsgsbase">, Group<m_x86_Features_Group>;
2906def mfxsr : Flag<["-"], "mfxsr">, Group<m_x86_Features_Group>;
2907def mno_fxsr : Flag<["-"], "mno-fxsr">, Group<m_x86_Features_Group>;
2908def minvpcid : Flag<["-"], "minvpcid">, Group<m_x86_Features_Group>;
2909def mno_invpcid : Flag<["-"], "mno-invpcid">, Group<m_x86_Features_Group>;
2910def mgfni : Flag<["-"], "mgfni">, Group<m_x86_Features_Group>;
2911def mno_gfni : Flag<["-"], "mno-gfni">, Group<m_x86_Features_Group>;
2912def mlwp : Flag<["-"], "mlwp">, Group<m_x86_Features_Group>;
2913def mno_lwp : Flag<["-"], "mno-lwp">, Group<m_x86_Features_Group>;
2914def mlzcnt : Flag<["-"], "mlzcnt">, Group<m_x86_Features_Group>;
2915def mno_lzcnt : Flag<["-"], "mno-lzcnt">, Group<m_x86_Features_Group>;
2916def mmovbe : Flag<["-"], "mmovbe">, Group<m_x86_Features_Group>;
2917def mno_movbe : Flag<["-"], "mno-movbe">, Group<m_x86_Features_Group>;
2918def mmovdiri : Flag<["-"], "mmovdiri">, Group<m_x86_Features_Group>;
2919def mno_movdiri : Flag<["-"], "mno-movdiri">, Group<m_x86_Features_Group>;
2920def mmovdir64b : Flag<["-"], "mmovdir64b">, Group<m_x86_Features_Group>;
2921def mno_movdir64b : Flag<["-"], "mno-movdir64b">, Group<m_x86_Features_Group>;
2922def mmpx : Flag<["-"], "mmpx">, Group<m_x86_Features_Group>;
2923def mno_mpx : Flag<["-"], "mno-mpx">, Group<m_x86_Features_Group>;
2924def mmwaitx : Flag<["-"], "mmwaitx">, Group<m_x86_Features_Group>;
2925def mno_mwaitx : Flag<["-"], "mno-mwaitx">, Group<m_x86_Features_Group>;
2926def mpku : Flag<["-"], "mpku">, Group<m_x86_Features_Group>;
2927def mno_pku : Flag<["-"], "mno-pku">, Group<m_x86_Features_Group>;
2928def mpclmul : Flag<["-"], "mpclmul">, Group<m_x86_Features_Group>;
2929def mno_pclmul : Flag<["-"], "mno-pclmul">, Group<m_x86_Features_Group>;
2930def mpconfig : Flag<["-"], "mpconfig">, Group<m_x86_Features_Group>;
2931def mno_pconfig : Flag<["-"], "mno-pconfig">, Group<m_x86_Features_Group>;
2932def mpopcnt : Flag<["-"], "mpopcnt">, Group<m_x86_Features_Group>;
2933def mno_popcnt : Flag<["-"], "mno-popcnt">, Group<m_x86_Features_Group>;
2934def mprefetchwt1 : Flag<["-"], "mprefetchwt1">, Group<m_x86_Features_Group>;
2935def mno_prefetchwt1 : Flag<["-"], "mno-prefetchwt1">, Group<m_x86_Features_Group>;
2936def mprfchw : Flag<["-"], "mprfchw">, Group<m_x86_Features_Group>;
2937def mno_prfchw : Flag<["-"], "mno-prfchw">, Group<m_x86_Features_Group>;
2938def mptwrite : Flag<["-"], "mptwrite">, Group<m_x86_Features_Group>;
2939def mno_ptwrite : Flag<["-"], "mno-ptwrite">, Group<m_x86_Features_Group>;
2940def mrdpid : Flag<["-"], "mrdpid">, Group<m_x86_Features_Group>;
2941def mno_rdpid : Flag<["-"], "mno-rdpid">, Group<m_x86_Features_Group>;
2942def mrdrnd : Flag<["-"], "mrdrnd">, Group<m_x86_Features_Group>;
2943def mno_rdrnd : Flag<["-"], "mno-rdrnd">, Group<m_x86_Features_Group>;
2944def mrtm : Flag<["-"], "mrtm">, Group<m_x86_Features_Group>;
2945def mno_rtm : Flag<["-"], "mno-rtm">, Group<m_x86_Features_Group>;
2946def mrdseed : Flag<["-"], "mrdseed">, Group<m_x86_Features_Group>;
2947def mno_rdseed : Flag<["-"], "mno-rdseed">, Group<m_x86_Features_Group>;
2948def msahf : Flag<["-"], "msahf">, Group<m_x86_Features_Group>;
2949def mno_sahf : Flag<["-"], "mno-sahf">, Group<m_x86_Features_Group>;
2950def msgx : Flag<["-"], "msgx">, Group<m_x86_Features_Group>;
2951def mno_sgx : Flag<["-"], "mno-sgx">, Group<m_x86_Features_Group>;
2952def msha : Flag<["-"], "msha">, Group<m_x86_Features_Group>;
2953def mno_sha : Flag<["-"], "mno-sha">, Group<m_x86_Features_Group>;
2954def mtbm : Flag<["-"], "mtbm">, Group<m_x86_Features_Group>;
2955def mno_tbm : Flag<["-"], "mno-tbm">, Group<m_x86_Features_Group>;
2956def mvaes : Flag<["-"], "mvaes">, Group<m_x86_Features_Group>;
2957def mno_vaes : Flag<["-"], "mno-vaes">, Group<m_x86_Features_Group>;
2958def mvpclmulqdq : Flag<["-"], "mvpclmulqdq">, Group<m_x86_Features_Group>;
2959def mno_vpclmulqdq : Flag<["-"], "mno-vpclmulqdq">, Group<m_x86_Features_Group>;
2960def mwaitpkg : Flag<["-"], "mwaitpkg">, Group<m_x86_Features_Group>;
2961def mno_waitpkg : Flag<["-"], "mno-waitpkg">, Group<m_x86_Features_Group>;
2962def mxop : Flag<["-"], "mxop">, Group<m_x86_Features_Group>;
2963def mno_xop : Flag<["-"], "mno-xop">, Group<m_x86_Features_Group>;
2964def mxsave : Flag<["-"], "mxsave">, Group<m_x86_Features_Group>;
2965def mno_xsave : Flag<["-"], "mno-xsave">, Group<m_x86_Features_Group>;
2966def mxsavec : Flag<["-"], "mxsavec">, Group<m_x86_Features_Group>;
2967def mno_xsavec : Flag<["-"], "mno-xsavec">, Group<m_x86_Features_Group>;
2968def mxsaveopt : Flag<["-"], "mxsaveopt">, Group<m_x86_Features_Group>;
2969def mno_xsaveopt : Flag<["-"], "mno-xsaveopt">, Group<m_x86_Features_Group>;
2970def mxsaves : Flag<["-"], "mxsaves">, Group<m_x86_Features_Group>;
2971def mno_xsaves : Flag<["-"], "mno-xsaves">, Group<m_x86_Features_Group>;
2972def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Features_Group>;
2973def mno_shstk : Flag<["-"], "mno-shstk">, Group<m_x86_Features_Group>;
2974def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group<m_x86_Features_Group>;
2975def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group<m_x86_Features_Group>;
2976
2977// These are legacy user-facing driver-level option spellings. They are always
2978// aliases for options that are spelled using the more common Unix / GNU flag
2979// style of double-dash and equals-joined flags.
2980def gcc_toolchain_legacy_spelling : Separate<["-"], "gcc-toolchain">, Alias<gcc_toolchain>;
2981def target_legacy_spelling : Separate<["-"], "target">, Alias<target>;
2982
2983// Special internal option to handle -Xlinker --no-demangle.
2984def Z_Xlinker__no_demangle : Flag<["-"], "Z-Xlinker-no-demangle">,
2985    Flags<[Unsupported, NoArgumentUnused]>;
2986
2987// Special internal option to allow forwarding arbitrary arguments to linker.
2988def Zlinker_input : Separate<["-"], "Zlinker-input">,
2989    Flags<[Unsupported, NoArgumentUnused]>;
2990
2991// Reserved library options.
2992def Z_reserved_lib_stdcxx : Flag<["-"], "Z-reserved-lib-stdc++">,
2993    Flags<[LinkerInput, NoArgumentUnused, Unsupported]>, Group<reserved_lib_Group>;
2994def Z_reserved_lib_cckext : Flag<["-"], "Z-reserved-lib-cckext">,
2995    Flags<[LinkerInput, NoArgumentUnused, Unsupported]>, Group<reserved_lib_Group>;
2996
2997// Ignored options
2998// FIXME: multiclasess produce suffixes, not prefixes. This is fine for now
2999// since it is only used in ignored options.
3000multiclass BooleanFFlag<string name> {
3001  def _f : Flag<["-"], "f"#name>;
3002  def _fno : Flag<["-"], "fno-"#name>;
3003}
3004
3005defm : BooleanFFlag<"keep-inline-functions">, Group<clang_ignored_gcc_optimization_f_Group>;
3006
3007def fprofile_dir : Joined<["-"], "fprofile-dir=">, Group<f_Group>;
3008
3009def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group<f_Group>, Flags<[CoreOption]>;
3010
3011defm align_labels : BooleanFFlag<"align-labels">, Group<clang_ignored_gcc_optimization_f_Group>;
3012def falign_labels_EQ : Joined<["-"], "falign-labels=">, Group<clang_ignored_gcc_optimization_f_Group>;
3013defm align_loops : BooleanFFlag<"align-loops">, Group<clang_ignored_gcc_optimization_f_Group>;
3014def falign_loops_EQ : Joined<["-"], "falign-loops=">, Group<clang_ignored_gcc_optimization_f_Group>;
3015defm align_jumps : BooleanFFlag<"align-jumps">, Group<clang_ignored_gcc_optimization_f_Group>;
3016def falign_jumps_EQ : Joined<["-"], "falign-jumps=">, Group<clang_ignored_gcc_optimization_f_Group>;
3017
3018// FIXME: This option should be supported and wired up to our diognostics, but
3019// ignore it for now to avoid breaking builds that use it.
3020def fdiagnostics_show_location_EQ : Joined<["-"], "fdiagnostics-show-location=">, Group<clang_ignored_f_Group>;
3021
3022defm fcheck_new : BooleanFFlag<"check-new">, Group<clang_ignored_f_Group>;
3023defm caller_saves : BooleanFFlag<"caller-saves">, Group<clang_ignored_gcc_optimization_f_Group>;
3024defm reorder_blocks : BooleanFFlag<"reorder-blocks">, Group<clang_ignored_gcc_optimization_f_Group>;
3025defm eliminate_unused_debug_types : BooleanFFlag<"eliminate-unused-debug-types">, Group<clang_ignored_f_Group>;
3026defm branch_count_reg : BooleanFFlag<"branch-count-reg">, Group<clang_ignored_gcc_optimization_f_Group>;
3027defm default_inline : BooleanFFlag<"default-inline">, Group<clang_ignored_gcc_optimization_f_Group>;
3028defm fat_lto_objects : BooleanFFlag<"fat-lto-objects">, Group<clang_ignored_gcc_optimization_f_Group>;
3029defm float_store : BooleanFFlag<"float-store">, Group<clang_ignored_gcc_optimization_f_Group>;
3030defm friend_injection : BooleanFFlag<"friend-injection">, Group<clang_ignored_f_Group>;
3031defm function_attribute_list : BooleanFFlag<"function-attribute-list">, Group<clang_ignored_f_Group>;
3032defm gcse : BooleanFFlag<"gcse">, Group<clang_ignored_gcc_optimization_f_Group>;
3033defm gcse_after_reload: BooleanFFlag<"gcse-after-reload">, Group<clang_ignored_gcc_optimization_f_Group>;
3034defm gcse_las: BooleanFFlag<"gcse-las">, Group<clang_ignored_gcc_optimization_f_Group>;
3035defm gcse_sm: BooleanFFlag<"gcse-sm">, Group<clang_ignored_gcc_optimization_f_Group>;
3036defm gnu : BooleanFFlag<"gnu">, Group<clang_ignored_f_Group>;
3037defm implicit_templates : BooleanFFlag<"implicit-templates">, Group<clang_ignored_f_Group>;
3038defm implement_inlines : BooleanFFlag<"implement-inlines">, Group<clang_ignored_f_Group>;
3039defm merge_constants : BooleanFFlag<"merge-constants">, Group<clang_ignored_gcc_optimization_f_Group>;
3040defm modulo_sched : BooleanFFlag<"modulo-sched">, Group<clang_ignored_gcc_optimization_f_Group>;
3041defm modulo_sched_allow_regmoves : BooleanFFlag<"modulo-sched-allow-regmoves">,
3042    Group<clang_ignored_gcc_optimization_f_Group>;
3043defm inline_functions_called_once : BooleanFFlag<"inline-functions-called-once">,
3044    Group<clang_ignored_gcc_optimization_f_Group>;
3045def finline_limit_EQ : Joined<["-"], "finline-limit=">, Group<clang_ignored_gcc_optimization_f_Group>;
3046defm finline_limit : BooleanFFlag<"inline-limit">, Group<clang_ignored_gcc_optimization_f_Group>;
3047defm inline_small_functions : BooleanFFlag<"inline-small-functions">,
3048    Group<clang_ignored_gcc_optimization_f_Group>;
3049defm ipa_cp : BooleanFFlag<"ipa-cp">,
3050    Group<clang_ignored_gcc_optimization_f_Group>;
3051defm ivopts : BooleanFFlag<"ivopts">, Group<clang_ignored_gcc_optimization_f_Group>;
3052defm non_call_exceptions : BooleanFFlag<"non-call-exceptions">, Group<clang_ignored_f_Group>;
3053defm peel_loops : BooleanFFlag<"peel-loops">, Group<clang_ignored_gcc_optimization_f_Group>;
3054defm permissive : BooleanFFlag<"permissive">, Group<clang_ignored_f_Group>;
3055defm prefetch_loop_arrays : BooleanFFlag<"prefetch-loop-arrays">, Group<clang_ignored_gcc_optimization_f_Group>;
3056defm printf : BooleanFFlag<"printf">, Group<clang_ignored_f_Group>;
3057defm profile : BooleanFFlag<"profile">, Group<clang_ignored_f_Group>;
3058defm profile_correction : BooleanFFlag<"profile-correction">, Group<clang_ignored_gcc_optimization_f_Group>;
3059defm profile_generate_sampling : BooleanFFlag<"profile-generate-sampling">, Group<clang_ignored_f_Group>;
3060defm profile_reusedist : BooleanFFlag<"profile-reusedist">, Group<clang_ignored_f_Group>;
3061defm profile_values : BooleanFFlag<"profile-values">, Group<clang_ignored_gcc_optimization_f_Group>;
3062defm regs_graph : BooleanFFlag<"regs-graph">, Group<clang_ignored_f_Group>;
3063defm rename_registers : BooleanFFlag<"rename-registers">, Group<clang_ignored_gcc_optimization_f_Group>;
3064defm ripa : BooleanFFlag<"ripa">, Group<clang_ignored_f_Group>;
3065defm rounding_math : BooleanFFlag<"rounding-math">, Group<clang_ignored_gcc_optimization_f_Group>;
3066defm schedule_insns : BooleanFFlag<"schedule-insns">, Group<clang_ignored_gcc_optimization_f_Group>;
3067defm schedule_insns2 : BooleanFFlag<"schedule-insns2">, Group<clang_ignored_gcc_optimization_f_Group>;
3068defm see : BooleanFFlag<"see">, Group<clang_ignored_f_Group>;
3069defm signaling_nans : BooleanFFlag<"signaling-nans">, Group<clang_ignored_gcc_optimization_f_Group>;
3070defm single_precision_constant : BooleanFFlag<"single-precision-constant">,
3071    Group<clang_ignored_gcc_optimization_f_Group>;
3072defm spec_constr_count : BooleanFFlag<"spec-constr-count">, Group<clang_ignored_f_Group>;
3073defm stack_check : BooleanFFlag<"stack-check">, Group<clang_ignored_f_Group>;
3074defm strength_reduce :
3075    BooleanFFlag<"strength-reduce">, Group<clang_ignored_gcc_optimization_f_Group>;
3076defm tls_model : BooleanFFlag<"tls-model">, Group<clang_ignored_f_Group>;
3077defm tracer : BooleanFFlag<"tracer">, Group<clang_ignored_gcc_optimization_f_Group>;
3078defm tree_dce : BooleanFFlag<"tree-dce">, Group<clang_ignored_gcc_optimization_f_Group>;
3079defm tree_loop_im : BooleanFFlag<"tree_loop_im">,  Group<clang_ignored_gcc_optimization_f_Group>;
3080defm tree_loop_ivcanon : BooleanFFlag<"tree_loop_ivcanon">,  Group<clang_ignored_gcc_optimization_f_Group>;
3081defm tree_loop_linear : BooleanFFlag<"tree_loop_linear">,  Group<clang_ignored_gcc_optimization_f_Group>;
3082defm tree_salias : BooleanFFlag<"tree-salias">, Group<clang_ignored_f_Group>;
3083defm tree_ter : BooleanFFlag<"tree-ter">, Group<clang_ignored_gcc_optimization_f_Group>;
3084defm tree_vectorizer_verbose : BooleanFFlag<"tree-vectorizer-verbose">, Group<clang_ignored_f_Group>;
3085defm tree_vrp : BooleanFFlag<"tree-vrp">, Group<clang_ignored_gcc_optimization_f_Group>;
3086defm unroll_all_loops : BooleanFFlag<"unroll-all-loops">, Group<clang_ignored_gcc_optimization_f_Group>;
3087defm unsafe_loop_optimizations : BooleanFFlag<"unsafe-loop-optimizations">,
3088    Group<clang_ignored_gcc_optimization_f_Group>;
3089defm unswitch_loops : BooleanFFlag<"unswitch-loops">, Group<clang_ignored_gcc_optimization_f_Group>;
3090defm use_linker_plugin : BooleanFFlag<"use-linker-plugin">, Group<clang_ignored_gcc_optimization_f_Group>;
3091defm vect_cost_model : BooleanFFlag<"vect-cost-model">, Group<clang_ignored_gcc_optimization_f_Group>;
3092defm variable_expansion_in_unroller : BooleanFFlag<"variable-expansion-in-unroller">,
3093    Group<clang_ignored_gcc_optimization_f_Group>;
3094defm web : BooleanFFlag<"web">, Group<clang_ignored_gcc_optimization_f_Group>;
3095defm whole_program : BooleanFFlag<"whole-program">, Group<clang_ignored_gcc_optimization_f_Group>;
3096defm devirtualize : BooleanFFlag<"devirtualize">, Group<clang_ignored_gcc_optimization_f_Group>;
3097defm devirtualize_speculatively : BooleanFFlag<"devirtualize-speculatively">,
3098    Group<clang_ignored_gcc_optimization_f_Group>;
3099
3100// Generic gfortran options.
3101def A_DASH : Joined<["-"], "A-">, Group<gfortran_Group>;
3102def J : JoinedOrSeparate<["-"], "J">, Flags<[RenderJoined]>, Group<gfortran_Group>;
3103def cpp : Flag<["-"], "cpp">, Group<gfortran_Group>;
3104def nocpp : Flag<["-"], "nocpp">, Group<gfortran_Group>;
3105def static_libgfortran : Flag<["-"], "static-libgfortran">, Group<gfortran_Group>;
3106
3107// "f" options with values for gfortran.
3108def fblas_matmul_limit_EQ : Joined<["-"], "fblas-matmul-limit=">, Group<gfortran_Group>;
3109def fcheck_EQ : Joined<["-"], "fcheck=">, Group<gfortran_Group>;
3110def fcoarray_EQ : Joined<["-"], "fcoarray=">, Group<gfortran_Group>;
3111def fconvert_EQ : Joined<["-"], "fconvert=">, Group<gfortran_Group>;
3112def ffixed_line_length_VALUE : Joined<["-"], "ffixed-line-length-">, Group<gfortran_Group>;
3113def ffpe_trap_EQ : Joined<["-"], "ffpe-trap=">, Group<gfortran_Group>;
3114def ffree_line_length_VALUE : Joined<["-"], "ffree-line-length-">, Group<gfortran_Group>;
3115def finit_character_EQ : Joined<["-"], "finit-character=">, Group<gfortran_Group>;
3116def finit_integer_EQ : Joined<["-"], "finit-integer=">, Group<gfortran_Group>;
3117def finit_logical_EQ : Joined<["-"], "finit-logical=">, Group<gfortran_Group>;
3118def finit_real_EQ : Joined<["-"], "finit-real=">, Group<gfortran_Group>;
3119def fmax_array_constructor_EQ : Joined<["-"], "fmax-array-constructor=">, Group<gfortran_Group>;
3120def fmax_errors_EQ : Joined<["-"], "fmax-errors=">, Group<gfortran_Group>;
3121def fmax_stack_var_size_EQ : Joined<["-"], "fmax-stack-var-size=">, Group<gfortran_Group>;
3122def fmax_subrecord_length_EQ : Joined<["-"], "fmax-subrecord-length=">, Group<gfortran_Group>;
3123def frecord_marker_EQ : Joined<["-"], "frecord-marker=">, Group<gfortran_Group>;
3124
3125// "f" flags for gfortran.
3126defm aggressive_function_elimination : BooleanFFlag<"aggressive-function-elimination">, Group<gfortran_Group>;
3127defm align_commons : BooleanFFlag<"align-commons">, Group<gfortran_Group>;
3128defm all_intrinsics : BooleanFFlag<"all-intrinsics">, Group<gfortran_Group>;
3129defm automatic : BooleanFFlag<"automatic">, Group<gfortran_Group>;
3130defm backslash : BooleanFFlag<"backslash">, Group<gfortran_Group>;
3131defm backtrace : BooleanFFlag<"backtrace">, Group<gfortran_Group>;
3132defm bounds_check : BooleanFFlag<"bounds-check">, Group<gfortran_Group>;
3133defm check_array_temporaries : BooleanFFlag<"check-array-temporaries">, Group<gfortran_Group>;
3134defm cray_pointer : BooleanFFlag<"cray-pointer">, Group<gfortran_Group>;
3135defm d_lines_as_code : BooleanFFlag<"d-lines-as-code">, Group<gfortran_Group>;
3136defm d_lines_as_comments : BooleanFFlag<"d-lines-as-comments">, Group<gfortran_Group>;
3137defm default_double_8 : BooleanFFlag<"default-double-8">, Group<gfortran_Group>;
3138defm default_integer_8 : BooleanFFlag<"default-integer-8">, Group<gfortran_Group>;
3139defm default_real_8 : BooleanFFlag<"default-real-8">, Group<gfortran_Group>;
3140defm dollar_ok : BooleanFFlag<"dollar-ok">, Group<gfortran_Group>;
3141defm dump_fortran_optimized : BooleanFFlag<"dump-fortran-optimized">, Group<gfortran_Group>;
3142defm dump_fortran_original : BooleanFFlag<"dump-fortran-original">, Group<gfortran_Group>;
3143defm dump_parse_tree : BooleanFFlag<"dump-parse-tree">, Group<gfortran_Group>;
3144defm external_blas : BooleanFFlag<"external-blas">, Group<gfortran_Group>;
3145defm f2c : BooleanFFlag<"f2c">, Group<gfortran_Group>;
3146defm fixed_form : BooleanFFlag<"fixed-form">, Group<gfortran_Group>;
3147defm free_form : BooleanFFlag<"free-form">, Group<gfortran_Group>;
3148defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<gfortran_Group>;
3149defm implicit_none : BooleanFFlag<"implicit-none">, Group<gfortran_Group>;
3150defm init_local_zero : BooleanFFlag<"init-local-zero">, Group<gfortran_Group>;
3151defm integer_4_integer_8 : BooleanFFlag<"integer-4-integer-8">, Group<gfortran_Group>;
3152defm intrinsic_modules_path : BooleanFFlag<"intrinsic-modules-path">, Group<gfortran_Group>;
3153defm max_identifier_length : BooleanFFlag<"max-identifier-length">, Group<gfortran_Group>;
3154defm module_private : BooleanFFlag<"module-private">, Group<gfortran_Group>;
3155defm pack_derived : BooleanFFlag<"pack-derived">, Group<gfortran_Group>;
3156defm protect_parens : BooleanFFlag<"protect-parens">, Group<gfortran_Group>;
3157defm range_check : BooleanFFlag<"range-check">, Group<gfortran_Group>;
3158defm real_4_real_10 : BooleanFFlag<"real-4-real-10">, Group<gfortran_Group>;
3159defm real_4_real_16 : BooleanFFlag<"real-4-real-16">, Group<gfortran_Group>;
3160defm real_4_real_8 : BooleanFFlag<"real-4-real-8">, Group<gfortran_Group>;
3161defm real_8_real_10 : BooleanFFlag<"real-8-real-10">, Group<gfortran_Group>;
3162defm real_8_real_16 : BooleanFFlag<"real-8-real-16">, Group<gfortran_Group>;
3163defm real_8_real_4 : BooleanFFlag<"real-8-real-4">, Group<gfortran_Group>;
3164defm realloc_lhs : BooleanFFlag<"realloc-lhs">, Group<gfortran_Group>;
3165defm recursive : BooleanFFlag<"recursive">, Group<gfortran_Group>;
3166defm repack_arrays : BooleanFFlag<"repack-arrays">, Group<gfortran_Group>;
3167defm second_underscore : BooleanFFlag<"second-underscore">, Group<gfortran_Group>;
3168defm sign_zero : BooleanFFlag<"sign-zero">, Group<gfortran_Group>;
3169defm stack_arrays : BooleanFFlag<"stack-arrays">, Group<gfortran_Group>;
3170defm underscoring : BooleanFFlag<"underscoring">, Group<gfortran_Group>;
3171defm whole_file : BooleanFFlag<"whole-file">, Group<gfortran_Group>;
3172
3173
3174include "CC1Options.td"
3175
3176include "CLCompatOptions.td"
3177