------------------------------------------------------------------------------
-- --
-- GNAT COMPILER COMPONENTS --
-- --
-- O P T --
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-2017, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- ware Foundation; either version 3, or (at your option) any later ver- --
-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
-- As a special exception under Section 7 of GPL version 3, you are granted --
-- additional permissions described in the GCC Runtime Library Exception, --
-- version 3.1, as published by the Free Software Foundation. --
-- --
-- You should have received a copy of the GNU General Public License and --
-- a copy of the GCC Runtime Library Exception along with this program; --
-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
-- . --
-- --
-- GNAT was originally developed by the GNAT team at New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
-- This package contains global flags set by the initialization routine from
-- the command line and referenced throughout the compiler, the binder, or
-- other GNAT tools. The comments indicate which options are used by which
-- programs (GNAT, GNATBIND, GNATLINK, GNATMAKE, etc).
-- Some flags are labelled "PROJECT MANAGER". These are used by tools that
-- use the Project Manager. These tools include gnatmake, gnatname, the gnat
-- driver, gnatclean, gprbuild and gprclean.
with Hostparm; use Hostparm;
with Types; use Types;
pragma Warnings (Off);
-- This package is used also by gnatcoll
with System.Strings; use System.Strings;
with System.WCh_Con; use System.WCh_Con;
pragma Warnings (On);
package Opt is
----------------------
-- Checksum Control --
----------------------
-- Checksums are computed for sources to check for sources being the same
-- from a compilation point of view (e.g. spelling of identifiers and
-- white space layout do not count in this computation).
-- The way the checksum is computed has evolved across the various versions
-- of GNAT. When gprbuild is called with -m, the checksums must be computed
-- the same way in gprbuild as it was in the GNAT version of the compiler.
-- The different ways are
-- Version 6.4 and later:
-- The Accumulate_Token_Checksum procedure is called after each numeric
-- literal and each identifier/keyword. For keywords, Tok_Identifier is
-- used in the call to Accumulate_Token_Checksum.
-- Versions 5.04 to 6.3:
-- For keywords, the token value were used in the call to procedure
-- Accumulate_Token_Checksum. Type Token_Type did not include Tok_Some.
-- Versions 5.03:
-- For keywords, the token value were used in the call to
-- Accumulate_Token_Checksum. Type Token_Type did not include
-- Tok_Interface, Tok_Overriding, Tok_Synchronized and Tok_Some.
-- Versions 5.02 and before:
-- No calls to procedure Accumulate_Token_Checksum (the checksum
-- mechanism was introduced in version 5.03).
-- To signal to the scanner whether Accumulate_Token_Checksum needs to be
-- called and what versions to call, the following Boolean flags are used:
Checksum_Accumulate_Token_Checksum : Boolean := True;
-- GPRBUILD
-- Set to False by gprbuild when the version of GNAT is 5.02 or before. If
-- this switch is False, then we do not call Accumulate_Token_Checksum, so
-- the setting of the following two flags is irrelevant.
Checksum_GNAT_6_3 : Boolean := False;
-- GPRBUILD
-- Set to True by gprbuild when the version of GNAT is 6.3 or before.
Checksum_GNAT_5_03 : Boolean := False;
-- GPRBUILD
-- Set to True by gprbuild when the version of GNAT is 5.03 or before.
Checksum_Accumulate_Limited_Checksum : Boolean := False;
-- Used to control the computation of the limited view of a package.
-- (Not currently used, possible optimization for ALI files of units
-- in limited with_clauses).
----------------------------------------------
-- Settings of Modes for Current Processing --
----------------------------------------------
-- The following mode values represent the current state of processing.
-- The values set here are the default values. Unless otherwise noted,
-- the value may be reset in Switch-? with an appropriate switch. In
-- some cases, the values can also be modified by pragmas, and in the
-- case of some binder variables, Gnatbind.Scan_Bind_Arg may modify
-- the default values.
Latest_Ada_Only : Boolean := False;
-- If True, the only value valid for Ada_Version is Ada_Version_Type'Last,
-- trying to specify other values will be ignored (in case of pragma
-- Ada_xxx) or generate an error (in case of -gnat83/95/xx switches).
type Ada_Version_Type is (Ada_83, Ada_95, Ada_2005, Ada_2012, Ada_2020);
pragma Ordered (Ada_Version_Type);
-- Versions of Ada for Ada_Version below. Note that these are ordered,
-- so that tests like Ada_Version >= Ada_95 are legitimate and useful.
-- Think twice before using "="; Ada_Version >= Ada_2012 is more likely
-- what you want, because it will apply to future versions of the language.
Ada_Version_Default : constant Ada_Version_Type := Ada_2012;
pragma Warnings (Off, Ada_Version_Default);
-- GNAT
-- Default Ada version if no switch given. The Warnings off is to kill
-- constant condition warnings.
Ada_Version : Ada_Version_Type := Ada_Version_Default;
-- GNAT
-- Current Ada version for compiler, as set by configuration pragmas,
-- compiler switches, or implicitly (to Ada_Version_Runtime) when a
-- predefined or internal file is compiled.
Ada_Version_Pragma : Node_Id := Empty;
-- Reflects the Ada_xxx pragma that resulted in setting Ada_Version. Used
-- to specialize error messages complaining about the Ada version in use.
Ada_Version_Explicit : Ada_Version_Type := Ada_Version_Default;
-- GNAT
-- Like Ada_Version, but does not get set implicitly for predefined or
-- internal units, so it reflects the Ada version explicitly set using
-- configuration pragmas or compiler switches (or if neither appears, it
-- remains set to Ada_Version_Default). This is used in the rare cases
-- (notably pragma Obsolescent) where we want the explicit version set.
Ada_Version_Runtime : Ada_Version_Type := Ada_2012;
-- GNAT
-- Ada version used to compile the runtime. Used to set Ada_Version (but
-- not Ada_Version_Explicit) when compiling predefined or internal units.
Ada_Final_Suffix : constant String := "final";
Ada_Final_Name : String_Ptr := new String'("ada" & Ada_Final_Suffix);
-- GNATBIND
-- The name of the procedure that performs the finalization at the end of
-- execution. This variable may be modified by Gnatbind.Scan_Bind_Arg.
Ada_Init_Suffix : constant String := "init";
Ada_Init_Name : String_Ptr := new String'("ada" & Ada_Init_Suffix);
-- GNATBIND
-- The name of the procedure that performs initialization at the start
-- of execution. This variable may be modified by Gnatbind.Scan_Bind_Arg.
Ada_Main_Name_Suffix : constant String := "main";
-- GNATBIND
-- The suffix for Ada_Main_Name. Defined as a constant here so that it
-- can be referenced in a uniform manner to create either the default
-- value of Ada_Main_Name (declared below), or the non-default name
-- set by Gnatbind.Scan_Bind_Arg.
Ada_Main_Name : String_Ptr := new String'("ada_" & Ada_Main_Name_Suffix);
-- GNATBIND
-- The name of the Ada package generated by the binder (when in Ada mode).
-- This variable may be modified by Gnatbind.Scan_Bind_Arg.
Address_Clause_Overlay_Warnings : Boolean := True;
-- GNAT
-- Set False to disable address clause warnings. Modified by use of
-- -gnatwo/O.
Address_Is_Private : Boolean := False;
-- GNAT, GNATBIND
-- Set True if package System has the line "type Address is private;"
All_Errors_Mode : Boolean := False;
-- GNAT
-- Flag set to force display of multiple errors on a single line and
-- also repeated error messages for references to undefined identifiers
-- and certain other repeated error messages. Set by use of -gnatf.
Allow_Integer_Address : Boolean := False;
-- GNAT
-- Allow use of integer expression in a context requiring System.Address.
-- Set by the use of configuration pragma Allow_Integer_Address Also set
-- in relaxed semantics mode for use by CodePeer or when -gnatd.M is used.
All_Sources : Boolean := False;
-- GNATBIND
-- Set to True to require all source files to be present. This flag is
-- directly modified by gnatmake to affect the shared binder routines.
Alternate_Main_Name : String_Ptr := null;
-- GNATBIND
-- Set to non-null when Bind_Alternate_Main_Name is True. This value
-- is modified as needed by Gnatbind.Scan_Bind_Arg.
ASIS_GNSA_Mode : Boolean := False;
-- GNAT
-- Enable GNSA back-end processing assuming ASIS_Mode is already set to
-- True. ASIS_GNSA mode suppresses the call to gigi.
ASIS_Mode : Boolean := False;
-- GNAT
-- Enable semantic checks and tree transformations that are important
-- for ASIS but that are usually skipped if Operating_Mode is set to
-- Check_Semantics. This flag does not have the corresponding option to set
-- it ON. It is set ON when Tree_Output is set ON, it can also be set ON
-- from the code of GNSA-based tool (a client may need to set ON the
-- Back_Annotate_Rep_Info flag in this case. At the moment this does not
-- make very much sense, because GNSA cannot do back annotation).
Assertions_Enabled : Boolean := False;
-- GNAT
-- Indicates default policy (True = Check, False = Ignore) to be applied
-- to all assertion aspects and pragmas, and to pragma Debug, if there is
-- no overriding Assertion_Policy, Check_Policy, or Debug_Policy pragma.
-- Set True by use of -gnata.
Assume_No_Invalid_Values : Boolean := False;
-- GNAT Normally, in accordance with (RM 13.9.1 (9-11)) the front end
-- assumes that values could have invalid representations, unless it can
-- clearly prove that the values are valid. If this switch is set (by
-- pragma Assume_No_Invalid_Values (On)), then the compiler assumes values
-- are valid and in range of their representations. This feature is now
-- fully enabled in the compiler.
Back_Annotate_Rep_Info : Boolean := False;
-- GNAT
-- If set True, enables back annotation of representation information
-- by gigi, even in -gnatc mode. This is set True by the use of -gnatR
-- (list representation information) or -gnatt (generate tree). It is
-- also set true if certain Unchecked_Conversion instantiations require
-- checking based on annotated values.
Back_End_Handles_Limited_Types : Boolean;
-- This flag is set true if the back end can properly handle limited or
-- other by reference types, and avoid copies. If this flag is False, then
-- the front end does special expansion for if/case expressions to make
-- sure that no copy occurs. If the flag is True, then the expansion for
-- if and case expressions relies on the back end properly handling things.
-- Currently the default is False for all cases (set in gnat1drv). The
-- default can be modified using -gnatd.L (sets the flag True). This is
-- used to test the possibility of having the backend handle this.
Back_End_Inlining : Boolean := False;
-- GNAT
-- Set True to activate inlining by back-end expansion. This is the normal
-- default mode for gcc targets, so it is True on such targets unless the
-- switches -gnatN or -gnatd.z are used. See circuitry in gnat1drv for the
-- exact conditions for setting this switch.
Bind_Alternate_Main_Name : Boolean := False;
-- GNATBIND
-- True if main should be called Alternate_Main_Name.all.
-- This variable may be set to True by Gnatbind.Scan_Bind_Arg.
Bind_Main_Program : Boolean := True;
-- GNATBIND
-- Set to False if not binding main Ada program
Bind_For_Library : Boolean := False;
-- GNATBIND
-- Set to True if the binder needs to generate a file designed for building
-- a library. May be set to True by Gnatbind.Scan_Bind_Arg.
Bind_Only : Boolean := False;
-- GNATMAKE, GPRBUILD
-- Set to True to skip compile and link steps
-- (except when Compile_Only and/or Link_Only are True).
Blank_Deleted_Lines : Boolean := False;
-- GNAT, GNATPREP
-- Output empty lines for each line of preprocessed input that is deleted
-- in the output, including preprocessor lines starting with a '#'.
Brief_Output : Boolean := False;
-- GNAT, GNATBIND
-- Force brief error messages to standard error, even if verbose mode is
-- set (so that main error messages go to standard output).
Build_Bind_And_Link_Full_Project : Boolean := False;
-- GNATMAKE
-- Set to True to build, bind and link all the sources of a project file
-- (switch -B)
Check_Aliasing_Of_Parameters : Boolean := False;
-- GNAT
-- Set to True to detect whether subprogram parameters and function results
-- alias the same object(s).
Check_Float_Overflow : Boolean := False;
-- GNAT
-- Set to True to check that operations on predefined unconstrained float
-- types (e.g. Float, Long_Float) do not overflow and generate infinities
-- or invalid values. Set by the Check_Float_Overflow pragma, or by use
-- of the -gnateF switch.
Check_Object_Consistency : Boolean := False;
-- GNATBIND, GNATMAKE
-- Set to True to check whether every object file is consistent with its
-- corresponding ada library information (ALI) file. An object file is
-- inconsistent with the corresponding ALI file if the object file does
-- not exist or if it has an older time stamp than the ALI file. Default
-- above is for GNATBIND. GNATMAKE overrides this default to True (see
-- Make.Initialize) since we normally do need to check source consistencies
-- in gnatmake.
Check_Only : Boolean := False;
-- GNATBIND
-- Set to True to do checks only, no output of binder file
Check_Policy_List : Node_Id := Empty;
-- GNAT
-- This points to the list of N_Pragma nodes for Check_Policy pragmas
-- that are linked through the Next_Pragma fields, with the list being
-- terminated by Empty. The order is most recently processed first. Note
-- that Push_Scope and Pop_Scope in Sem_Ch8 save and restore the value
-- of this variable, implementing the required scope control for pragmas
-- appearing in a declarative part.
Check_Readonly_Files : Boolean := False;
-- GNATMAKE
-- Set to True to check readonly files during the make process
Check_Source_Files : Boolean := True;
-- GNATBIND, GNATMAKE
-- Set to True to enable consistency checking for any source files that
-- are present (i.e. date must match the date in the library info file).
-- Set to False for object file consistency check only. This flag is
-- directly modified by gnatmake, to affect the shared binder routines.
Check_Switches : Boolean := False;
-- GNATMAKE, GPBUILD
-- Set to True to check compiler options during the make process
Check_Unreferenced : Boolean := False;
-- GNAT
-- Set to True to enable checking for unreferenced entities other
-- than formal parameters (for which see Check_Unreferenced_Formals)
-- Modified by use of -gnatwu/U.
Check_Unreferenced_Formals : Boolean := False;
-- GNAT
-- Set to True to check for unreferenced formals. This is turned on by
-- -gnatwa/wf/wu and turned off by -gnatwA/wF/wU.
Check_Validity_Of_Parameters : Boolean := False;
-- GNAT
-- Set to True to check for proper scalar initialization of subprogram
-- parameters on both entry and exit. This is turned on by -gnateV.
Check_Withs : Boolean := False;
-- GNAT
-- Set to True to enable checking for unused withs, and also the case
-- of withing a package and using none of the entities in the package.
-- Modified by use of -gnatwu/U.
CodePeer_Mode : Boolean := False;
-- GNAT, GNATBIND, GPRBUILD
-- Enable full CodePeer mode (SCIL generation, disable switches that
-- interact badly with it, etc...). This is turned on by -gnatC.
Commands_To_Stdout : Boolean := False;
-- GNATMAKE
-- True if echoed commands to be written to stdout instead of stderr
Comment_Deleted_Lines : Boolean := False;
-- GNATPREP
-- True if source lines removed by the preprocessor should be commented
-- in the output file.
Compilation_Time : String (1 .. 19);
-- GNAT
-- Compilation date and time in form YYYY-MM-DD HH:MM:SS
Compile_Only : Boolean := False;
-- GNATMAKE, GNATCLEAN, GPBUILD, GPRCLEAN
-- GNATMAKE, GPRBUILD:
-- set True to skip bind and link steps (except when Bind_Only is True)
-- GNATCLEAN, GPRCLEAN:
-- set True to delete only the files produced by the compiler but not the
-- library files or the executable files.
Compiler_Unit : Boolean := False;
-- GNAT1
-- Set True by an occurrence of pragma Compiler_Unit_Warning (or of the
-- obsolete pragma Compiler_Unit) in the main unit. Once set True, stays
-- True, since any units that are with'ed directly or indirectly by
-- a Compiler_Unit_Warning main unit are subject to the same restrictions.
-- Such units really should have their own pragmas, but we do not bother to
-- check for that, so this transitivity provides extra checking.
Config_File : Boolean := True;
-- GNAT
-- Set to False to inhibit reading and processing of gnat.adc file
Config_File_Names : String_List_Access := null;
-- GNAT
-- Names of configuration pragmas files (given by switches -gnatec)
Configurable_Run_Time_Mode : Boolean := False;
-- GNAT, GNATBIND
-- Set True if the compiler is operating in configurable run-time mode.
-- This happens if the flag Targparm.Configurable_Run_TimeMode_On_Target
-- is set True, or if pragma No_Run_Time is used. See the spec of Rtsfind
-- for details on the handling of the latter pragma.
Constant_Condition_Warnings : Boolean := False;
-- GNAT
-- Set to True to activate warnings on constant conditions. Modified by
-- use of -gnatwc/C.
Create_Mapping_File : Boolean := False;
-- GNATMAKE
-- Set to True (-C switch) to indicate that the compiler will be invoked
-- with a mapping file (-gnatem compiler switch).
subtype Debug_Level_Value is Nat range 0 .. 3;
Debugger_Level : Debug_Level_Value := 0;
-- GNAT, GNATBIND
-- The value given to the -g parameter. The default value for -g with
-- no value is 2. If no -g is specified, defaults to 0.
-- Note that the generated code should never depend on this variable,
-- since we want debug info to be nonintrusive on the generate code.
Default_Exit_Status : Int := 0;
-- GNATBIND
-- Set the default exit status value. Set by the -Xnnn switch for the
-- binder.
Debug_Generated_Code : Boolean := False;
-- GNAT
-- Set True (-gnatD switch) to debug generated expanded code instead
-- of the original source code. Causes debugging information to be
-- written with respect to the generated code file that is written.
Default_Pool : Node_Id := Empty;
-- GNAT
-- Used to record the storage pool name (or null literal) that is the
-- argument of an applicable pragma Default_Storage_Pool.
-- Empty: No pragma Default_Storage_Pool applies.
-- N_Null node: "pragma Default_Storage_Pool (null);" applies.
-- otherwise: "pragma Default_Storage_Pool (X);" applies, and
-- this points to the name X.
-- Push_Scope and Pop_Scope in Sem_Ch8 save and restore this value.
Default_Stack_Size : Int := -1;
-- GNATBIND
-- Set to default primary stack size in units of bytes. Set by
-- the -dnnn switch for the binder. A value of -1 indicates that no
-- default was set by the binder.
Default_Sec_Stack_Size : Int := -1;
-- GNATBIND
-- Set to default secondary stack size in units of bytes. Set by
-- the -Dnnn switch for the binder. A value of -1 indicates that no
-- default was set by the binder, and that the default should be the
-- initial value of System.Secondary_Stack.Default_Secondary_Stack_Size.
Default_SSO : Character := ' ';
-- GNAT
-- Set if a pragma Default_Scalar_Storage_Order has been given. The value
-- of ' ' indicates that no default has been set, otherwise the value is
-- either 'H' for High_Order_First or 'L' for Lower_Order_First.
Detect_Blocking : Boolean := False;
-- GNAT
-- Set True to force the run time to raise Program_Error if calls to
-- potentially blocking operations are detected from protected actions.
Directories_Must_Exist_In_Projects : Boolean := True;
-- PROJECT MANAGER
-- Set to False with switch -f of gnatclean and gprclean
Display_Compilation_Progress : Boolean := False;
-- GNATMAKE, GPRBUILD
-- Set True (-d switch) to display information on progress while compiling
-- files. Internal flag to be used in conjunction with an IDE (e.g GPS).
type Distribution_Stub_Mode_Type is
-- GNAT
(No_Stubs,
-- Normal mode, no generation/compilation of distribution stubs
Generate_Receiver_Stub_Body,
-- The unit being compiled is the RCI body, and the compiler will
-- generate the body for the receiver stubs and compile it.
Generate_Caller_Stub_Body);
-- The unit being compiled is the RCI spec, and the compiler will
-- generate the body for the caller stubs and compile it.
Distribution_Stub_Mode : Distribution_Stub_Mode_Type := No_Stubs;
-- GNAT
-- This enumeration variable indicates the five states of distribution
-- annex stub generation/compilation.
Do_Not_Execute : Boolean := False;
-- GNATMAKE
-- Set to True if no actual compilations should be undertaken
Dump_Source_Text : Boolean := False;
-- GNAT
-- Set to True (by -gnatL) to dump source text intermingled with generated
-- code. Effective only if either of Debug/Print_Generated_Code is true.
Dynamic_Elaboration_Checks : Boolean := False;
-- GNAT
-- Set True for dynamic elaboration checking mode, as set by the -gnatE
-- switch or by the use of pragma Elaboration_Checks (Dynamic).
Dynamic_Stack_Measurement : Boolean := False;
-- GNATBIND
-- Set True to enable dynamic stack measurement (-u flag for gnatbind)
Dynamic_Stack_Measurement_Array_Size : Nat := 100;
-- GNATBIND
-- Number of measurements we want to store during dynamic stack analysis.
-- When the buffer is full, non-storable results will be output on the fly.
-- The value is relevant only if Dynamic_Stack_Measurement is set. Set
-- by processing of -u flag for gnatbind.
Elab_Dependency_Output : Boolean := False;
-- GNATBIND
-- Set to True to output complete list of elaboration constraints
Elab_Order_Output : Boolean := False;
-- GNATBIND
-- Set to True to output chosen elaboration order
Elab_Info_Messages : Boolean := False;
-- GNAT
-- Set to True to output info messages for static elabmodel (-gnatel)
Elab_Warnings : Boolean := False;
-- GNAT
-- Set to True to generate elaboration warnings (-gnatwl)
Error_Msg_Line_Length : Nat := 0;
-- GNAT
-- Records the error message line length limit. If this is set to zero,
-- then we get the old style behavior, in which each call to the error
-- message routines generates one line of output as a separate message.
-- If it is set to a non-zero value, then continuation lines are folded
-- to make a single long message, and then this message is split up into
-- multiple lines not exceeding the specified length. Set by -gnatj=nn.
Error_To_Warning : Boolean := False;
-- GNAT
-- If True, then certain error messages (e.g. parameter overlap messages
-- for procedure calls in Ada 2012 mode) are treated as warnings instead
-- of errors. Set by debug flag -gnatd.E. A search for Error_To_Warning
-- will identify affected messages.
Exception_Handler_Encountered : Boolean := False;
-- GNAT
-- This flag is set true if the parser encounters an exception handler.
-- It is used to set Warn_On_Exception_Propagation True if the restriction
-- No_Exception_Propagation is set.
Exception_Extra_Info : Boolean := False;
-- GNAT
-- True when switch -gnateE is used. When True, generate extra information
-- associated with exception messages (in particular range and index
-- checks).
Exception_Locations_Suppressed : Boolean := False;
-- GNAT
-- Set to True if a Suppress_Exception_Locations configuration pragma is
-- currently active.
type Exception_Mechanism_Type is
-- Determines the kind of mechanism used to handle exceptions
--
(Front_End_SJLJ,
-- Exceptions use setjmp/longjmp generated explicitly by the front end
-- (this includes gigi or other equivalent parts of the code generator).
-- AT END handlers are converted into exception handlers by the front
-- end in this mode.
Back_End_ZCX,
-- Exceptions are handled by the back end. The front end simply
-- generates the handlers as they appear in the source, and AT END
-- handlers are left untouched (they are not converted into exception
-- handlers when operating in this mode). Propagation is performed
-- using a frame unwinding scheme and requires no particular setup code
-- at handler sites on regular execution paths.
Back_End_SJLJ);
-- Similar to Back_End_ZCX with respect to the front-end processing
-- of regular and AT-END handlers. A setjmp/longjmp scheme is used to
-- propagate and setup handler contexts on regular execution paths.
pragma Convention (C, Exception_Mechanism_Type);
Exception_Mechanism : Exception_Mechanism_Type := Front_End_SJLJ;
-- GNAT
-- Set to the appropriate value depending on the flags in system.ads
-- (Frontend_Exceptions + ZCX_By_Default). The C convention is there to
-- allow access by gigi.
function Back_End_Exceptions return Boolean;
function Front_End_Exceptions return Boolean;
function ZCX_Exceptions return Boolean;
function SJLJ_Exceptions return Boolean;
-- GNAT
-- Various properties of the active Exception_Mechanism
Exception_Tracebacks : Boolean := False;
-- GNATBIND
-- Set to True to store tracebacks in exception occurrences (-Ea or -E)
Exception_Tracebacks_Symbolic : Boolean := False;
-- GNATBIND
-- Set to True to store tracebacks in exception occurrences and enable
-- symbolic tracebacks (-Es).
Extensions_Allowed : Boolean := False;
-- GNAT
-- Set to True by switch -gnatX if GNAT specific language extensions
-- are allowed. Currently there are no such defined extensions.
type External_Casing_Type is (
As_Is, -- External names cased as they appear in the Ada source
Uppercase, -- External names forced to all uppercase letters
Lowercase); -- External names forced to all lowercase letters
External_Name_Imp_Casing : External_Casing_Type := Lowercase;
-- GNAT
-- The setting of this flag determines the casing of external names
-- when the name is implicitly derived from an entity name (i.e. either
-- no explicit External_Name or Link_Name argument is used, or, in the
-- case of extended DEC pragmas, the external name is given using an
-- identifier. The As_Is setting is not permitted here (since this would
-- create Ada source programs that were case sensitive).
External_Name_Exp_Casing : External_Casing_Type := As_Is;
-- GNAT
-- The setting of this flag determines the casing of an external name
-- specified explicitly with a string literal. As_Is means the string
-- literal is used as given with no modification to the casing. If
-- Lowercase or Uppercase is set, then the string is forced to all
-- lowercase or all uppercase letters as appropriate. Note that this
-- setting has no effect if the external name is given using an identifier
-- in the case of extended DEC import/export pragmas (in this case the
-- casing is controlled by External_Name_Imp_Casing), and also has no
-- effect if an explicit Link_Name is supplied (a link name is always
-- used exactly as given).
External_Unit_Compilation_Allowed : Boolean := False;
-- GNATMAKE
-- When True (set by gnatmake switch -x), allow compilation of sources
-- that are not part of any project file.
Fast_Math : Boolean := False;
-- GNAT
-- Indicates the current setting of Fast_Math mode, as set by the use
-- of a Fast_Math pragma (set True by Fast_Math (On)).
Force_ALI_Tree_File : Boolean := False;
-- GNAT
-- Force generation of ALI file even if errors are encountered. Also forces
-- generation of tree file if -gnatt is also set. Set on by use of -gnatQ.
Disable_ALI_File : Boolean := False;
-- GNAT
-- Disable generation of ALI file
Follow_Links_For_Files : Boolean := False;
-- PROJECT MANAGER
-- Set to True (-eL) to process the project files in trusted mode. If
-- Follow_Links is False, it is assumed that the project doesn't contain
-- any file duplicated through symbolic links (although the latter are
-- still valid if they point to a file which is outside of the project),
-- and that no directory has a name which is a valid source name.
Follow_Links_For_Dirs : Boolean := False;
-- PROJECT MANAGER
-- Set to True if directories can be links in this project, and therefore
-- additional system calls must be performed to ensure that we always see
-- the same full name for each directory.
Force_Checking_Of_Elaboration_Flags : Boolean := False;
-- GNATBIND
-- True if binding with forced checking of the elaboration flags
-- (-F switch set).
Force_Compilations : Boolean := False;
-- GNATMAKE, GPRBUILD
-- Set to force recompilations even when the objects are up-to-date.
Force_Elab_Order_File : String_Ptr := null;
-- GNATBIND
-- File name specified for -f switch (the forced elaboration order file)
Front_End_Inlining : Boolean := False;
-- GNAT
-- Set True to activate inlining by front-end expansion (even on GCC
-- targets, where inlining is normally handled by the back end). Set by
-- the flag -gnatN (which is now considered obsolescent, since the GCC
-- back end can do a better job of inlining than the front end these days.
Full_Path_Name_For_Brief_Errors : Boolean := False;
-- PROJECT MANAGER
-- When True, in Brief_Output mode, each error message line will start with
-- the full path name of the source. When False, only the file name without
-- directory information is used.
Full_List : Boolean := False;
-- GNAT
-- Set True to generate full source listing with embedded errors
Full_List_File_Name : String_Ptr := null;
-- GNAT
-- Set to file name to generate full source listing to named file (or if
-- the name is of the form .xxx, then to name.xxx where name is the source
-- file name with extension stripped.
Generate_C_Code : Boolean := False;
-- GNAT
-- If True, the Cprint circuitry to generate C code output is activated.
-- Set True by use of -gnateg or -gnatd.V.
Generate_CodePeer_Messages : Boolean := False;
-- GNAT
-- Generate CodePeer messages. Ignored if CodePeer_Mode is false. This is
-- turned on by -gnateC.
Generate_Processed_File : Boolean := False;
-- GNAT
-- True when switch -gnateG is used. When True, create in a file
--