-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2019, 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- --
-- 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, GPRMAKE, etc).
+-- 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
-- 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 --
----------------------------------------------
-- case of some binder variables, Gnatbind.Scan_Bind_Arg may modify
-- the default values.
- type Ada_Version_Type is (Ada_83, Ada_95, Ada_2005, Ada_2012);
+ 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.
-- GNAT, GNATBIND
-- Set True if package System has the line "type Address is private;"
+ Aggregate_Individually_Assign : Boolean := False;
+ -- GNAT
+ -- Set True if record aggregates are to be always converted into assignment
+ -- statements. Set through the corresponding pragma.
+
All_Errors_Mode : Boolean := False;
-- GNAT
-- Flag set to force display of multiple errors on a single line and
Alternate_Main_Name : String_Ptr := null;
-- GNATBIND
- -- Set to non null when Bind_Alternate_Main_Name is True. This value
+ -- 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
Back_End_Inlining : Boolean := False;
-- GNAT
- -- Set True to activate inlining by back-end expansion
+ -- 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
-- a library. May be set to True by Gnatbind.Scan_Bind_Arg.
Bind_Only : Boolean := False;
- -- GNATMAKE, GPRMAKE, GPRBUILD
+ -- GNATMAKE, GPRBUILD
-- Set to True to skip compile and link steps
-- (except when Compile_Only and/or Link_Only are True).
-- directly modified by gnatmake, to affect the shared binder routines.
Check_Switches : Boolean := False;
- -- GNATMAKE, GPRMAKE, GPBUILD
+ -- GNATMAKE, GPBUILD
-- Set to True to check compiler options during the make process
Check_Unreferenced : Boolean := False;
Check_Validity_Of_Parameters : Boolean := False;
-- GNAT
-- Set to True to check for proper scalar initialization of subprogram
- -- parameters on both entry and exit. Turned on by??? turned off by???
+ -- parameters on both entry and exit. This is turned on by -gnateV.
Check_Withs : Boolean := False;
-- GNAT
-- Compilation date and time in form YYYY-MM-DD HH:MM:SS
Compile_Only : Boolean := False;
- -- GNATMAKE, GNATCLEAN, GPRMAKE, GPBUILD, GPRCLEAN
- -- GNATMAKE, GPRMAKE, GPRMAKE:
+ -- 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
-- use of -gnatwc/C.
Create_Mapping_File : Boolean := False;
- -- GNATMAKE, GPRMAKE
+ -- 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. This is not currently used but is retained for possible
- -- future use.
+ -- 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
-- 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;
+
+ No_Stack_Size : constant := -1;
+
+ Default_Stack_Size : Int := No_Stack_Size;
-- 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.
+ -- Set to default primary stack size in units of bytes. Set by the -dnnn
+ -- switch for the binder. A value of No_Stack_Size indicates that
+ -- no default was set by the binder.
- Default_Sec_Stack_Size : Int := -1;
+ Default_Sec_Stack_Size : Int := No_Stack_Size;
-- 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.
+ -- Set to default secondary stack size in units of bytes. Set by the -Dnnn
+ -- switch for the binder. A value of No_Stack_Size indicates that no
+ -- default was set by the binder and the run-time value should be used
+ -- instead.
Default_SSO : Character := ' ';
-- GNAT
-- Set to False with switch -f of gnatclean and gprclean
Display_Compilation_Progress : Boolean := False;
- -- GNATMAKE, GPRMAKE, GPRBUILD
+ -- 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
+ -- Normal mode, no generation of distribution stubs
Generate_Receiver_Stub_Body,
-- The unit being compiled is the RCI body, and the compiler will
Distribution_Stub_Mode : Distribution_Stub_Mode_Type := No_Stubs;
-- GNAT
- -- This enumeration variable indicates the five states of distribution
- -- annex stub generation/compilation.
+ -- This enumeration variable indicates the three states of distribution
+ -- annex stub generation.
Do_Not_Execute : Boolean := False;
-- GNATMAKE
-- GNAT
-- Set to True to output info messages for static elabmodel (-gnatel)
- Elab_Warnings : Boolean := False;
+ Elab_Warnings : Boolean := True;
-- GNAT
- -- Set to True to generate elaboration warnings (-gnatwl)
+ -- Set to True to generate elaboration warnings (-gnatwl). The warnings are
+ -- enabled by default because they carry the same importance as errors. The
+ -- compiler cannot emit actual errors because elaboration diagnostics need
+ -- dataflow analysis, which is not available. This behavior parallels that
+ -- of the old ABE mechanism.
Error_Msg_Line_Length : Nat := 0;
-- GNAT
-- currently active.
type Exception_Mechanism_Type is
- -- Determines the handling of exceptions. See Exp_Ch11 for details
+ -- Determines the kind of mechanism used to handle exceptions
--
- (Front_End_Setjmp_Longjmp_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_Exceptions);
+ 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.
+ -- 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_Setjmp_Longjmp_Exceptions;
+ Exception_Mechanism : Exception_Mechanism_Type := Front_End_SJLJ;
-- GNAT
- -- Set to the appropriate value depending on the default as given in
- -- system.ads (ZCX_By_Default). The C convention is there to make this
- -- variable accessible to gigi.
+ -- 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 (-E)
+ -- 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).
+
+ Expand_Nonbinary_Modular_Ops : Boolean := False;
+ -- Set to True to convert nonbinary modular additions into code
+ -- that relies on the front-end expansion of operator Mod.
Extensions_Allowed : Boolean := False;
-- GNAT
-- 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, GPRMAKE, GPRBUILD
+ -- 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.
+ -- 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
-- 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, GNATBIND
+ -- If True, the Cprint circuitry to generate C code output is activated.
+ -- Set True by use of -gnateg or -gnatd.V for GNAT, and -G for GNATBIND.
+
Generate_CodePeer_Messages : Boolean := False;
-- GNAT
- -- Generate CodePeer messages. Ignored if CodePeer_Mode is false.
- -- This is turned on by -gnateC.
+ -- 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
-- <source>.prep, if the source is preprocessed.
+ Generate_SCIL : Boolean := False;
+ -- GNAT
+ -- Set True to activate SCIL code generation.
+
Generate_SCO : Boolean := False;
-- GNAT
-- True when switch -fdump-scos (or -gnateS) is used. When True, Source
Generate_SCO_Instance_Table : Boolean := False;
-- GNAT
- -- True when switch -fdebug-instances is used. When True, a table of
- -- instances is included in SCOs.
+ -- True when switch -fdump-scos is used. When True, a table of instances is
+ -- included in SCOs.
Generating_Code : Boolean := False;
-- GNAT
-- True if the frontend finished its work and has called the backend to
-- process the tree and generate the object file.
+ type Ghost_Mode_Type is (None, Check, Ignore);
+ -- Possible legal modes that can be set by aspect/pragma Ghost as well as
+ -- value None, which indicates that no such aspect/pragma applies.
+
+ Ghost_Mode : Ghost_Mode_Type := None;
+ -- GNAT
+ -- The current Ghost mode in effect
+
Global_Discard_Names : Boolean := False;
-- GNAT, GNATBIND
-- True if a pragma Discard_Names appeared as a configuration pragma for
-- the current compilation unit.
- GNAT_Mode : Boolean := False;
- -- GNAT
- -- True if compiling in GNAT system mode (-gnatg switch)
+ GNAT_Encodings : Int;
+ pragma Import (C, GNAT_Encodings, "gnat_encodings");
+ -- Constant controlling the balance between GNAT encodings and standard
+ -- DWARF to emit in the debug information. It accepts the following values.
+
+ DWARF_GNAT_Encodings_All : constant Int := 0;
+ DWARF_GNAT_Encodings_GDB : constant Int := 1;
+ DWARF_GNAT_Encodings_Minimal : constant Int := 2;
Identifier_Character_Set : Character;
-- GNAT
-- code from foreign compilers for checking or ASIS purposes. Can be
-- set True by use of -gnatI.
+ Ignore_SPARK_Mode_Pragmas_In_Instance : Boolean := False;
+ -- GNAT
+ -- Set True to ignore the semantics and effects of pragma SPARK_Mode when
+ -- the pragma appears inside an instance whose enclosing context is subject
+ -- to SPARK_Mode "off". This property applies to nested instances.
+
Ignore_Style_Checks_Pragmas : Boolean := False;
-- GNAT
-- Set True to ignore all Style_Checks pragmas. Can be set True by use
Ignore_Unrecognized_VWY_Switches : Boolean := False;
-- GNAT
- -- Set True to ignore unrecognized y, V, w switches. Can be set True
- -- by use of -gnateu, causing subsequent unrecognized switches to result
- -- in a warning rather than an error.
+ -- Set True to ignore unrecognized y, V, w switches. Can be set True by
+ -- use of -gnateu, causing subsequent unrecognized switches to result in
+ -- a warning rather than an error.
+
+ Ignored_Ghost_Region : Node_Id := Empty;
+ -- GNAT
+ -- The start of the current ignored Ghost region. This value must always
+ -- reflect the starting node of the outermost ignored Ghost region. If a
+ -- nested ignored Ghost region is entered, the value must remain unchanged.
Implementation_Unit_Warnings : Boolean := True;
-- GNAT
-- cause implicit packing instead of generating an error message. Set by
-- use of pragma Implicit_Packing.
+ Include_Subprogram_In_Messages : Boolean := False;
+ -- GNAT
+ -- Set True to include the enclosing subprogram in compiler messages.
+
Ineffective_Inline_Warnings : Boolean := False;
-- GNAT
-- Set True to activate warnings if front-end inlining (-gnatN) is not able
-- be inlined in GNATprove mode.
Init_Or_Norm_Scalars : Boolean := False;
- -- GNAT, GANTBIND
+ -- GNAT, GNATBIND
-- Set True if a pragma Initialize_Scalars applies to the current unit.
-- Also set True if a pragma Restriction (Normalize_Scalars) applies.
-- then elaboration flag checks are to be generated in the binder
-- generated file.
- Generate_SCIL : Boolean := False;
- -- GNAT
- -- Set True to activate SCIL code generation.
-
Invalid_Value_Used : Boolean := False;
-- GNAT
-- Set True if a valid Invalid_Value attribute is encountered
- 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.
-
- Front_End_Inlining : Boolean := False;
- -- GNAT
- -- Set True to activate inlining by front-end expansion
-
Inline_Processing_Required : Boolean := False;
-- GNAT
-- Set True if inline processing is required. Inline processing is required
-- if not.
Keep_Going : Boolean := False;
- -- GNATMAKE, GPRMAKE, GPRBUILD
+ -- GNATMAKE, GPRBUILD
-- When True signals to ignore compilation errors and keep processing
-- sources until there is no more work.
Keep_Temporary_Files : Boolean := False;
- -- GNATCMD
- -- When True the temporary files created by the GNAT driver are not
- -- deleted. Set by switch -dn or qualifier /KEEP_TEMPORARY_FILES.
+ -- GNATCMD, GNATMAKE, GPRBUILD
+ -- When True the temporary files are not deleted. Set by switches -dn or
+ -- --keep-temp-files.
Leap_Seconds_Support : Boolean := False;
-- GNATBIND
-- Set to True to enable leap seconds support in Ada.Calendar and its
-- children.
+ Legacy_Elaboration_Checks : Boolean := False;
+ -- GNAT
+ -- Set to True when the pre-18.x access-before-elaboration model is to be
+ -- used. Modified by use of -gnatH.
+
+ Legacy_Elaboration_Order : Boolean := False;
+ -- GNATBIND
+ -- Set to True when the pre-20.x elaboration-order model is to be used.
+ -- Modified by use of -H.
+
Link_Only : Boolean := False;
- -- GNATMAKE, GPRMAKE, GPRBUILD
+ -- GNATMAKE, GPRBUILD
-- Set to True to skip compile and bind steps (except when Bind_Only is
-- set to True).
List_Dependencies : Boolean := False;
-- GNATMAKE
- -- When True gnatmake verifies that the objects are up to date and
- -- outputs the list of object dependencies (-M switch).
- -- Output depends if -a switch is used or not.
- -- This list can be used directly in a Makefile.
+ -- When True gnatmake verifies that the objects are up to date and outputs
+ -- the list of object dependencies (-M switch). Output depends if -a switch
+ -- is used or not. This list can be used directly in a Makefile.
- List_Representation_Info : Int range 0 .. 3 := 0;
+ List_Representation_Info : Int range 0 .. 4 := 0;
-- GNAT
-- Set non-zero by -gnatR switch to list representation information.
-- The settings are as follows:
--
-- 0 = no listing of representation information (default as above)
- -- 1 = list rep info for user defined record and array types
- -- 2 = list rep info for all user defined types and objects
+ -- 1 = list rep info for user-defined record and array types
+ -- 2 = list rep info for all user-defined types and objects
-- 3 = like 2, but variable fields are decoded symbolically
+ -- 4 = like 3, but list rep info for relevant compiler-generated types
List_Representation_Info_To_File : Boolean := False;
-- GNAT
- -- Set true by -gnatRs switch. Causes information from -gnatR/1/2/3/m to be
+ -- Set true by -gnatRs switch. Causes information from -gnatR[1-4]m to be
-- written to file.rep (where file is the name of the source file) instead
-- of stdout. For example, if file x.adb is compiled using -gnatR2s then
-- representation info is written to x.adb.ref.
+ List_Representation_Info_To_JSON : Boolean := False;
+ -- GNAT
+ -- Set true by -gnatRj switch. Causes information from -gnatR[1-4]m to be
+ -- output in the JSON data interchange format.
+
List_Representation_Info_Mechanisms : Boolean := False;
-- GNAT
-- Set true by -gnatRm switch. Causes information on mechanisms to be
-- included in the representation output information.
+ List_Representation_Info_Extended : Boolean := False;
+ -- GNAT
+ -- Set true by -gnatRe switch. Causes extended information for record types
+ -- to be included in the representation output information.
+
List_Preprocessing_Symbols : Boolean := False;
-- GNAT, GNATPREP
-- Set to True if symbols for preprocessing a source are to be listed
Locking_Policy : Character := ' ';
-- GNAT, GNATBIND
- -- Set to ' ' for the default case (no locking policy specified). Reset to
- -- first character (uppercase) of locking policy name if a valid pragma
- -- Locking_Policy is encountered.
+
+ -- Set to ' ' for the default case (no locking policy specified). Otherwise
+ -- set based on the pragma Locking_Policy:
+ -- Ceiling_Locking: 'C'
+ -- Concurrent_Readers_Locking: 'R'
+ -- Inheritance_Locking: 'I'
Locking_Policy_Sloc : Source_Ptr := No_Location;
-- GNAT, GNATBIND
-- specially concocted test cases. Can be modified by -gnateinn switch.
Maximum_Processes : Positive := 1;
- -- GNATMAKE, GPRMAKE, GPRBUILD
+ -- GNATMAKE, GPRBUILD
-- Maximum number of processes that should be spawned to carry out
-- compilations.
+ Minimal_Binder : Boolean := False;
+ -- GNATBIND
+ -- Set to True to suppress the generation of objects by the binder that
+ -- are not strictly required for a program to run. Intended for ZFP
+ -- applications that have tight memory constraints.
+
Minimal_Recompilation : Boolean := False;
-- GNATMAKE
-- Set to True if minimal recompilation mode requested
+ Minimize_Expression_With_Actions : Boolean := False;
+ -- GNAT
+ -- If True, minimize the use of N_Expression_With_Actions node.
+ -- This can be used in particular on some back-ends where this node is
+ -- difficult to support.
+
Modify_Tree_For_C : Boolean := False;
-- GNAT
-- If this switch is set True (currently it is set only by -gnatd.V), then
-- GNATNAME
-- Do not create backup copies of project files. Set by switch --no-backup.
+ No_Component_Reordering : Boolean := False;
+ -- GNAT
+ -- Set True if pragma No_Component_Reordering with no parameter encountered
+
No_Deletion : Boolean := False;
-- GNATPREP
-- Set by preprocessor switch -a. Do not eliminate any source text. Implies
-- Undefined_Symbols_Are_False. Useful to perform a syntax check on all
-- branches of #if constructs.
+ No_Elab_Code_All_Pragma : Node_Id := Empty;
+ -- Set to point to a No_Elaboration_Code_All pragma or aspect encountered
+ -- in the spec of the extended main unit. Used to determine if we need to
+ -- do special tests for violation of this aspect.
+
+ No_Heap_Finalization_Pragma : Node_Id := Empty;
+ -- GNAT
+ -- Set to point to a No_Heap_Finalization pragma defined in a configuration
+ -- file.
+
No_Main_Subprogram : Boolean := False;
-- GNATMAKE, GNATBIND
-- Set to True if compilation/binding of a program without main
No_Run_Time_Mode : Boolean := False;
-- GNAT, GNATBIND
- -- This flag is set True if a No_Run_Time pragma is encountered. See
- -- spec of Rtsfind for a full description of handling of this pragma.
+ -- This flag is set True if a No_Run_Time pragma is encountered. See spec
+ -- of Rtsfind for a full description of handling of this pragma.
No_Split_Units : Boolean := False;
-- GPRBUILD
-- GNAT
-- Set True if pragma No_Strict_Aliasing with no parameters encountered.
+ No_Tagged_Streams : Node_Id := Empty;
+ -- GNAT
+ -- If a pragma No_Tagged_Streams is active for the current scope, this
+ -- points to the corresponding pragma.
+
Normalize_Scalars : Boolean := False;
-- GNAT, GNATBIND
-- Set True if a pragma Normalize_Scalars applies to the current unit.
-- cannot be simultaneous compilations with the object files in the same
-- object directory, if project files are used.
+ OpenAcc_Enabled : Boolean := False;
+ -- GNAT
+ -- Indicates whether OpenAcc pragmas should be taken into account. Set to
+ -- True by the use of -fopenacc.
+
type Operating_Mode_Type is (Check_Syntax, Check_Semantics, Generate_Code);
pragma Ordered (Operating_Mode_Type);
Operating_Mode : Operating_Mode_Type := Generate_Code;
-- type with the semantics that each value does more than the previous one.
Optimize_Alignment : Character := 'O';
+ -- GNAT
-- Setting of Optimize_Alignment, set to T/S/O for time/space/off. Can
-- be modified by use of pragma Optimize_Alignment.
Optimize_Alignment_Local : Boolean := False;
+ -- GNAT
-- Set True if Optimize_Alignment mode is set by a local configuration
-- pragma that overrides the gnat.adc (or other configuration file) default
-- so that the unit is not dependent on the default setting. Also always
Optimization_Level : Int;
pragma Import (C, Optimization_Level, "optimize");
+ -- GNAT
-- Constant reflecting the optimization level (0,1,2,3 for -O0,-O1,-O2,-O3)
- -- See jmissing.c and aamissing.c for definitions for dotnet/jgnat and
- -- GNAAMP back ends.
Optimize_Size : Int;
pragma Import (C, Optimize_Size, "optimize_size");
+ -- GNAT
-- Constant reflecting setting of -Os (optimize for size). Set to nonzero
- -- in -Os mode and set to zero otherwise. See jmissing.c and aamissing.c
- -- for definitions of "optimize_size" for dotnet/jgnat and GNAAMP backends
+ -- in -Os mode and set to zero otherwise.
Output_File_Name_Present : Boolean := False;
- -- GNATBIND, GNAT, GNATMAKE, GPRMAKE
+ -- GNATBIND, GNAT, GNATMAKE
-- Set to True when the output C file name is given with option -o for
-- GNATBIND, when the object file name is given with option -gnatO for GNAT
- -- or when the executable is given with option -o for GNATMAKE or GPRMAKE.
+ -- or when the executable is given with option -o for GNATMAKE.
Output_Linker_Option_List : Boolean := False;
-- GNATBIND
-- Set to True if polling for asynchronous abort is enabled by using
-- the -gnatP option for GNAT.
+ Prefix_Exception_Messages : Boolean := False;
+ -- GNAT
+ -- Set True to prefix exception messages with entity-name:
+
Preprocessing_Data_File : String_Ptr := null;
-- GNAT
-- Set by switch -gnatep=. The file name of the preprocessing data file.
Preprocessing_Symbol_Defs : String_List_Access := new String_List (1 .. 4);
-- An extensible array to temporarily stores symbol definitions specified
- -- on the command line with -gnateD switches.
- -- What is this magic constant 4 ???
- -- What is extensible about this fixed length array ???
+ -- on the command line with -gnateD switches. The value 4 is an arbitrary
+ -- starting point, if more space is needed it is allocated as required.
Preprocessing_Symbol_Last : Natural := 0;
-- Index of last symbol definition in array Symbol_Definitions
-- Indicates if a project file is used or not. Set to In_Use by the first
-- SFNP pragma.
+ Quantity_Of_Default_Size_Sec_Stacks : Int := -1;
+ -- GNATBIND
+ -- The number of default sized secondary stacks that the binder should
+ -- generate. Allows ZFP users to have the binder generate extra stacks if
+ -- needed to support multithreaded applications. A value of -1 indicates
+ -- that no size was set by the binder.
+
Queuing_Policy : Character := ' ';
-- GNAT, GNATBIND
-- Set to ' ' for the default case (no queuing policy specified). Reset to
-- policy is set in package System.
Quiet_Output : Boolean := False;
- -- GNATMAKE, GNATCLEAN, GPRMAKE, GPRBUILD, GPRCLEAN
+ -- GNATMAKE, GNATCLEAN, GPRBUILD, GPRCLEAN
-- Set to True if the tool should not have any output if there are no
-- errors or warnings.
-- Set to True to enable compatibility mode with Rational compiler, and
-- to accept renamings of implicit operations in their own scope.
+ Relaxed_Elaboration_Checks : Boolean := False;
+ -- GNAT
+ -- Set to True to ignore certain elaboration scenarios, thus making the
+ -- current ABE mechanism more permissive. This behavior is applicable to
+ -- both the default and the legacy ABE models. Modified by use of -gnatJ.
+
Relaxed_RM_Semantics : Boolean := False;
-- GNAT
- -- Set to True to ignore some Ada semantic error to help parse legacy
- -- Ada code for use in e.g. static analysis (such as CodePeer). This
- -- deals with cases where other compilers allow illegal constructs. Tools
- -- such as CodePeer are interested in analyzing code rather than enforcing
- -- legality rules, so as long as these illegal constructs end up with code
- -- that can be handled by the tool in question, there is no reason to
- -- reject the code that is considered correct by the other compiler.
+ -- Set to True to ignore some Ada semantic error to help parse legacy Ada
+ -- code for use in e.g. static analysis (such as CodePeer). This deals
+ -- with cases where other compilers allow illegal constructs. Tools such as
+ -- CodePeer are interested in analyzing code rather than enforcing legality
+ -- rules, so as long as these illegal constructs end up with code that can
+ -- be handled by the tool in question, there is no reason to reject the
+ -- code that is considered correct by the other compiler.
Replace_In_Comments : Boolean := False;
-- GNATPREP
Setup_Projects : Boolean := False;
-- GNAT DRIVER
- -- Set to True for GNAT SETUP: the Project Manager creates non existing
- -- object, library and exec directories.
+ -- Set to True for GNAT SETUP: the Project Manager creates nonexistent
+ -- object, library, and exec directories.
Shared_Libgnat : Boolean;
-- GNATBIND
Style_Check_Main : Boolean := False;
-- GNAT
-- Set True if Style_Check was set for the main unit. This is used to
- -- renable style checks for units in the mail extended source that get
+ -- enable style checks for units in the main extended source that get
-- with'ed indirectly. It is set True by use of either the -gnatg or
-- -gnaty switches, but not by use of the Style_Checks pragma.
- Suppress_All_Inlining : Boolean := False;
+ Disable_FE_Inline : Boolean := False;
+ Disable_FE_Inline_Always : Boolean := False;
-- GNAT
- -- Set by -fno-inline. Suppresses all inlining, both front end and back end
- -- regardless of any other switches that are set.
+ -- Request to disable front end inlining from pragma Inline or pragma
+ -- Inline_Always out of the presence of the -fno-inline back end flag
+ -- on the command line, regardless of any other switches that are set.
+ -- It remains the back end's reponsibility to honor -fno-inline at the
+ -- back end level.
Suppress_Control_Flow_Optimizations : Boolean := False;
-- GNAT
-- GNAT
-- Set True if tagged types and interfaces should be expanded by the
-- front-end. If False, the original tree is left unexpanded for tagged
- -- types and dispatching calls, assuming the underlying target supports
- -- it (e.g. in the JVM case).
+ -- types and dispatching calls, assuming the underlying target supports it.
Target_Dependent_Info_Read_Name : String_Ptr := null;
-- GNAT
-- Get_Targ and Set_Targ for full details) using the name given by
-- this switch. Set to non-null file name by use of the -gnatet switch.
+ type Origin_Of_Target is (Unknown, Default, Specified);
+
+ Target_Origin : Origin_Of_Target := Unknown;
+ -- GPRBUILD
+ -- Indicates the origin of attribute Target in project files
+
+ Target_Value : String_Access := null;
+ -- GPRBUILD
+ -- Indicates the value of attribute Target in project files
+
Task_Dispatching_Policy : Character := ' ';
-- GNAT, GNATBIND
-- Set to ' ' for the default case (no task dispatching policy specified).
-- Indicates if error messages are to be prefixed by the string error:
-- Initialized from Tag_Errors, can be forced on with the -gnatU switch.
- Universal_Addressing_On_AAMP : Boolean := False;
- -- GNAAMP
- -- Indicates if library-level objects should be accessed and updated using
- -- universal addressing instructions on the AAMP architecture. This flag is
- -- set to True when pragma Universal_Data is given as a configuration
- -- pragma.
+ Unnest_Subprogram_Mode : Boolean := False;
+ -- If true, activates the circuitry for unnesting subprograms (see the spec
+ -- of Exp_Unst for full details). Currently set only by use of -gnatd.1.
Unreserve_All_Interrupts : Boolean := False;
-- GNAT, GNATBIND
Verbose_Mode : Boolean := False;
-- GNAT, GNATBIND, GNATMAKE, GNATLINK, GNATLS, GNATNAME, GNATCLEAN,
- -- GPRMAKE, GPRBUILD, GPRCLEAN
+ -- GPRBUILD, GPRCLEAN
-- Set to True to get verbose mode (full error message text and location
-- information sent to standard output, also header, copyright and summary)
type Verbosity_Level_Type is (None, Low, Medium, High);
pragma Ordered (Verbosity_Level_Type);
Verbosity_Level : Verbosity_Level_Type := High;
- -- GNATMAKE, GPRMAKE
- -- Modified by gnatmake or gprmake switches -v, -vl, -vm, -vh. Indicates
+ -- GNATMAKE
+ -- Modified by gnatmake switches -v, -vl, -vm, -vh. Indicates
-- the level of verbosity of informational messages:
--
-- In Low Verbosity, the reasons why a source is recompiled, the name
-- Set to True to generate warnings for suspicious use of export or
-- import pragmas. Modified by use of -gnatwx/X.
+ Warn_On_Elab_Access : Boolean := False;
+ -- GNAT
+ -- Set to True to generate warnings for P'Access in the case where
+ -- subprogram P is in the same package as the P'Access, and the P'Access is
+ -- evaluated at package elaboration time, and occurs before the body of P
+ -- has been elaborated.
+
Warn_On_Hiding : Boolean := False;
-- GNAT
-- Set to True to generate warnings if a declared entity hides another
Warn_On_Suspicious_Contract : Boolean := True;
-- GNAT
-- Set to True to generate warnings for suspicious contracts expressed as
- -- pragmas or aspects precondition and postcondition. The default is that
+ -- pragmas or aspects precondition and postcondition, as well as other
+ -- suspicious cases of expressions typically found in contracts like
+ -- quantified expressions and uses of Update attribute. The default is that
-- this warning is enabled. Modified by use of -gnatw.t/.T.
Warn_On_Suspicious_Modulus_Value : Boolean := True;
-- or where no warning has been suppressed by the use of the pragma.
-- Modified by use of -gnatw.w/.W.
- type Warning_Mode_Type is (Suppress, Normal, Treat_As_Error);
+ type Warning_Mode_Type is
+ (Suppress, Normal, Treat_As_Error, Treat_Run_Time_Warnings_As_Errors);
Warning_Mode : Warning_Mode_Type := Normal;
-- GNAT, GNATBIND
-- Controls treatment of warning messages. If set to Suppress, warning
-- messages are not generated at all. In Normal mode, they are generated
-- but do not count as errors. In Treat_As_Error mode, warning messages are
- -- generated and are treated as errors. Note that Warning_Mode = Suppress
- -- causes pragma Warnings to be ignored (except for legality checks),
- -- unless we are in GNATprove_Mode, which requires pragma Warnings to
- -- be stored for the formal verification backend.
-
- Warnings_As_Errors_Count : Natural;
- -- GNAT
- -- Number of entries stored in Warnings_As_Errors table
+ -- generated and treated as errors. In Treat_Run_Time_Warnings_As_Errors,
+ -- warning messages regarding errors raised at run time are treated as
+ -- errors. Note that Warning_Mode = Suppress causes pragma Warnings to be
+ -- ignored (except for legality checks), unless we are in GNATprove_Mode,
+ -- which requires pragma Warnings to be stored for the formal verification
+ -- backend.
Wide_Character_Encoding_Method : WC_Encoding_Method := WCEM_Brackets;
-- GNAT, GNATBIND
-- set by the command line switches -gnat83/95/2005/2012, and possibly
-- modified by the use of configuration pragmas Ada_*. This switch is used
-- to set the initial value for Ada_Version mode at the start of analysis
- -- of a unit. Note however that the setting of this flag is ignored for
+ -- of a unit. Note however that the setting of this flag is ignored for
-- internal and predefined units (which are always compiled in the most up
-- to date version of Ada).
Ada_Version_Pragma_Config : Node_Id;
- -- This will be set non empty if it is set by a configuration pragma
+ -- This will be set nonempty if it is set by a configuration pragma
Ada_Version_Explicit_Config : Ada_Version_Type;
-- GNAT
-- This switch is not set when the pragma appears ahead of a given
-- unit, so it does not affect the compilation of other units.
+ No_Component_Reordering_Config : Boolean;
+ -- GNAT
+ -- This is the value of the configuration switch that is set by the
+ -- pragma No_Component_Reordering when it appears in the gnat.adc file.
+ -- This flag is used to set the initial value of No_Component_Reordering
+ -- at the start of each compilation unit, except that it is always set
+ -- False for predefined units.
+
No_Exit_Message : Boolean := False;
-- GNATMAKE, GPRBUILD
-- Set with switch --no-exit-message. When True, if there are compilation
-- flag is used to set the initial value for Polling_Required at the start
-- of analyzing each unit.
+ Prefix_Exception_Messages_Config : Boolean;
+ -- The setting of Prefix_Exception_Messages from configuration pragmas
+
SPARK_Mode_Config : SPARK_Mode_Type := None;
-- GNAT
-- The setting of SPARK_Mode from configuration pragmas
-- is ignored for internal and predefined units (which are always compiled
-- with the standard Size semantics).
- Warnings_As_Errors_Count_Config : Natural;
- -- GNAT
- -- Count of pattern strings stored from Warning_As_Error pragmas
-
type Config_Switches_Type is private;
-- Type used to save values of the switches set from Config values
- procedure Save_Opt_Config_Switches (Save : out Config_Switches_Type);
- -- This procedure saves the current values of the switches which are
- -- initialized from the above Config values, and then resets these switches
- -- according to the Config value settings.
+ procedure Register_Config_Switches;
+ -- This procedure is called after processing the gnat.adc file and other
+ -- configuration pragma files to record the values of the Config switches,
+ -- as possibly modified by the use of command line switches and pragmas
+ -- appearing in these files.
- procedure Set_Opt_Config_Switches
+ procedure Restore_Config_Switches (Save : Config_Switches_Type);
+ -- This procedure restores a set of switch values previously saved by a
+ -- call to Save_Config_Switches.
+
+ function Save_Config_Switches return Config_Switches_Type;
+ -- Return the current state of all configuration-related attributes
+
+ procedure Set_Config_Switches
(Internal_Unit : Boolean;
Main_Unit : Boolean);
-- This procedure sets the switches to the appropriate initial values. The
-- unit. This affects setting of the assert/debug pragma switches, which
-- are normally set false by default for an internal unit, except when the
-- internal unit is the main unit, in which case we use the command line
- -- settings).
-
- procedure Restore_Opt_Config_Switches (Save : Config_Switches_Type);
- -- This procedure restores a set of switch values previously saved by a
- -- call to Save_Opt_Config_Switches (Save).
-
- procedure Register_Opt_Config_Switches;
- -- This procedure is called after processing the gnat.adc file and other
- -- configuration pragma files to record the values of the Config switches,
- -- as possibly modified by the use of command line switches and pragmas
- -- appearing in these files.
+ -- settings.
------------------------
-- Other Global Flags --
------------------------
- Expander_Active : Boolean := False;
- -- A flag that indicates if expansion is active (True) or deactivated
- -- (False). When expansion is deactivated all calls to expander routines
- -- have no effect. Note that the initial setting of False is merely to
- -- prevent saving of an undefined value for an initial call to the
- -- Expander_Mode_Save_And_Set procedure. For more information on the use of
- -- this flag, see package Expander. Indeed this flag might more logically
- -- be in the spec of Expander, but it is referenced by Errout, and it
- -- really seems wrong for Errout to depend on Expander.
-
- Static_Dispatch_Tables : Boolean := True;
+ Building_Static_Dispatch_Tables : Boolean := True;
-- This flag indicates if the backend supports generation of statically
-- allocated dispatch tables. If it is True, then the front end will
-- generate static aggregates for dispatch tables that contain forward
-- behavior can be disabled using switch -gnatd.t which will set this flag
-- to False and revert to the previous dynamic behavior.
+ Expander_Active : Boolean := False;
+ -- A flag that indicates if expansion is active (True) or deactivated
+ -- (False). When expansion is deactivated all calls to expander routines
+ -- have no effect. Note that the initial setting of False is merely to
+ -- prevent saving of an undefined value for an initial call to the
+ -- Expander_Mode_Save_And_Set procedure. For more information on the use of
+ -- this flag, see package Expander. Indeed this flag might more logically
+ -- be in the spec of Expander, but it is referenced by Errout, and it
+ -- really seems wrong for Errout to depend on Expander.
+
-----------------------
-- Tree I/O Routines --
-----------------------
---------------------------
-- The following array would more reasonably be located in Err_Vars or
- -- Errour, but but we put them here to deal with licensing issues (we need
+ -- Errout, but we put them here to deal with licensing issues (we need
-- this to have the GPL exception licensing, since these variables and
-- subprograms are accessed from units with this licensing).
Warnings_As_Errors : array (1 .. 10_000) of String_Ptr;
- -- Table for recording Warning_As_Error pragmas as they are processed.
- -- It would be nicer to use Table, but there are circular elaboration
- -- problems if we try to do this, and an attempt to find some other
- -- appropriately licensed unit to declare this as a Table failed with
- -- various elaboration circularities. Memory is getting cheap these days!
+ -- Table for recording Warning_As_Error pragmas as they are processed. It
+ -- would be nicer to use Table, but there are circular elaboration problems
+ -- if we try to do this, and an attempt to find some other appropriately
+ -- licensed unit to declare this as a Table failed with various elaboration
+ -- circularities.
+
+ Warnings_As_Errors_Count : Natural;
+ -- GNAT
+ -- Number of entries stored in Warnings_As_Errors table
+
+ Warnings_As_Errors_Count_Config : Natural;
+ -- GNAT
+ -- Count of pattern strings stored from Warning_As_Error pragmas
+
+ ---------------
+ -- GNAT_Mode --
+ ---------------
+
+ GNAT_Mode : Boolean := False;
+ -- GNAT
+ -- True if compiling in GNAT system mode (-gnatg switch)
+
+ GNAT_Mode_Config : Boolean := False;
+ -- GNAT
+ -- True if -gnatg switch is present. GNAT_Mode may be temporary set to
+ -- True during the analysis of a system unit, but GNAT_Mode_Config must
+ -- not change once scanned and set.
+
+ -- Setting GNAT mode has the following effects on the language that is
+ -- accepted. Note that several of the following have the effect of changing
+ -- an error to a warning. But warnings are usually treated as fatal errors
+ -- in -gnatg mode, so to actually take advantage of such a change, it is
+ -- necessary to add an explicit pragma Warnings (Off) in the source and
+ -- this requires clear documentation of why this is necessary.
+
+ -- The identifier character set is set to 'n' (7-bit ASCII)
+
+ -- Pragma Extend_System is ignored
+
+ -- Warning_Mode is set to Treat_As_Error (-gnatwe)
+
+ -- Standard style checks are set (See Set_GNAT_Style_Check_Options)
+
+ -- Standard warnings are turned on (see Set_GNAT_Mode_Warnings)
+
+ -- The Ada version is set to Ada 2012
+
+ -- Task priorities are always allowed to be in the range Any_Priority
+
+ -- Overflow checks are suppressed, overflow checking set to strict mode
+
+ -- ALI files are always generated for predefined generic packages
+
+ -- Obsolescent feature warnings are suppressed
+
+ -- Recompilation of children of GNAT, System, Ada, Interfaces is allowed
+
+ -- The Scalar_Storage_Order attribute applies to generic types
+
+ -- Categorization errors are treated as warnings rather than errors
+
+ -- Statements in preelaborated units give warnings rather than errors
+
+ -- Private objects are allowed in preelaborated units
+
+ -- Non-static constants in preelaborated units give warnings not errors
+
+ -- The warning about component size being ignored is suppressed
+
+ -- The warning about size clauses being ignored is suppressed
+
+ -- Initializing limited types gives a warning rather than an error
+
+ -- Copying of limited objects is allowed
+
+ -- Returning objects of limited types is allowed
+
+ -- Non-static call in preelaborated unit give a warning, not an error
+
+ -- Warnings on possible elaboration errors are suppressed
+
+ -- Warnings about packing being ignored are suppressed
+
+ -- Warnings in internal units are not suppressed (they normally are)
+
+ -- The only special comment sequence allowed is --!
--------------------------
-- Private Declarations --
--------------------------
private
-
-- The following type is used to save and restore settings of switches in
-- Opt that represent the configuration (i.e. result of config pragmas).
External_Name_Imp_Casing : External_Casing_Type;
Fast_Math : Boolean;
Initialize_Scalars : Boolean;
+ No_Component_Reordering : Boolean;
Normalize_Scalars : Boolean;
Optimize_Alignment : Character;
Optimize_Alignment_Local : Boolean;
Persistent_BSS_Mode : Boolean;
Polling_Required : Boolean;
+ Prefix_Exception_Messages : Boolean;
SPARK_Mode : SPARK_Mode_Type;
SPARK_Mode_Pragma : Node_Id;
Uneval_Old : Character;