|GNU Compiler Collection (GCC) Internals|
The second field of an option record can specify any of the following properties. When an option takes an argument, it is enclosed in parentheses following the option property name. The parser that handles option files is quite simplistic, and will be tricked by any nested parentheses within the argument text itself; in this case, the entire option argument can be wrapped in curly braces within the parentheses to demarcate it, e.g.:
It is possible to specify several different languages for the same
option. Each language must have been declared by an earlier
Language record. See Option file format.
Negativeproperty of the option to be turned off.
As a consequence, if you have a group of mutually-exclusive
Negative properties should form a circular chain.
For example, if options -a, -b and
-c are mutually exclusive, their respective
properties should be ‘Negative(b)’, ‘Negative(c)’
Joinedindicates that the option and argument can be included in the same
argventry (as with
-mflush-func=name, for example).
Separateindicates that the option and argument can be separate
argventries (as with
-o). An option is allowed to have both of these properties.
argventry as the option itself.
This property cannot be used alongside
Separate, the message message will be used as an error message if the mandatory argument is missing; for options without
MissingArgError, a generic error message is used. message should contain a single ‘%qs’ format, which will be used to format the name of the option passed.
Separate, indicate that it takes n arguments. The default is 1.
UIntegershould also be used on options like
-falign-loops=n are supported to make sure the saved options are given a full integer.
Separate, the option only takes an argument in the compiler proper, not in the driver. This is for compatibility with existing options that are used both directly and via -Wp,; new options should not have this property.
global_options.x_var). The way that the state is stored depends on the type of option:
InverseMaskproperties, var is the integer variable that contains the mask.
UIntegerproperty, var is an integer variable that stores the value of the argument.
Enumproperty, var is a variable (type given in the
Typeproperty of the ‘Enum’ record whose
Nameproperty has the same argument as the
Enumproperty of this option) that stores the value of the argument.
Deferproperty, var is a pointer to a
VEC(cl_deferred_option,heap)that stores the option for later processing. (var is declared with type
void *and needs to be cast to
The option-processing script will usually zero-initialize var.
You can modify this behavior using
!set when the “no-” form is used.
var is declared in the same way as for the single-argument form
Varproperty should be statically initialized to value. If more than one option using the same variable specifies
Init, all must specify the same initializer.
target_flagsvariable (see Run-time Target) and is active when that bit is set. You may also specify
Varto select a variable other than
The options-processing script will automatically allocate a unique bit
for the option. If the option is attached to ‘target_flags’,
the script will set the macro
MASK_name to the appropriate
bitmask. It will also declare a
TARGET_name macro that has
the value 1 when the option is active and 0 otherwise. If you use
to attach the option to a different variable, the associated macros are
You can disable automatic bit allocation using
)property. If thisname is given, the options-processing script will declare a
TARGET_thisname macro that is 1 when the option is active and 0 otherwise.
Maskproperty already exists. No
TARGETdefinitions should be added to options.h in response to this option record.
The main purpose of this property is to support synonymous options.
The first option should use ‘Mask(name)’ and the others
should use ‘Mask(name) MaskExists’.
Var, for later processing.
NegativeAlias). In the first form, any argument passed to the alias is considered to be passed to -opt, and -opt is considered to be negated if the alias is used in negated form. In the second form, the alias may not be negated or have an argument, and posarg is considered to be passed as an argument to -opt. In the third form, the alias may not have an argument, if the alias is used in the positive form then posarg is considered to be passed to -opt, and if the alias is used in the negative form then negarg is considered to be passed to -opt.
Aliases should not specify
UInteger. Aliases should normally specify the same languages
as the target of the alias; the flags on the target will be used to
determine any diagnostic for use of an option for the wrong language,
while those on the alias will be used to identify what command-line
text is the option and what text is any argument to that option.
Alias definition is used for an option, driver specs do
not need to handle it and no ‘OPT_’ enumeration value is defined
for it; only the canonical form of the option will be seen in those
), the option is considered to be an alias for the positive form of -opt if negated and for the negative form of -opt if not negated.
NegativeAliasmay not be used with the forms of
Aliastaking more than one argument.
Warn. The option will not be seen by specs and no ‘OPT_’ enumeration value is defined for it.
Alias, the option only acts as an alias when passed a separate argument; with a joined argument it acts as a normal option, with an ‘OPT_’ enumeration value. This is for compatibility with the Java -d option and should not be used for new options.
Warn, the target of the alias must not also be marked
Varshould be saved and restored when the optimization level is changed with
cl_target_optionstructure to hold a copy of the option, add the functions
cl_target_option_restoreto save and restore the options.
gcc_optionsstruct to have a field
frontend_set_name, where name is the name of the field holding the value of this option (without the leading
x_). This gives the front end a way to indicate that the value has been set explicitly and should not be changed by the combined option. For example, some front ends use this to prevent -ffast-math and -fno-fast-math from changing the value of -fmath-errno for languages that do not use