OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [ada/] [opt.ads] - Blame information for rev 764

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 706 jeremybenn
------------------------------------------------------------------------------
2
--                                                                          --
3
--                         GNAT COMPILER COMPONENTS                         --
4
--                                                                          --
5
--                                  O P T                                   --
6
--                                                                          --
7
--                                 S p e c                                  --
8
--                                                                          --
9
--          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
10
--                                                                          --
11
-- GNAT is free software;  you can  redistribute it  and/or modify it under --
12
-- terms of the  GNU General Public License as published  by the Free Soft- --
13
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
14
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
15
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16
-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
17
--                                                                          --
18
-- As a special exception under Section 7 of GPL version 3, you are granted --
19
-- additional permissions described in the GCC Runtime Library Exception,   --
20
-- version 3.1, as published by the Free Software Foundation.               --
21
--                                                                          --
22
-- You should have received a copy of the GNU General Public License and    --
23
-- a copy of the GCC Runtime Library Exception along with this program;     --
24
-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
25
-- <http://www.gnu.org/licenses/>.                                          --
26
--                                                                          --
27
-- GNAT was originally developed  by the GNAT team at  New York University. --
28
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
29
--                                                                          --
30
------------------------------------------------------------------------------
31
 
32
--  This package contains global flags set by the initialization routine from
33
--  the command line and referenced throughout the compiler, the binder, or
34
--  other GNAT tools. The comments indicate which options are used by which
35
--  programs (GNAT, GNATBIND, GNATLINK, GNATMAKE, GPRMAKE, etc).
36
 
37
--  Some flags are labelled "PROJECT MANAGER". These are used by tools that
38
--  use the Project Manager. These tools include gnatmake, gnatname, the gnat
39
--  driver, gnatclean, gprbuild and gprclean.
40
 
41
with Hostparm; use Hostparm;
42
with Types;    use Types;
43
 
44
pragma Warnings (Off);
45
--  This package is used also by gnatcoll
46
with System.Strings; use System.Strings;
47
with System.WCh_Con; use System.WCh_Con;
48
pragma Warnings (On);
49
 
50
package Opt is
51
 
52
   ----------------------
53
   -- Checksum Control --
54
   ----------------------
55
 
56
   --  Checksums are computed for sources to check for sources being the same
57
   --  from a compilation point of view (e.g. spelling of identifiers and
58
   --  white space layout do not count in this computation).
59
 
60
   --  The way the checksum is computed has evolved across the various versions
61
   --  of GNAT. When gprbuild is called with -m, the checksums must be computed
62
   --  the same way in gprbuild as it was in the GNAT version of the compiler.
63
   --  The different ways are
64
 
65
   --    Version 6.4 and later:
66
 
67
   --      The Accumulate_Token_Checksum procedure is called after each numeric
68
   --      literal and each identifier/keyword. For keywords, Tok_Identifier is
69
   --      used in the call to Accumulate_Token_Checksum.
70
 
71
   --    Versions 5.04 to 6.3:
72
 
73
   --      For keywords, the token value were used in the call to procedure
74
   --      Accumulate_Token_Checksum. Type Token_Type did not include Tok_Some.
75
 
76
   --    Versions 5.03:
77
 
78
   --      For keywords, the token value were used in the call to
79
   --      Accumulate_Token_Checksum. Type Token_Type did not include
80
   --      Tok_Interface, Tok_Overriding, Tok_Synchronized and Tok_Some.
81
 
82
   --    Versions 5.02 and before:
83
 
84
   --      No calls to procedure Accumulate_Token_Checksum (the checksum
85
   --      mechanism was introduced in version 5.03).
86
 
87
   --  To signal to the scanner whether Accumulate_Token_Checksum needs to be
88
   --  called and what versions to call, the following Boolean flags are used:
89
 
90
   Checksum_Accumulate_Token_Checksum : Boolean := True;
91
   --  GPRBUILD
92
   --  Set to False by gprbuild when the version of GNAT is 5.02 or before. If
93
   --  this switch is False, then we do not call Accumulate_Token_Checksum, so
94
   --  the setting of the following two flags is irrelevant.
95
 
96
   Checksum_GNAT_6_3 : Boolean := False;
97
   --  GPRBUILD
98
   --  Set to True by gprbuild when the version of GNAT is 6.3 or before.
99
 
100
   Checksum_GNAT_5_03 : Boolean := False;
101
   --  GPRBUILD
102
   --  Set to True by gprbuild when the version of GNAT is 5.03 or before.
103
 
104
   ----------------------------------------------
105
   -- Settings of Modes for Current Processing --
106
   ----------------------------------------------
107
 
108
   --  The following mode values represent the current state of processing.
109
   --  The values set here are the default values. Unless otherwise noted,
110
   --  the value may be reset in Switch-? with an appropriate switch. In
111
   --  some cases, the values can also be modified by pragmas, and in the
112
   --  case of some binder variables, Gnatbind.Scan_Bind_Arg may modify
113
   --  the default values.
114
 
115
   type Ada_Version_Type is (Ada_83, Ada_95, Ada_2005, Ada_2012);
116
   pragma Ordered (Ada_Version_Type);
117
   --  Versions of Ada for Ada_Version below. Note that these are ordered,
118
   --  so that tests like Ada_Version >= Ada_95 are legitimate and useful.
119
   --  Think twice before using "="; Ada_Version >= Ada_2012 is more likely
120
   --  what you want, because it will apply to future versions of the language.
121
 
122
   Ada_Version_Default : constant Ada_Version_Type := Ada_2005;
123
   pragma Warnings (Off, Ada_Version_Default);
124
   --  GNAT
125
   --  Default Ada version if no switch given. The Warnings off is to kill
126
   --  constant condition warnings.
127
   --
128
   --  WARNING: some scripts rely on the format of this line of code. Any
129
   --  change must be coordinated with the scripts requirements.
130
 
131
   Ada_Version : Ada_Version_Type := Ada_Version_Default;
132
   --  GNAT
133
   --  Current Ada version for compiler, as set by configuration pragmas,
134
   --  compiler switches, or implicitly (to Ada_Version_Runtime) when a
135
   --  predefined or internal file is compiled.
136
 
137
   Ada_Version_Explicit : Ada_Version_Type := Ada_Version_Default;
138
   --  GNAT
139
   --  Like Ada_Version, but does not get set implicitly for predefined
140
   --  or internal units, so it reflects the Ada version explicitly set
141
   --  using configuration pragmas or compiler switches (or if neither
142
   --  appears, it remains set to Ada_Version_Default). This is used in
143
   --  the rare cases (notably for pragmas Preelaborate_05 and Pure_05/12)
144
   --  where in the run-time we want the explicit version set.
145
 
146
   Ada_Version_Runtime : Ada_Version_Type := Ada_2012;
147
   --  GNAT
148
   --  Ada version used to compile the runtime. Used to set Ada_Version (but
149
   --  not Ada_Version_Explicit) when compiling predefined or internal units.
150
 
151
   Ada_Final_Suffix : constant String := "final";
152
   Ada_Final_Name   : String_Ptr := new String'("ada" & Ada_Final_Suffix);
153
   --  GNATBIND
154
   --  The name of the procedure that performs the finalization at the end of
155
   --  execution. This variable may be modified by Gnatbind.Scan_Bind_Arg.
156
 
157
   Ada_Init_Suffix : constant String := "init";
158
   Ada_Init_Name   : String_Ptr := new String'("ada" & Ada_Init_Suffix);
159
   --  GNATBIND
160
   --  The name of the procedure that performs initialization at the start
161
   --  of execution. This variable may be modified by Gnatbind.Scan_Bind_Arg.
162
 
163
   Ada_Main_Name_Suffix : constant String := "main";
164
   --  GNATBIND
165
   --  The suffix for Ada_Main_Name. Defined as a constant here so that it
166
   --  can be referenced in a uniform manner to create either the default
167
   --  value of Ada_Main_Name (declared below), or the non-default name
168
   --  set by Gnatbind.Scan_Bind_Arg.
169
 
170
   Ada_Main_Name : String_Ptr := new String'("ada_" & Ada_Main_Name_Suffix);
171
   --  GNATBIND
172
   --  The name of the Ada package generated by the binder (when in Ada mode).
173
   --  This variable may be modified by Gnatbind.Scan_Bind_Arg.
174
 
175
   Address_Clause_Overlay_Warnings : Boolean := True;
176
   --  GNAT
177
   --  Set False to disable address clause warnings
178
 
179
   Address_Is_Private : Boolean := False;
180
   --  GNAT, GNATBIND
181
   --  Set True if package System has the line "type Address is private;"
182
 
183
   All_Errors_Mode : Boolean := False;
184
   --  GNAT
185
   --  Flag set to force display of multiple errors on a single line and
186
   --  also repeated error messages for references to undefined identifiers
187
   --  and certain other repeated error messages. Set by use of -gnatf.
188
 
189
   All_Sources : Boolean := False;
190
   --  GNATBIND
191
   --  Set to True to require all source files to be present. This flag is
192
   --  directly modified by gnatmake to affect the shared binder routines.
193
 
194
   Alternate_Main_Name : String_Ptr := null;
195
   --  GNATBIND
196
   --  Set to non null when Bind_Alternate_Main_Name is True. This value
197
   --  is modified as needed by Gnatbind.Scan_Bind_Arg.
198
 
199
   ASIS_Mode : Boolean := False;
200
   --  GNAT
201
   --  Enable semantic checks and tree transformations that are important
202
   --  for ASIS but that are usually skipped if Operating_Mode is set to
203
   --  Check_Semantics. This flag does not have the corresponding option to set
204
   --  it ON. It is set ON when Tree_Output is set ON, it can also be set ON
205
   --  from the code of GNSA-based tool (a client may need to set ON the
206
   --  Back_Annotate_Rep_Info flag in this case. At the moment this does not
207
   --  make very much sense, because GNSA cannot do back annotation).
208
 
209
   Assertions_Enabled : Boolean := False;
210
   --  GNAT
211
   --  Enable assertions made using pragma Assert
212
 
213
   Assume_No_Invalid_Values : Boolean := False;
214
   --  GNAT
215
   --  Normally, in accordance with (RM 13.9.1 (9-11)) the front end assumes
216
   --  that values could have invalid representations, unless it can clearly
217
   --  prove that the values are valid. If this switch is set (by -gnatB or by
218
   --  pragma Assume_No_Invalid_Values (Off)), then the compiler assumes values
219
   --  are valid and in range of their representations. This feature is now
220
   --  fully enabled in the compiler.
221
 
222
   Back_Annotate_Rep_Info : Boolean := False;
223
   --  GNAT
224
   --  If set True, enables back annotation of representation information
225
   --  by gigi, even in -gnatc mode. This is set True by the use of -gnatR
226
   --  (list representation information) or -gnatt (generate tree). It is
227
   --  also set true if certain Unchecked_Conversion instantiations require
228
   --  checking based on annotated values.
229
 
230
   Back_End_Handles_Limited_Types : Boolean;
231
   --  This flag is set true if the back end can properly handle limited or
232
   --  other by reference types, and avoid copies. If this flag is False, then
233
   --  the front end does special expansion for conditional expressions to make
234
   --  sure that no copy occurs. If the flag is True, then the expansion for
235
   --  conditional expressions relies on the back end properly handling things.
236
   --  Currently the default is False for all cases (set in gnat1drv). The
237
   --  default can be modified using -gnatd.L (sets the flag True).
238
 
239
   Bind_Alternate_Main_Name : Boolean := False;
240
   --  GNATBIND
241
   --  True if main should be called Alternate_Main_Name.all.
242
   --  This variable may be set to True by Gnatbind.Scan_Bind_Arg.
243
 
244
   Bind_Main_Program : Boolean := True;
245
   --  GNATBIND
246
   --  Set to False if not binding main Ada program
247
 
248
   Bind_For_Library : Boolean := False;
249
   --  GNATBIND
250
   --  Set to True if the binder needs to generate a file designed for building
251
   --  a library. May be set to True by Gnatbind.Scan_Bind_Arg.
252
 
253
   Bind_Only : Boolean := False;
254
   --  GNATMAKE, GPRMAKE, GPRBUILD
255
   --  Set to True to skip compile and link steps
256
   --  (except when Compile_Only and/or Link_Only are True).
257
 
258
   Blank_Deleted_Lines : Boolean := False;
259
   --  GNAT, GNATPREP
260
   --  Output empty lines for each line of preprocessed input that is deleted
261
   --  in the output, including preprocessor lines starting with a '#'.
262
 
263
   Brief_Output : Boolean := False;
264
   --  GNAT, GNATBIND
265
   --  Force brief error messages to standard error, even if verbose mode is
266
   --  set (so that main error messages go to standard output).
267
 
268
   Build_Bind_And_Link_Full_Project : Boolean := False;
269
   --  GNATMAKE
270
   --  Set to True to build, bind and link all the sources of a project file
271
   --  (switch -B)
272
 
273
   Check_Object_Consistency : Boolean := False;
274
   --  GNATBIND, GNATMAKE
275
   --  Set to True to check whether every object file is consistent with
276
   --  its corresponding ada library information (ALI) file. An object
277
   --  file is inconsistent with the corresponding ALI file if the object
278
   --  file does not exist or if it has an older time stamp than the ALI file.
279
   --  Default above is for GNATBIND. GNATMAKE overrides this default to
280
   --  True (see Make.Initialize) since we normally do need to check source
281
   --  consistencies in gnatmake.
282
 
283
   Check_Only : Boolean := False;
284
   --  GNATBIND
285
   --  Set to True to do checks only, no output of binder file
286
 
287
   Check_Policy_List : Node_Id := Empty;
288
   --  GNAT
289
   --  This points to the list of N_Pragma nodes for Check_Policy pragmas
290
   --  that are linked through the Next_Pragma fields, with the list being
291
   --  terminated by Empty. The order is most recently processed first. Note
292
   --  that Push_Scope and Pop_Scope in Sem_Ch8 save and restore the value
293
   --  of this variable, implementing the required scope control for pragmas
294
   --  appearing a declarative part.
295
 
296
   Check_Readonly_Files : Boolean := False;
297
   --  GNATMAKE
298
   --  Set to True to check readonly files during the make process
299
 
300
   Check_Source_Files : Boolean := True;
301
   --  GNATBIND, GNATMAKE
302
   --  Set to True to enable consistency checking for any source files that
303
   --  are present (i.e. date must match the date in the library info file).
304
   --  Set to False for object file consistency check only. This flag is
305
   --  directly modified by gnatmake, to affect the shared binder routines.
306
 
307
   Check_Switches : Boolean := False;
308
   --  GNATMAKE, GPRMAKE, GPBUILD
309
   --  Set to True to check compiler options during the make process
310
 
311
   Check_Unreferenced : Boolean := False;
312
   --  GNAT
313
   --  Set to True to enable checking for unreferenced entities other
314
   --  than formal parameters (for which see Check_Unreferenced_Formals)
315
 
316
   Check_Unreferenced_Formals : Boolean := False;
317
   --  GNAT
318
   --  Set True to check for unreferenced formals. This is turned on by
319
   --  -gnatwa/wf/wu and turned off by -gnatwA/wF/wU.
320
 
321
   Check_Withs : Boolean := False;
322
   --  GNAT
323
   --  Set to True to enable checking for unused withs, and also the case
324
   --  of withing a package and using none of the entities in the package.
325
 
326
   CodePeer_Mode : Boolean := False;
327
   --  GNAT, GNATBIND
328
   --  Enable full CodePeer mode (SCIL generation, disable switches that
329
   --  interact badly with it, etc...).
330
 
331
   Commands_To_Stdout : Boolean := False;
332
   --  GNATMAKE
333
   --  True if echoed commands to be written to stdout instead of stderr
334
 
335
   Comment_Deleted_Lines : Boolean := False;
336
   --  GNATPREP
337
   --  True if source lines removed by the preprocessor should be commented
338
   --  in the output file.
339
 
340
   Compile_Only : Boolean := False;
341
   --  GNATMAKE, GNATCLEAN, GPRMAKE, GPBUILD, GPRCLEAN
342
   --  GNATMAKE, GPRMAKE, GPRMAKE:
343
   --    set to True to skip bind and link steps (except when Bind_Only is
344
   --    True).
345
   --  GNATCLEAN, GPRCLEAN:
346
   --    set to True to delete only the files produced by the compiler but not
347
   --    the library files or the executable files.
348
 
349
   Config_File : Boolean := True;
350
   --  GNAT
351
   --  Set to False to inhibit reading and processing of gnat.adc file
352
 
353
   Config_File_Names : String_List_Access := null;
354
   --  GNAT
355
   --  Names of configuration pragmas files (given by switches -gnatec)
356
 
357
   Configurable_Run_Time_Mode : Boolean := False;
358
   --  GNAT, GNATBIND
359
   --  Set True if the compiler is operating in configurable run-time mode.
360
   --  This happens if the flag Targparm.Configurable_Run_TimeMode_On_Target
361
   --  is set True, or if pragma No_Run_Time is used. See the spec of Rtsfind
362
   --  for details on the handling of the latter pragma.
363
 
364
   Constant_Condition_Warnings : Boolean := False;
365
   --  GNAT
366
   --  Set to True to activate warnings on constant conditions
367
 
368
   Create_Mapping_File : Boolean := False;
369
   --  GNATMAKE, GPRMAKE
370
   --  Set to True (-C switch) to indicate that the compiler will be invoked
371
   --  with a mapping file (-gnatem compiler switch).
372
 
373
   Debug_Pragmas_Enabled : Boolean := False;
374
   --  GNAT
375
   --  Enable debug statements from pragma Debug
376
 
377
   Debug_Pragmas_Disabled : Boolean := False;
378
   --  GNAT
379
   --  Debug pragmas completely disabled (no semantic checking)
380
 
381
   subtype Debug_Level_Value is Nat range 0 .. 3;
382
   Debugger_Level : Debug_Level_Value := 0;
383
   --  GNATBIND
384
   --  The value given to the -g parameter. The default value for -g with
385
   --  no value is 2. This is usually ignored by GNATBIND, except in the
386
   --  VMS version where it is passed as an argument to __gnat_initialize
387
   --  to trigger the activation of the remote debugging interface.
388
   --  Is this still true ???
389
 
390
   Debug_Generated_Code : Boolean := False;
391
   --  GNAT
392
   --  Set True (-gnatD switch) to debug generated expanded code instead
393
   --  of the original source code. Causes debugging information to be
394
   --  written with respect to the generated code file that is written.
395
 
396
   Default_Exit_Status : Int := 0;
397
   --  GNATBIND
398
   --  Set the default exit status value. Set by the -Xnnn switch for the
399
   --  binder.
400
 
401
   Default_Stack_Size : Int := -1;
402
   --  GNATBIND
403
   --  Set to default primary stack size in units of bytes. Set by
404
   --  the -dnnn switch for the binder. A value of -1 indicates that no
405
   --  default was set by the binder.
406
 
407
   Default_Sec_Stack_Size : Int := -1;
408
   --  GNATBIND
409
   --  Set to default secondary stack size in units of bytes. Set by
410
   --  the -Dnnn switch for the binder. A value of -1 indicates that no
411
   --  default was set by the binder, and that the default should be the
412
   --  initial value of System.Secondary_Stack.Default_Secondary_Stack_Size.
413
 
414
   Default_Pool : Node_Id := Empty;
415
   --  GNAT
416
   --  Used to record the storage pool name (or null literal) that is the
417
   --  argument of an applicable pragma Default_Storage_Pool.
418
   --    Empty:       No pragma Default_Storage_Pool applies.
419
   --    N_Null node: "pragma Default_Storage_Pool (null);" applies.
420
   --    otherwise:   "pragma Default_Storage_Pool (X);" applies, and
421
   --                 this points to the name X.
422
   --  Push_Scope and Pop_Scope in Sem_Ch8 save and restore this value.
423
 
424
   Detect_Blocking : Boolean := False;
425
   --  GNAT
426
   --  Set True to force the run time to raise Program_Error if calls to
427
   --  potentially blocking operations are detected from protected actions.
428
 
429
   Display_Compilation_Progress : Boolean := False;
430
   --  GNATMAKE, GPRMAKE, GPRBUILD
431
   --  Set True (-d switch) to display information on progress while compiling
432
   --  files. Internal flag to be used in conjunction with an IDE (e.g GPS).
433
 
434
   type Distribution_Stub_Mode_Type is
435
   --  GNAT
436
     (No_Stubs,
437
      --  Normal mode, no generation/compilation of distribution stubs
438
 
439
      Generate_Receiver_Stub_Body,
440
      --  The unit being compiled is the RCI body, and the compiler will
441
      --  generate the body for the receiver stubs and compile it.
442
 
443
      Generate_Caller_Stub_Body);
444
      --  The unit being compiled is the RCI spec, and the compiler will
445
      --  generate the body for the caller stubs and compile it.
446
 
447
   Distribution_Stub_Mode : Distribution_Stub_Mode_Type := No_Stubs;
448
   --  GNAT
449
   --  This enumeration variable indicates the five states of distribution
450
   --  annex stub generation/compilation.
451
 
452
   Do_Not_Execute : Boolean := False;
453
   --  GNATMAKE
454
   --  Set to True if no actual compilations should be undertaken.
455
 
456
   Dump_Source_Text : Boolean := False;
457
   --  GNAT
458
   --  Set to True (by -gnatL) to dump source text intermingled with generated
459
   --  code. Effective only if either of Debug/Print_Generated_Code is true.
460
 
461
   Dynamic_Elaboration_Checks : Boolean := False;
462
   --  GNAT
463
   --  Set True for dynamic elaboration checking mode, as set by the -gnatE
464
   --  switch or by the use of pragma Elaboration_Checks (Dynamic).
465
 
466
   Dynamic_Stack_Measurement : Boolean := False;
467
   --  GNATBIND
468
   --  Set True to enable dynamic stack measurement (-u flag for gnatbind)
469
 
470
   Dynamic_Stack_Measurement_Array_Size : Nat := 100;
471
   --  GNATBIND
472
   --  Number of measurements we want to store during dynamic stack analysis.
473
   --  When the buffer is full, non-storable results will be output on the fly.
474
   --  The value is relevant only if Dynamic_Stack_Measurement is set. Set
475
   --  by processing of -u flag for gnatbind.
476
 
477
   Elab_Dependency_Output : Boolean := False;
478
   --  GNATBIND
479
   --  Set to True to output complete list of elaboration constraints
480
 
481
   Elab_Order_Output : Boolean := False;
482
   --  GNATBIND
483
   --  Set to True to output chosen elaboration order
484
 
485
   Elab_Warnings : Boolean := False;
486
   --  GNAT
487
   --  Set to True to generate full elaboration warnings (-gnatwl)
488
 
489
   Enable_Overflow_Checks : Boolean := False;
490
   --  GNAT
491
   --  Set to True if -gnato (enable overflow checks) switch is set,
492
   --  but not -gnatp.
493
 
494
   Error_Msg_Line_Length : Nat := 0;
495
   --  GNAT
496
   --  Records the error message line length limit. If this is set to zero,
497
   --  then we get the old style behavior, in which each call to the error
498
   --  message routines generates one line of output as a separate message.
499
   --  If it is set to a non-zero value, then continuation lines are folded
500
   --  to make a single long message, and then this message is split up into
501
   --  multiple lines not exceeding the specified length. Set by -gnatj=nn.
502
 
503
   Exception_Handler_Encountered : Boolean := False;
504
   --  GNAT
505
   --  This flag is set true if the parser encounters an exception handler.
506
   --  It is used to set Warn_On_Exception_Propagation True if the restriction
507
   --  No_Exception_Propagation is set.
508
 
509
   Exception_Extra_Info : Boolean := False;
510
   --  GNAT
511
   --  True when switch -gnateE is used. When True, generate extra information
512
   --  associated with exception messages (in particular range and index
513
   --  checks).
514
 
515
   Exception_Locations_Suppressed : Boolean := False;
516
   --  GNAT
517
   --  Set to True if a Suppress_Exception_Locations configuration pragma is
518
   --  currently active.
519
 
520
   type Exception_Mechanism_Type is
521
   --  Determines the handling of exceptions. See Exp_Ch11 for details
522
   --
523
     (Front_End_Setjmp_Longjmp_Exceptions,
524
      --  Exceptions use setjmp/longjmp generated explicitly by the
525
      --  front end (this includes gigi or other equivalent parts of
526
      --  the code generator). AT END handlers are converted into
527
      --  exception handlers by the front end in this mode.
528
 
529
      Back_End_Exceptions);
530
      --  Exceptions are handled by the back end. The front end simply
531
      --  generates the handlers as they appear in the source, and AT
532
      --  END handlers are left untouched (they are not converted into
533
      --  exception handlers when operating in this mode.
534
   pragma Convention (C, Exception_Mechanism_Type);
535
 
536
   Exception_Mechanism : Exception_Mechanism_Type :=
537
                           Front_End_Setjmp_Longjmp_Exceptions;
538
   --  GNAT
539
   --  Set to the appropriate value depending on the default as given in
540
   --  system.ads (ZCX_By_Default). The C convention is there to make this
541
   --  variable accessible to gigi.
542
 
543
   Exception_Tracebacks : Boolean := False;
544
   --  GNATBIND
545
   --  Set to True to store tracebacks in exception occurrences (-E)
546
 
547
   Extensions_Allowed : Boolean := False;
548
   --  GNAT
549
   --  Set to True by switch -gnatX if GNAT specific language extensions
550
   --  are allowed. For example, the use of 'Constrained with objects of
551
   --  generic types is a GNAT extension.
552
 
553
   type External_Casing_Type is (
554
     As_Is,       -- External names cased as they appear in the Ada source
555
     Uppercase,   -- External names forced to all uppercase letters
556
     Lowercase);  -- External names forced to all lowercase letters
557
 
558
   External_Name_Imp_Casing : External_Casing_Type := Lowercase;
559
   --  GNAT
560
   --  The setting of this flag determines the casing of external names
561
   --  when the name is implicitly derived from an entity name (i.e. either
562
   --  no explicit External_Name or Link_Name argument is used, or, in the
563
   --  case of extended DEC pragmas, the external name is given using an
564
   --  identifier. The As_Is setting is not permitted here (since this would
565
   --  create Ada source programs that were case sensitive).
566
 
567
   External_Name_Exp_Casing : External_Casing_Type := As_Is;
568
   --  GNAT
569
   --  The setting of this flag determines the casing of an external name
570
   --  specified explicitly with a string literal. As_Is means the string
571
   --  literal is used as given with no modification to the casing. If
572
   --  Lowercase or Uppercase is set, then the string is forced to all
573
   --  lowercase or all uppercase letters as appropriate. Note that this
574
   --  setting has no effect if the external name is given using an identifier
575
   --  in the case of extended DEC import/export pragmas (in this case the
576
   --  casing is controlled by External_Name_Imp_Casing), and also has no
577
   --  effect if an explicit Link_Name is supplied (a link name is always
578
   --  used exactly as given).
579
 
580
   External_Unit_Compilation_Allowed : Boolean := False;
581
   --  GNATMAKE
582
   --  When True (set by gnatmake switch -x), allow compilation of sources
583
   --  that are not part of any project file.
584
 
585
   Fast_Math : Boolean := False;
586
   --  GNAT
587
   --  Indicates the current setting of Fast_Math mode, as set by the use
588
   --  of a Fast_Math pragma (set on by Fast_Math (On)).
589
 
590
   Float_Format : Character := ' ';
591
   --  GNAT
592
   --  A non-blank value indicates that a Float_Format pragma has been
593
   --  processed, in which case this variable is set to 'I' for IEEE or
594
   --  to 'V' for VAX. The setting of 'V' is only possible on OpenVMS
595
   --  versions of GNAT.
596
 
597
   Float_Format_Long : Character := ' ';
598
   --  GNAT
599
   --  A non-blank value indicates that a Long_Float pragma has been
600
   --  processed (this pragma is recognized only in OpenVMS versions
601
   --  of GNAT), in which case this variable is set to D or G for
602
   --  D_Float or G_Float.
603
 
604
   Force_ALI_Tree_File : Boolean := False;
605
   --  GNAT
606
   --  Force generation of ALI file even if errors are encountered.
607
   --  Also forces generation of tree file if -gnatt is also set.
608
 
609
   Disable_ALI_File : Boolean := False;
610
   --  GNAT
611
   --  Disable generation of ALI file
612
 
613
   Force_Checking_Of_Elaboration_Flags : Boolean := False;
614
   --  GNATBIND
615
   --  True if binding with forced checking of the elaboration flags
616
   --  (-F switch set).
617
 
618
   Force_Compilations : Boolean := False;
619
   --  GNATMAKE, GPRMAKE, GPRBUILD
620
   --  Set to force recompilations even when the objects are up-to-date.
621
 
622
   Full_Path_Name_For_Brief_Errors : Boolean := False;
623
   --  PROJECT MANAGER
624
   --  When True, in Brief_Output mode, each error message line
625
   --  will start with the full path name of the source.
626
   --  When False, only the file name without directory information
627
   --  is used.
628
 
629
   Full_List : Boolean := False;
630
   --  GNAT
631
   --  Set True to generate full source listing with embedded errors
632
 
633
   Full_List_File_Name : String_Ptr := null;
634
   --  GNAT
635
   --  Set to file name to generate full source listing to named file (or if
636
   --  the name is of the form .xxx, then to name.xxx where name is the source
637
   --  file name with extension stripped.
638
 
639
   Generate_Processed_File : Boolean := False;
640
   --  GNAT
641
   --  True when switch -gnateG is used. When True, create in a file
642
   --  <source>.prep, if the source is preprocessed.
643
 
644
   Generate_SCO : Boolean := False;
645
   --  GNAT
646
   --  True when switch -gnateS is used. When True, Source Coverage Obligation
647
   --  (SCO) information is generated and output in the ALI file. See unit
648
   --  Par_SCO for full details.
649
 
650
   Generating_Code : Boolean := False;
651
   --  GNAT
652
   --  True if the frontend finished its work and has called the backend to
653
   --  process the tree and generate the object file.
654
 
655
   Global_Discard_Names : Boolean := False;
656
   --  GNAT, GNATBIND
657
   --  True if a pragma Discard_Names appeared as a configuration pragma for
658
   --  the current compilation unit.
659
 
660
   GNAT_Mode : Boolean := False;
661
   --  GNAT
662
   --  True if compiling in GNAT system mode (-gnatg switch)
663
 
664
   Heap_Size : Nat := 0;
665
   --  GNATBIND
666
   --  Heap size for memory allocations. Valid values are 32 and 64. Only
667
   --  available on VMS.
668
 
669
   HLO_Active : Boolean := False;
670
   --  GNAT
671
   --  True if High Level Optimizer is activated (-gnatH switch)
672
 
673
   Identifier_Character_Set : Character;
674
   --  GNAT
675
   --  This variable indicates the character set to be used for identifiers.
676
   --  The possible settings are:
677
   --    '1'  Latin-5 (ISO-8859-1)
678
   --    '2'  Latin-5 (ISO-8859-2)
679
   --    '3'  Latin-5 (ISO-8859-3)
680
   --    '4'  Latin-5 (ISO-8859-4)
681
   --    '5'  Latin-5 (ISO-8859-5, Cyrillic)
682
   --    '9'  Latin-5 (ISO-8859-9)
683
   --    'p'  PC (US, IBM page 437)
684
   --    '8'  PC (European, IBM page 850)
685
   --    'f'  Full upper set (all distinct)
686
   --    'n'  No upper characters (Ada 83 rules)
687
   --    'w'  Latin-1 plus wide characters allowed in identifiers
688
   --
689
   --  The setting affects the set of letters allowed in identifiers and the
690
   --  upper/lower case equivalences. It does not affect the interpretation of
691
   --  character and string literals, which are always stored using the actual
692
   --  coding in the source program. This variable is initialized to the
693
   --  default value appropriate to the system (in Osint.Initialize), and then
694
   --  reset if a command line switch is used to change the setting.
695
 
696
   Ignore_Rep_Clauses : Boolean := False;
697
   --  GNAT
698
   --  Set True to ignore all representation clauses. Useful when compiling
699
   --  code from foreign compilers for checking or ASIS purposes. Can be
700
   --  set True by use of -gnatI.
701
 
702
   Implementation_Unit_Warnings : Boolean := True;
703
   --  GNAT
704
   --  Set True to active warnings for use of implementation internal units.
705
   --  Can be controlled by use of -gnatwi/-gnatwI.
706
 
707
   Implicit_Packing : Boolean := False;
708
   --  GNAT
709
   --  If set True, then a Size attribute clause on an array is allowed to
710
   --  cause implicit packing instead of generating an error message. Set by
711
   --  use of pragma Implicit_Packing.
712
 
713
   Ineffective_Inline_Warnings : Boolean := False;
714
   --  GNAT
715
   --  Set True to activate warnings if front-end inlining (-gnatN) is not
716
   --  able to actually inline a particular call (or all calls). Can be
717
   --  controlled by use of -gnatwp/-gnatwP.
718
 
719
   Init_Or_Norm_Scalars : Boolean := False;
720
   --  GNAT, GANTBIND
721
   --  Set True if a pragma Initialize_Scalars applies to the current unit.
722
   --  Also set True if a pragma Normalize_Scalars applies.
723
 
724
   Initialize_Scalars : Boolean := False;
725
   --  GNAT
726
   --  Set True if a pragma Initialize_Scalars applies to the current unit.
727
   --  Note that Init_Or_Norm_Scalars is also set to True if this is True.
728
 
729
   Initialize_Scalars_Mode1 : Character := 'I';
730
   Initialize_Scalars_Mode2 : Character := 'N';
731
   --  GNATBIND
732
   --  Set to two characters from -S switch (IN/LO/HI/EV/xx). The default
733
   --  is IN (invalid values), used if no -S switch is used.
734
 
735
   Inline_Active : Boolean := False;
736
   --  GNAT
737
   --  Set True to activate pragma Inline processing across modules. Default
738
   --  for now is not to inline across module boundaries.
739
 
740
   Interface_Library_Unit : Boolean := False;
741
   --  GNATBIND
742
   --  Set to True to indicate that at least one ALI file is an interface ALI:
743
   --  then elaboration flag checks are to be generated in the binder
744
   --  generated file.
745
 
746
   Generate_SCIL : Boolean := False;
747
   --  GNAT
748
   --  Set True to activate SCIL code generation.
749
 
750
   Invalid_Value_Used : Boolean := False;
751
   --  GNAT
752
   --  Set True if a valid Invalid_Value attribute is encountered
753
 
754
   Follow_Links_For_Files : Boolean := False;
755
   --  PROJECT MANAGER
756
   --  Set to True (-eL) to process the project files in trusted mode. If
757
   --  Follow_Links is False, it is assumed that the project doesn't contain
758
   --  any file duplicated through symbolic links (although the latter are
759
   --  still valid if they point to a file which is outside of the project),
760
   --  and that no directory has a name which is a valid source name.
761
 
762
   Follow_Links_For_Dirs : Boolean := False;
763
   --  PROJECT MANAGER
764
   --  Set to True if directories can be links in this project, and therefore
765
   --  additional system calls must be performed to ensure that we always see
766
   --  the same full name for each directory.
767
 
768
   Front_End_Inlining : Boolean := False;
769
   --  GNAT
770
   --  Set True to activate inlining by front-end expansion
771
 
772
   Inline_Processing_Required : Boolean := False;
773
   --  GNAT
774
   --  Set True if inline processing is required. Inline processing is required
775
   --  if an active Inline pragma is processed. The flag is set for a pragma
776
   --  Inline or Inline_Always that is actually active.
777
 
778
   In_Place_Mode : Boolean := False;
779
   --  GNATMAKE
780
   --  Set True to store ALI and object files in place i.e. in the object
781
   --  directory if these files already exist or in the source directory
782
   --  if not.
783
 
784
   Keep_Going : Boolean := False;
785
   --  GNATMAKE, GPRMAKE, GPRBUILD
786
   --  When True signals to ignore compilation errors and keep processing
787
   --  sources until there is no more work.
788
 
789
   Keep_Temporary_Files : Boolean := False;
790
   --  GNATCMD
791
   --  When True the temporary files created by the GNAT driver are not
792
   --  deleted. Set by switch -dn or qualifier /KEEP_TEMPORARY_FILES.
793
 
794
   Leap_Seconds_Support : Boolean := False;
795
   --  GNATBIND
796
   --  Set to True to enable leap seconds support in Ada.Calendar and its
797
   --  children.
798
 
799
   Link_Only : Boolean := False;
800
   --  GNATMAKE, GPRMAKE, GPRBUILD
801
   --  Set to True to skip compile and bind steps (except when Bind_Only is
802
   --  set to True).
803
 
804
   List_Inherited_Aspects : Boolean := False;
805
   --  GNAT
806
   --  List inherited invariants, preconditions, and postconditions from
807
   --  Invariant'Class, Pre'Class, and Post'Class aspects. Also list inherited
808
   --  subtype predicates. Set True by use of -gnatw.l and False by use of
809
   --  -gnatw.L.
810
 
811
   List_Restrictions : Boolean := False;
812
   --  GNATBIND
813
   --  Set to True to list restrictions pragmas that could apply to partition
814
 
815
   List_Units : Boolean := False;
816
   --  GNAT
817
   --  List units in the active library for a compilation (-gnatu switch)
818
 
819
   List_Closure : Boolean := False;
820
   --  GNATBIND
821
   --  List all sources in the closure of a main (-R gnatbind switch)
822
 
823
   List_Dependencies : Boolean := False;
824
   --  GNATMAKE
825
   --  When True gnatmake verifies that the objects are up to date and
826
   --  outputs the list of object dependencies (-M switch).
827
   --  Output depends if -a switch is used or not.
828
   --  This list can be used directly in a Makefile.
829
 
830
   List_Representation_Info : Int range 0 .. 3 := 0;
831
   --  GNAT
832
   --  Set non-zero by -gnatR switch to list representation information.
833
   --  The settings are as follows:
834
   --
835
   --    0 = no listing of representation information (default as above)
836
   --    1 = list rep info for user defined record and array types
837
   --    2 = list rep info for all user defined types and objects
838
   --    3 = like 2, but variable fields are decoded symbolically
839
 
840
   List_Representation_Info_To_File : Boolean := False;
841
   --  GNAT
842
   --  Set true by -gnatRs switch. Causes information from -gnatR/1/2/3 to be
843
   --  written to file.rep (where file is the name of the source file) instead
844
   --  of stdout. For example, if file x.adb is compiled using -gnatR2s then
845
   --  representation info is written to x.adb.ref.
846
 
847
   List_Representation_Info_Mechanisms : Boolean := False;
848
   --  GNAT
849
   --  Set true by -gnatRm switch. Causes information on mechanisms to be
850
   --  included in the representation output information.
851
 
852
   List_Preprocessing_Symbols : Boolean := False;
853
   --  GNAT, GNATPREP
854
   --  Set to True if symbols for preprocessing a source are to be listed
855
   --  before preprocessing occurs. Set to True by switch -s of gnatprep or
856
   --  -s in preprocessing data file for the compiler.
857
 
858
   type Create_Repinfo_File_Proc is access procedure (Src  : String);
859
   type Write_Repinfo_Line_Proc  is access procedure (Info : String);
860
   type Close_Repinfo_File_Proc  is access procedure;
861
   --  Types used for procedure addresses below
862
 
863
   Create_Repinfo_File_Access : Create_Repinfo_File_Proc := null;
864
   Write_Repinfo_Line_Access  : Write_Repinfo_Line_Proc  := null;
865
   Close_Repinfo_File_Access  : Close_Repinfo_File_Proc  := null;
866
   --  GNAT
867
   --  These three locations are left null when operating in non-compiler (e.g.
868
   --  ASIS mode), but when operating in compiler mode, they are set to point
869
   --  to the three corresponding procedures in Osint-C. The reason for this
870
   --  slightly strange interface is to stop Repinfo from dragging in Osint in
871
   --  ASIS mode, which would include lots of unwanted units in the ASIS build.
872
 
873
   type Create_List_File_Proc is access procedure (S : String);
874
   type Write_List_Info_Proc  is access procedure (S : String);
875
   type Close_List_File_Proc  is access procedure;
876
   --  Types used for procedure addresses below
877
 
878
   Create_List_File_Access : Create_List_File_Proc := null;
879
   Write_List_Info_Access  : Write_List_Info_Proc  := null;
880
   Close_List_File_Access  : Close_List_File_Proc  := null;
881
   --  GNAT
882
   --  These three locations are left null when operating in non-compiler
883
   --  (e.g. from the binder), but when operating in compiler mode, they are
884
   --  set to point to the three corresponding procedures in Osint-C. The
885
   --  reason for this slightly strange interface is to prevent Repinfo
886
   --  from dragging in Osint-C in the binder, which would include unwanted
887
   --  units in the binder.
888
 
889
   Locking_Policy : Character := ' ';
890
   --  GNAT, GNATBIND
891
   --  Set to ' ' for the default case (no locking policy specified). Reset to
892
   --  first character (uppercase) of locking policy name if a valid pragma
893
   --  Locking_Policy is encountered.
894
 
895
   Locking_Policy_Sloc : Source_Ptr := No_Location;
896
   --  GNAT, GNATBIND
897
   --  Remember location of previous Locking_Policy pragma. This is used for
898
   --  inconsistency error messages. A value of System_Location is used if the
899
   --  policy is set in package System.
900
 
901
   Look_In_Primary_Dir : Boolean := True;
902
   --  GNAT, GNATBIND, GNATMAKE, GNATCLEAN
903
   --  Set to False if a -I- was present on the command line. When True we are
904
   --  allowed to look in the primary directory to locate other source or
905
   --  library files.
906
 
907
   Make_Steps : Boolean := False;
908
   --  GNATMAKE
909
   --  Set to True when either Compile_Only, Bind_Only or Link_Only is
910
   --  set to True.
911
 
912
   Main_Index : Int := 0;
913
   --  GNATMAKE
914
   --  This is set to non-zero by gnatmake switch -eInnn to indicate that
915
   --  the main program is the nnn unit in a multi-unit source file.
916
 
917
   Mapping_File_Name : String_Ptr := null;
918
   --  GNAT
919
   --  File name of mapping between unit names, file names and path names.
920
   --  (given by switch -gnatem)
921
 
922
   Maximum_Messages : Int := 9999;
923
   --  GNAT, GNATBIND
924
   --  Maximum default number of errors before compilation is terminated, or in
925
   --  the case of GNAT, maximum number of warnings before further warnings are
926
   --  suppressed. Can be overridden by -gnatm (GNAT) or -m (GNATBIND) switch.
927
 
928
   Maximum_File_Name_Length : Int;
929
   --  GNAT, GNATBIND
930
   --  Maximum number of characters allowed in a file name, not counting the
931
   --  extension, as set by the appropriate switch. If no switch is given,
932
   --  then this value is initialized by Osint to the appropriate value.
933
 
934
   Maximum_Processes : Positive := 1;
935
   --  GNATMAKE, GPRMAKE, GPRBUILD
936
   --  Maximum number of processes that should be spawned to carry out
937
   --  compilations.
938
 
939
   Minimal_Recompilation : Boolean := False;
940
   --  GNATMAKE
941
   --  Set to True if minimal recompilation mode requested
942
 
943
   Special_Exception_Package_Used : Boolean := False;
944
   --  GNAT
945
   --  Set to True if either of the unit GNAT.Most_Recent_Exception or
946
   --  GNAT.Exception_Traces is with'ed. Used to inhibit transformation of
947
   --  local raise statements into gotos in the presence of either package.
948
 
949
   Multiple_Unit_Index : Int;
950
   --  GNAT
951
   --  This is set non-zero if the current unit is being compiled in multiple
952
   --  unit per file mode, meaning that the current unit is selected from the
953
   --  sequence of units in the current source file, using the value stored
954
   --  in this variable (e.g. 2 = select second unit in file). A value of
955
   --  zero indicates that we are in normal (one unit per file) mode.
956
 
957
   No_Main_Subprogram : Boolean := False;
958
   --  GNATMAKE, GNATBIND
959
   --  Set to True if compilation/binding of a program without main
960
   --  subprogram requested.
961
 
962
   No_Run_Time_Mode : Boolean := False;
963
   --  GNAT, GNATBIND
964
   --  This flag is set True if a No_Run_Time pragma is encountered. See
965
   --  spec of Rtsfind for a full description of handling of this pragma.
966
 
967
   No_Split_Units : Boolean := False;
968
   --  GPRBUILD
969
   --  Set to True with switch --no-split-units. When True, unit sources, spec,
970
   --  body and subunits, must all be in the same project.This is checked after
971
   --  each compilation.
972
 
973
   No_Stdinc : Boolean := False;
974
   --  GNAT, GNATBIND, GNATMAKE, GNATFIND, GNATXREF
975
   --  Set to True if no default source search dirs added to search list
976
 
977
   No_Stdlib : Boolean := False;
978
   --  GNATMAKE, GNATBIND, GNATFIND, GNATXREF
979
   --  Set to True if no default library search dirs added to search list
980
 
981
   No_Strict_Aliasing : Boolean := False;
982
   --  GNAT
983
   --  Set True if pragma No_Strict_Aliasing with no parameters encountered
984
 
985
   Normalize_Scalars : Boolean := False;
986
   --  GNAT, GNATBIND
987
   --  Set True if a pragma Normalize_Scalars applies to the current unit.
988
   --  Note that Init_Or_Norm_Scalars is also set to True if this is True.
989
 
990
   Object_Directory_Present : Boolean := False;
991
   --  GNATMAKE
992
   --  Set to True when an object directory is specified with option -D
993
 
994
   One_Compilation_Per_Obj_Dir : Boolean := False;
995
   --  GNATMAKE, GPRBUILD
996
   --  Set to True with switch --single-compile-per-obj-dir. When True, there
997
   --  cannot be simultaneous compilations with the object files in the same
998
   --  object directory, if project files are used.
999
 
1000
   type Operating_Mode_Type is (Check_Syntax, Check_Semantics, Generate_Code);
1001
   Operating_Mode : Operating_Mode_Type := Generate_Code;
1002
   --  GNAT
1003
   --  Indicates the operating mode of the compiler. The default is generate
1004
   --  code, which runs the parser, semantics and backend. Switches can be
1005
   --  used to set syntax checking only mode, or syntax and semantics checking
1006
   --  only mode. Operating_Mode can also be modified as a result of detecting
1007
   --  errors during the compilation process. In particular if any serious
1008
   --  error is detected then this flag is reset from Generate_Code to
1009
   --  Check_Semantics after generating an error message.
1010
 
1011
   Optimize_Alignment : Character := 'O';
1012
   --  Setting of Optimize_Alignment, set to T/S/O for time/space/off. Can
1013
   --  be modified by use of pragma Optimize_Alignment.
1014
 
1015
   Optimize_Alignment_Local : Boolean := False;
1016
   --  Set True if Optimize_Alignment mode is set by a local configuration
1017
   --  pragma that overrides the gnat.adc (or other configuration file) default
1018
   --  so that the unit is not dependent on the default setting. Also always
1019
   --  set True for internal units, since these always have a default setting
1020
   --  of Optimize_Alignment (Off) that is enforced (essentially equivalent to
1021
   --  them all having such an explicit pragma in each unit).
1022
 
1023
   Original_Operating_Mode : Operating_Mode_Type := Generate_Code;
1024
   --  GNAT
1025
   --  Indicates the original operating mode of the compiler as set by compiler
1026
   --  options. This is identical to Operating_Mode except that this is not
1027
   --  affected by errors.
1028
 
1029
   Optimization_Level : Int;
1030
   pragma Import (C, Optimization_Level, "optimize");
1031
   --  Constant reflecting the optimization level (0,1,2,3 for -O0,-O1,-O2,-O3)
1032
   --  See jmissing.c and aamissing.c for definitions for dotnet/jgnat and
1033
   --  GNAAMP back ends.
1034
 
1035
   Optimize_Size : Int;
1036
   pragma Import (C, Optimize_Size, "optimize_size");
1037
   --  Constant reflecting setting of -Os (optimize for size). Set to nonzero
1038
   --  in -Os mode and set to zero otherwise. See jmissing.c and aamissing.c
1039
   --  for definitions of "optimize_size" for dotnet/jgnat and GNAAMP backends
1040
 
1041
   Output_File_Name_Present : Boolean := False;
1042
   --  GNATBIND, GNAT, GNATMAKE, GPRMAKE
1043
   --  Set to True when the output C file name is given with option -o for
1044
   --  GNATBIND, when the object file name is given with option -gnatO for GNAT
1045
   --  or when the executable is given with option -o for GNATMAKE or GPRMAKE.
1046
 
1047
   Output_Linker_Option_List : Boolean := False;
1048
   --  GNATBIND
1049
   --  True if output of list of linker options is requested (-K switch set)
1050
 
1051
   Output_ALI_List   : Boolean := False;
1052
   ALI_List_Filename : String_Ptr;
1053
   --  GNATBIND
1054
   --  True if output of list of ALIs is requested (-A switch set). List is
1055
   --  output under the given filename, or standard output if not specified.
1056
 
1057
   Output_Object_List   : Boolean := False;
1058
   Object_List_Filename : String_Ptr;
1059
   --  GNATBIND
1060
   --  True if output of list of objects is requested (-O switch set). List is
1061
   --  output under the given filename, or standard output if not specified.
1062
 
1063
   Overflow_Checks_Unsuppressed : Boolean := False;
1064
   --  GNAT
1065
   --  Set to True if at least one occurrence of pragma Unsuppress
1066
   --  (All_Checks|Overflow_Checks) has been processed.
1067
 
1068
   Persistent_BSS_Mode : Boolean := False;
1069
   --  GNAT
1070
   --  True if a Persistent_BSS configuration pragma is in effect, causing
1071
   --  potentially persistent data to be placed in the persistent_bss section.
1072
 
1073
   Pessimistic_Elab_Order : Boolean := False;
1074
   --  GNATBIND
1075
   --  True if pessimistic elaboration order is to be chosen (-p switch set)
1076
 
1077
   Polling_Required : Boolean := False;
1078
   --  GNAT
1079
   --  Set to True if polling for asynchronous abort is enabled by using
1080
   --  the -gnatP option for GNAT.
1081
 
1082
   Preprocessing_Data_File : String_Ptr := null;
1083
   --  GNAT
1084
   --  Set by switch -gnatep=. The file name of the preprocessing data file.
1085
 
1086
   Preprocessing_Symbol_Defs : String_List_Access := new String_List (1 .. 4);
1087
   --  An extensible array to temporarily stores symbol definitions specified
1088
   --  on the command line with -gnateD switches.
1089
   --  What is this magic constant 4 ???
1090
   --  What is extensible about this fixed length array ???
1091
 
1092
   Preprocessing_Symbol_Last : Natural := 0;
1093
   --  Index of last symbol definition in array Symbol_Definitions
1094
 
1095
   Print_Generated_Code : Boolean := False;
1096
   --  GNAT
1097
   --  Set to True to enable output of generated code in source form. This
1098
   --  flag is set by the -gnatG switch.
1099
 
1100
   Print_Standard : Boolean := False;
1101
   --  GNAT
1102
   --  Set to true to enable printing of package standard in source form.
1103
   --  This flag is set by the -gnatS switch
1104
 
1105
   Propagate_Exceptions : Boolean := False;
1106
   --  GNAT
1107
   --  Indicates if subprogram descriptor exception tables should be
1108
   --  built for imported subprograms. Set True if a Propagate_Exceptions
1109
   --  pragma applies to the extended main unit.
1110
 
1111
   type Usage is (Unknown, Not_In_Use, In_Use);
1112
   Project_File_In_Use : Usage := Unknown;
1113
   --  GNAT
1114
   --  Indicates if a project file is used or not. Set to In_Use by the first
1115
   --  SFNP pragma.
1116
 
1117
   Queuing_Policy : Character := ' ';
1118
   --  GNAT, GNATBIND
1119
   --  Set to ' ' for the default case (no queuing policy specified). Reset to
1120
   --  first character (uppercase) of locking policy name if a valid
1121
   --  Queuing_Policy pragma is encountered.
1122
 
1123
   Queuing_Policy_Sloc : Source_Ptr := No_Location;
1124
   --  GNAT, GNATBIND
1125
   --  Remember location of previous Queuing_Policy pragma. This is used for
1126
   --  inconsistency error messages. A value of System_Location is used if the
1127
   --  policy is set in package System.
1128
 
1129
   Quiet_Output : Boolean := False;
1130
   --  GNATMAKE, GNATCLEAN, GPRMAKE, GPRBUILD, GPRCLEAN
1131
   --  Set to True if the tool should not have any output if there are no
1132
   --  errors or warnings.
1133
 
1134
   Replace_In_Comments : Boolean := False;
1135
   --  GNATPREP
1136
   --  Set to True if -C switch used
1137
 
1138
   RTS_Lib_Path_Name : String_Ptr := null;
1139
   RTS_Src_Path_Name : String_Ptr := null;
1140
   --  GNAT
1141
   --  Set to the "adalib" and "adainclude" directories of the run time
1142
   --  specified by --RTS=.
1143
 
1144
   RTS_Switch : Boolean := False;
1145
   --  GNAT, GNATMAKE, GNATBIND, GNATLS, GNATFIND, GNATXREF
1146
   --  Set to True when the --RTS switch is set
1147
 
1148
   Run_Path_Option : Boolean := True;
1149
   --  GNATMAKE, GNATLINK
1150
   --  Set to False when no run_path_option should be issued to the linker
1151
 
1152
   Search_Directory_Present : Boolean := False;
1153
   --  GNAT
1154
   --  Set to True when argument is -I. Reset to False when next argument, a
1155
   --  search directory path is taken into account. Note that this is quite
1156
   --  different from other switches in this section in that it is only set in
1157
   --  a transitory manner as a result of scanning a -I switch with no file
1158
   --  name, and if set, is an indication that the next argument is to be
1159
   --  treated as a file name.
1160
 
1161
   Sec_Stack_Used : Boolean := False;
1162
   --  GNAT, GBATBIND
1163
   --  Set True if generated code uses the System.Secondary_Stack package. For
1164
   --  the binder, set if any unit uses the secondary stack package.
1165
 
1166
   Setup_Projects : Boolean := False;
1167
   --  GNAT DRIVER
1168
   --  Set to True for GNAT SETUP: the Project Manager creates non existing
1169
   --  object, library and exec directories.
1170
 
1171
   Shared_Libgnat : Boolean;
1172
   --  GNATBIND
1173
   --  Set to True if a shared libgnat is requested by using the -shared option
1174
   --  for GNATBIND and to False when using the -static option. The value of
1175
   --  this flag is set by Gnatbind.Scan_Bind_Arg.
1176
 
1177
   Short_Circuit_And_Or : Boolean := False;
1178
   --  GNAT
1179
   --  Set True if a pragma Short_Circuit_And_Or applies to the current unit.
1180
 
1181
   Short_Descriptors : Boolean := False;
1182
   --  GNAT
1183
   --  Set True if a pragma Short_Descriptors applies to the current unit.
1184
 
1185
   Sprint_Line_Limit : Nat := 72;
1186
   --  GNAT
1187
   --  Limit values for chopping long lines in Sprint output, can be reset
1188
   --  by use of NNN parameter with -gnatG or -gnatD switches.
1189
 
1190
   Stack_Checking_Enabled : Boolean;
1191
   --  GNAT
1192
   --  Set to indicate if -fstack-check switch is set for the compilation. True
1193
   --  means that the switch is set, so that stack checking is enabled. False
1194
   --  means that the switch is not set (no stack checking). This value is
1195
   --  obtained from the external imported value flag_stack_check in the gcc
1196
   --  backend (see Frontend) and may be referenced throughout the compilation
1197
   --  phases.
1198
 
1199
   Style_Check : Boolean := False;
1200
   --  GNAT
1201
   --  Set True to perform style checks. Activates checks carried out in
1202
   --  package Style (see body of this package for details of checks). This
1203
   --  flag is set True by either the -gnatg or -gnaty switches.
1204
 
1205
   Suppress_All_Inlining : Boolean := False;
1206
   --  GNAT
1207
   --  Set by -fno-inline. Suppresses all inlining, both front end and back end
1208
   --  regardless of any other switches that are set.
1209
 
1210
   Suppress_Control_Flow_Optimizations : Boolean := False;
1211
   --  GNAT
1212
   --  Set by -fpreserve-control-flow. Suppresses control flow optimizations
1213
   --  that interfere with coverage analysis based on the object code.
1214
 
1215
   System_Extend_Pragma_Arg : Node_Id := Empty;
1216
   --  GNAT
1217
   --  Set non-empty if and only if a correct Extend_System pragma was present
1218
   --  in which case it points to the argument of the pragma, and the name can
1219
   --  be located as Chars (Expression (System_Extend_Pragma_Arg)).
1220
 
1221
   System_Extend_Unit : Node_Id := Empty;
1222
   --  GNAT
1223
   --  This is set to Empty if GNAT_Mode is set, since pragma Extend_System
1224
   --  is never appropriate in GNAT_Mode (and causes troubles, including
1225
   --  bogus circularities, if we try to compile the run-time library with
1226
   --  a System extension). If GNAT_Mode is not set, then System_Extend_Unit
1227
   --  is a copy of the value set in System_Extend_Pragma_Arg.
1228
 
1229
   Subunits_Missing : Boolean := False;
1230
   --  GNAT
1231
   --  This flag is set true if missing subunits are detected with code
1232
   --  generation active. This causes code generation to be skipped.
1233
 
1234
   Suppress_Checks : Boolean := False;
1235
   --  GNAT
1236
   --  Set to True if -gnatp (suppress all checks) switch present.
1237
 
1238
   Suppress_Options : Suppress_Array;
1239
   --  GNAT
1240
   --  Flags set True to suppress corresponding check, i.e. add an implicit
1241
   --  pragma Suppress at the outer level of each unit compiled. Note that
1242
   --  these suppress actions can be overridden by the use of the Unsuppress
1243
   --  pragma. This variable is initialized by Osint.Initialize.
1244
 
1245
   Suppress_Back_Annotation : Boolean := False;
1246
   --  GNAT
1247
   --  This flag is set True if back annotation of representation information
1248
   --  is to be suppressed. This is set if neither -gnatt or -gnatR0-3 is set.
1249
   --  This avoids unnecessary time being spent on back annotation.
1250
 
1251
   Table_Factor : Int := 1;
1252
   --  GNAT
1253
   --  Factor by which all initial table sizes set in Alloc are multiplied.
1254
   --  Used in Table to calculate initial table sizes (the initial table size
1255
   --  is the value in Alloc, used as the Table_Initial parameter value,
1256
   --  multiplied by the factor given here. The default value is used if no
1257
   --  -gnatT switch appears.
1258
 
1259
   Tagged_Type_Expansion : Boolean := True;
1260
   --  GNAT
1261
   --  Set True if tagged types and interfaces should be expanded by the
1262
   --  front-end. If False, the original tree is left unexpanded for tagged
1263
   --  types and dispatching calls, assuming the underlying target supports
1264
   --  it (e.g. in the JVM case).
1265
 
1266
   Task_Dispatching_Policy : Character := ' ';
1267
   --  GNAT, GNATBIND
1268
   --  Set to ' ' for the default case (no task dispatching policy specified).
1269
   --  Reset to first character (uppercase) of task dispatching policy name
1270
   --  if a valid Task_Dispatching_Policy pragma is encountered.
1271
 
1272
   Task_Dispatching_Policy_Sloc : Source_Ptr := No_Location;
1273
   --  GNAT, GNATBIND
1274
   --  Remember location of previous Task_Dispatching_Policy pragma. This is
1275
   --  used for inconsistency error messages. A value of System_Location is
1276
   --  used if the policy is set in package System.
1277
 
1278
   Tasking_Used : Boolean := False;
1279
   --  Set True if any tasking construct is encountered. Used to activate the
1280
   --  output of the Q, L and T lines in ALI files.
1281
 
1282
   Time_Slice_Set : Boolean := False;
1283
   --  GNATBIND
1284
   --  Set True if a pragma Time_Slice is processed in the main unit, or
1285
   --  if the -gnatTnn switch is present to set a time slice value.
1286
 
1287
   Time_Slice_Value : Nat;
1288
   --  GNATBIND
1289
   --  Time slice value. Valid only if Time_Slice_Set is True, i.e. if
1290
   --  Time_Slice pragma has been processed. Set to the time slice value in
1291
   --  microseconds. Negative values are stored as zero, and the value is not
1292
   --  larger than 1_000_000_000 (1000 seconds). Values larger than this are
1293
   --  reset to this maximum. This can also be set with the -gnatTnn switch.
1294
 
1295
   Tolerate_Consistency_Errors : Boolean := False;
1296
   --  GNATBIND
1297
   --  Tolerate time stamp and other consistency errors. If this flag is set to
1298
   --  True (-t), then inconsistencies result in warnings rather than errors.
1299
 
1300
   Treat_Categorization_Errors_As_Warnings : Boolean := False;
1301
   --  Normally categorization errors are true illegalities. If this switch
1302
   --  is set, then such errors result in warning messages rather than error
1303
   --  messages. Set True by -gnateP (P for Pure/Preelaborate).
1304
 
1305
   Treat_Restrictions_As_Warnings : Boolean := False;
1306
   --  GNAT
1307
   --  Set True to treat pragma Restrictions as Restriction_Warnings. Set by
1308
   --  -gnatr switch.
1309
 
1310
   Tree_Output : Boolean := False;
1311
   --  GNAT
1312
   --  Set to True (-gnatt) to generate output tree file
1313
 
1314
   True_VMS_Target : Boolean := False;
1315
   --  Set True if we are on a VMS target. The setting of this flag reflects
1316
   --  the true state of the compile, unlike Targparm.OpenVMS_On_Target which
1317
   --  can also be true when debug flag m is set (-gnatdm). This is used in the
1318
   --  few cases where we do NOT want -gnatdm to trigger the VMS behavior.
1319
 
1320
   Try_Semantics : Boolean := False;
1321
   --  GNAT
1322
   --  Flag set to force attempt at semantic analysis, even if parser errors
1323
   --  occur. This will probably cause blowups at this stage in the game. On
1324
   --  the other hand, most such blowups will be caught cleanly and simply
1325
   --  say compilation abandoned. This flag is set to True by -gnatq or -gnatQ.
1326
 
1327
   Unchecked_Shared_Lib_Imports : Boolean := False;
1328
   --  GPRBUILD
1329
   --  Set to True when shared library projects are allowed to import projects
1330
   --  that are not shared library projects. Set by switch
1331
   --  --unchecked-shared-lib-imports.
1332
 
1333
   Undefined_Symbols_Are_False : Boolean := False;
1334
   --  GNAT, GNATPREP
1335
   --  Set to True by switch -u of gnatprep or -u in the preprocessing data
1336
   --  file for the compiler. Indicates that while preprocessing sources,
1337
   --  symbols that are not defined have the value FALSE.
1338
 
1339
   Unique_Error_Tag : Boolean := Tag_Errors;
1340
   --  GNAT
1341
   --  Indicates if error messages are to be prefixed by the string error:
1342
   --  Initialized from Tag_Errors, can be forced on with the -gnatU switch.
1343
 
1344
   Universal_Addressing_On_AAMP : Boolean := False;
1345
   --  GNAAMP
1346
   --  Indicates if library-level objects should be accessed and updated using
1347
   --  universal addressing instructions on the AAMP architecture. This flag is
1348
   --  set to True when pragma Universal_Data is given as a configuration
1349
   --  pragma.
1350
 
1351
   Unreserve_All_Interrupts : Boolean := False;
1352
   --  GNAT, GNATBIND
1353
   --  Normally set False, set True if a valid Unreserve_All_Interrupts pragma
1354
   --  appears anywhere in the main unit for GNAT, or if any ALI file has the
1355
   --  corresponding attribute set in GNATBIND.
1356
 
1357
   Upper_Half_Encoding : Boolean := False;
1358
   --  GNAT, GNATBIND
1359
   --  Normally set False, indicating that upper half ISO 8859-1 characters are
1360
   --  used in the normal way to represent themselves. If the wide character
1361
   --  encoding method uses the upper bit for this encoding, then this flag is
1362
   --  set True, and upper half characters in the source indicate the start of
1363
   --  a wide character sequence. Set by -gnatW or -W switches.
1364
 
1365
   Use_Include_Path_File : Boolean := False;
1366
   --  GNATMAKE, GPRBUILD
1367
   --  When True, create a source search path file, even when a mapping file
1368
   --  is used.
1369
 
1370
   Usage_Requested : Boolean := False;
1371
   --  GNAT, GNATBIND, GNATMAKE
1372
   --  Set to True if -h (-gnath for the compiler) switch encountered
1373
   --  requesting usage information
1374
 
1375
   Use_Expression_With_Actions : Boolean;
1376
   --  The N_Expression_With_Actions node has been introduced relatively
1377
   --  recently, and not all back ends are prepared to handle it yet. So
1378
   --  we use this flag to suppress its use during a transitional period.
1379
   --  Currently the default is False for all cases (set in gnat1drv).
1380
   --  The default can be modified using -gnatd.X/-gnatd.Y.
1381
 
1382
   Use_Pragma_Linker_Constructor : Boolean := False;
1383
   --  GNATBIND
1384
   --  True if pragma Linker_Constructor applies to adainit
1385
 
1386
   Use_VADS_Size : Boolean := False;
1387
   --  GNAT
1388
   --  Set to True if a valid pragma Use_VADS_Size is processed
1389
 
1390
   Validity_Checks_On  : Boolean := True;
1391
   --  GNAT
1392
   --  This flag determines if validity checking is on or off. The initial
1393
   --  state is on, and the required default validity checks are active. The
1394
   --  actual set of checks that is performed if Validity_Checks_On is set is
1395
   --  defined by the switches in package Validsw. The Validity_Checks_On flag
1396
   --  is controlled by pragma Validity_Checks (On | Off), and also some
1397
   --  generated compiler code (typically code that has to do with validity
1398
   --  check generation) is compiled with this flag set to False. This flag is
1399
   --  set to False by the -gnatp switch.
1400
 
1401
   Verbose_Mode : Boolean := False;
1402
   --  GNAT, GNATBIND, GNATMAKE, GNATLINK, GNATLS, GNATNAME, GNATCLEAN,
1403
   --  GPRMAKE, GPRBUILD, GPRCLEAN
1404
   --  Set to True to get verbose mode (full error message text and location
1405
   --  information sent to standard output, also header, copyright and summary)
1406
 
1407
   type Verbosity_Level_Type is (None, Low, Medium, High);
1408
   pragma Ordered (Verbosity_Level_Type);
1409
   Verbosity_Level : Verbosity_Level_Type := High;
1410
   --  GNATMAKE, GPRMAKE
1411
   --  Modified by gnatmake or gprmake switches -v, -vl, -vm, -vh. Indicates
1412
   --  the level of verbosity of informational messages:
1413
   --
1414
   --  In Low Verbosity, the reasons why a source is recompiled, the name
1415
   --  of the executable and the reason it must be rebuilt is output.
1416
   --
1417
   --  In Medium Verbosity, additional lines are output for each ALI file
1418
   --  that is checked.
1419
   --
1420
   --  In High Verbosity, additional lines are output when the ALI file
1421
   --  is part of an Ada library, is read-only or is part of the runtime.
1422
 
1423
   Warn_On_Ada_2005_Compatibility : Boolean := True;
1424
   --  GNAT
1425
   --  Set to True to generate all warnings on Ada 2005 compatibility issues,
1426
   --  including warnings on Ada 2005 obsolescent features used in Ada 2005
1427
   --  mode. Set False by -gnatwY.
1428
 
1429
   Warn_On_Ada_2012_Compatibility : Boolean := True;
1430
   --  GNAT
1431
   --  Set to True to generate all warnings on Ada 2012 compatibility issues,
1432
   --  including warnings on Ada 2012 obsolescent features used in Ada 2012
1433
   --  mode. Set False by -gnatwY.
1434
 
1435
   Warn_On_All_Unread_Out_Parameters : Boolean := False;
1436
   --  GNAT
1437
   --  Set to True to generate warnings in all cases where a variable is
1438
   --  modified by being passed as to an OUT formal, but the resulting value is
1439
   --  never read. The default is that this warning is suppressed, except in
1440
   --  the case of
1441
 
1442
   Warn_On_Assertion_Failure : Boolean := True;
1443
   --  GNAT
1444
   --  Set to True to activate warnings on assertions that can be determined
1445
   --  at compile time will always fail. Set false by -gnatw.A.
1446
 
1447
   Warn_On_Assumed_Low_Bound : Boolean := True;
1448
   --  GNAT
1449
   --  Set to True to activate warnings for string parameters that are indexed
1450
   --  with literals or S'Length, presumably assuming a lower bound of one. Set
1451
   --  False by -gnatwW.
1452
 
1453
   Warn_On_Atomic_Synchronization : Boolean := False;
1454
   --  GNAT
1455
   --  Set to True to generate information messages for atomic synchronization.
1456
   --  Set True by use of -gnatw.n.
1457
 
1458
   Warn_On_Bad_Fixed_Value : Boolean := False;
1459
   --  GNAT
1460
   --  Set to True to generate warnings for static fixed-point expression
1461
   --  values that are not an exact multiple of the small value of the type.
1462
 
1463
   Warn_On_Biased_Representation : Boolean := True;
1464
   --  GNAT
1465
   --  Set to True to generate warnings for size clauses, component clauses
1466
   --  and component_size clauses that force biased representation. Set False
1467
   --  by -gnatw.B.
1468
 
1469
   Warn_On_Constant : Boolean := False;
1470
   --  GNAT
1471
   --  Set to True to generate warnings for variables that could be declared
1472
   --  as constants. Modified by use of -gnatwk/K.
1473
 
1474
   Warn_On_Deleted_Code : Boolean := False;
1475
   --  GNAT
1476
   --  Set to True to generate warnings for code deleted by the front end
1477
   --  for conditional statements whose outcome is known at compile time.
1478
   --  Modified by use of -gnatwt/T.
1479
 
1480
   Warn_On_Dereference : Boolean := False;
1481
   --  GNAT
1482
   --  Set to True to generate warnings for implicit dereferences for array
1483
   --  indexing and record component access. Modified by use of -gnatwd/D.
1484
 
1485
   Warn_On_Export_Import : Boolean := True;
1486
   --  GNAT
1487
   --  Set to True to generate warnings for suspicious use of export or
1488
   --  import pragmas. Modified by use of -gnatwx/X.
1489
 
1490
   Warn_On_Hiding : Boolean := False;
1491
   --  GNAT
1492
   --  Set to True to generate warnings if a declared entity hides another
1493
   --  entity. The default is that this warning is suppressed.
1494
 
1495
   Warn_On_Modified_Unread : Boolean := False;
1496
   --  GNAT
1497
   --  Set to True to generate warnings if a variable is assigned but is never
1498
   --  read. Also controls warnings for similar cases involving out parameters,
1499
   --  but only if there is only one out parameter for the procedure involved.
1500
   --  The default is that this warning is suppressed.
1501
 
1502
   Warn_On_No_Value_Assigned : Boolean := True;
1503
   --  GNAT
1504
   --  Set to True to generate warnings if no value is ever assigned to a
1505
   --  variable that is at least partially uninitialized. Set to false to
1506
   --  suppress such warnings. The default is that such warnings are enabled.
1507
 
1508
   Warn_On_Non_Local_Exception : Boolean := False;
1509
   --  GNAT
1510
   --  Set to True to generate warnings for non-local exception raises and also
1511
   --  handlers that can never handle a local raise. This warning is only ever
1512
   --  generated if pragma Restrictions (No_Exception_Propagation) is set. The
1513
   --  default is not to generate the warnings except that if the source has
1514
   --  at least one exception handler, and this restriction is set, and the
1515
   --  warning was not explicitly turned off, then it is turned on by default.
1516
 
1517
   No_Warn_On_Non_Local_Exception : Boolean := False;
1518
   --  GNAT
1519
   --  This is set to True if the above warning is explicitly suppressed. We
1520
   --  use this to avoid turning it on by default when No_Exception_Propagation
1521
   --  restriction is set and an exception handler is present.
1522
 
1523
   Warn_On_Object_Renames_Function : Boolean := False;
1524
   --  GNAT
1525
   --  Set to True to generate warnings when a function result is renamed as
1526
   --  an object. The default is that this warning is disabled.
1527
 
1528
   Warn_On_Obsolescent_Feature : Boolean := False;
1529
   --  GNAT
1530
   --  Set to True to generate warnings on use of any feature in Annex or if a
1531
   --  subprogram is called for which a pragma Obsolescent applies.
1532
 
1533
   Warn_On_Overlap : Boolean := False;
1534
   --  GNAT
1535
   --  Set to True to generate warnings when a writable actual which is not
1536
   --  a by-copy type overlaps with another actual in a subprogram call.
1537
 
1538
   Warn_On_Questionable_Missing_Parens : Boolean := True;
1539
   --  GNAT
1540
   --  Set to True to generate warnings for cases where parentheses are missing
1541
   --  and the usage is questionable, because the intent is unclear.
1542
 
1543
   Warn_On_Parameter_Order : Boolean := False;
1544
   --  GNAT
1545
   --  Set to True to generate warnings for cases where the argument list for
1546
   --  a call is a sequence of identifiers that match the formal identifiers,
1547
   --  but are in the wrong order.
1548
 
1549
   Warn_On_Redundant_Constructs : Boolean := False;
1550
   --  GNAT
1551
   --  Set to True to generate warnings for redundant constructs (e.g. useless
1552
   --  assignments/conversions). The default is that this warning is disabled.
1553
 
1554
   Warn_On_Reverse_Bit_Order : Boolean := True;
1555
   --  GNAT
1556
   --  Set to True to generate warning (informational) messages for component
1557
   --  clauses that are affected by non-standard bit-order. The default is
1558
   --  that this warning is enabled.
1559
 
1560
   Warn_On_Suspicious_Contract : Boolean := False;
1561
   --  GNAT
1562
   --  Set to True to generate warnings for suspicious contracts expressed as
1563
   --  pragmas or aspects precondition and postcondition. The default is that
1564
   --  this warning is disabled.
1565
 
1566
   Warn_On_Suspicious_Modulus_Value : Boolean := True;
1567
   --  GNAT
1568
   --  Set to True to generate warnings for suspicious modulus values. The
1569
   --  default is that this warning is enabled.
1570
 
1571
   Warn_On_Unchecked_Conversion : Boolean := True;
1572
   --  GNAT
1573
   --  Set to True to generate warnings for unchecked conversions that may have
1574
   --  non-portable semantics (e.g. because sizes of types differ). The default
1575
   --  is that this warning is enabled.
1576
 
1577
   Warn_On_Unordered_Enumeration_Type : Boolean := False;
1578
   --  GNAT
1579
   --  Set to True to generate warnings for inappropriate uses (comparisons
1580
   --  and explicit ranges) on unordered enumeration types (which includes
1581
   --  all enumeration types for which pragma Ordered is not given). The
1582
   --  default is that this warning is disabled.
1583
 
1584
   Warn_On_Unrecognized_Pragma : Boolean := True;
1585
   --  GNAT
1586
   --  Set to True to generate warnings for unrecognized pragmas. The default
1587
   --  is that this warning is enabled.
1588
 
1589
   Warn_On_Unrepped_Components : Boolean := False;
1590
   --  GNAT
1591
   --  Set to True to generate warnings for the case of components of record
1592
   --  which have a record representation clause but this component does not
1593
   --  have a component clause. The default is that this warning is disabled.
1594
 
1595
   Warn_On_Warnings_Off : Boolean := False;
1596
   --  GNAT
1597
   --  Set to True to generate warnings for use of Pragma Warnings (Off, ent),
1598
   --  where either the pragma is never used, or it could be replaced by a
1599
   --  pragma Unmodified or Unreferenced.
1600
 
1601
   type Warning_Mode_Type is (Suppress, Normal, Treat_As_Error);
1602
   Warning_Mode : Warning_Mode_Type := Normal;
1603
   --  GNAT, GNATBIND
1604
   --  Controls treatment of warning messages. If set to Suppress, warning
1605
   --  messages are not generated at all. In Normal mode, they are generated
1606
   --  but do not count as errors. In Treat_As_Error mode, warning messages
1607
   --  are generated and are treated as errors.
1608
 
1609
   Wide_Character_Encoding_Method : WC_Encoding_Method := WCEM_Brackets;
1610
   --  GNAT, GNATBIND
1611
   --  Method used for encoding wide characters in the source program. See
1612
   --  description of type in unit System.WCh_Con for a list of the methods
1613
   --  that are currently supported. Note that brackets notation is always
1614
   --  recognized in source programs regardless of the setting of this
1615
   --  variable. The default setting causes only the brackets notation to be
1616
   --  recognized. If this is the main unit, this setting also controls the
1617
   --  output of the W=? parameter in the ALI file, which is used to provide
1618
   --  the default for encoding [Wide_[Wide_]]Text_IO files. For the binder,
1619
   --  the value set here overrides this main unit default.
1620
 
1621
   Wide_Character_Encoding_Method_Specified : Boolean := False;
1622
   --  GNAT, GNATBIND
1623
   --  Set True if the value in Wide_Character_Encoding_Method was set as
1624
   --  a result of an explicit -gnatW? or -W? switch. False otherwise.
1625
 
1626
   Xref_Active : Boolean := True;
1627
   --  GNAT
1628
   --  Set if cross-referencing is enabled (i.e. xref info in ALI files)
1629
 
1630
   Zero_Formatting : Boolean := False;
1631
   --  GNATBIND
1632
   --  Do no formatting (no title, no leading spaces, no empty lines) in
1633
   --  auxiliary outputs (-e, -K, -l, -R).
1634
 
1635
   ----------------------------
1636
   -- Configuration Settings --
1637
   ----------------------------
1638
 
1639
   --  These are settings that are used to establish the mode at the start of
1640
   --  each unit. The values defined below can be affected either by command
1641
   --  line switches, or by the use of appropriate configuration pragmas in a
1642
   --  configuration pragma file.
1643
 
1644
   Ada_Version_Config : Ada_Version_Type;
1645
   --  GNAT
1646
   --  This is the value of the configuration switch for the Ada 83 mode, as
1647
   --  set by the command line switches -gnat83/95/05, and possibly modified by
1648
   --  the use of configuration pragmas Ada_*. This switch is used to set the
1649
   --  initial value for Ada_Version mode at the start of analysis of a unit.
1650
   --  Note however that the setting of this flag is ignored for internal and
1651
   --  predefined units (which are always compiled in the most up to date
1652
   --  version of Ada).
1653
 
1654
   Ada_Version_Explicit_Config : Ada_Version_Type;
1655
   --  GNAT
1656
   --  This is set in the same manner as Ada_Version_Config. The difference is
1657
   --  that the setting of this flag is not ignored for internal and predefined
1658
   --  units, which for some purposes do indeed access this value, regardless
1659
   --  of the fact that they are compiled the most up to date ada version).
1660
 
1661
   Assertions_Enabled_Config : Boolean;
1662
   --  GNAT
1663
   --  This is the value of the configuration switch for assertions enabled
1664
   --  mode, as possibly set by the command line switch -gnata, and possibly
1665
   --  modified by the use of the configuration pragma Assertion_Policy.
1666
 
1667
   Assume_No_Invalid_Values_Config : Boolean;
1668
   --  GNAT
1669
   --  This is the value of the configuration switch for assuming "no invalid
1670
   --  values enabled" mode, as possibly set by the command line switch
1671
   --  -gnatB, and possibly modified by the use of the configuration pragma
1672
   --  Assume_No_Invalid_Values.
1673
 
1674
   Check_Policy_List_Config : Node_Id;
1675
   --  GNAT
1676
   --  This points to the list of N_Pragma nodes for Check_Policy pragmas
1677
   --  that are linked through the Next_Pragma fields, with the list being
1678
   --  terminated by Empty. The order is most recently processed first. This
1679
   --  list includes only those pragmas in configuration pragma files.
1680
 
1681
   Debug_Pragmas_Disabled_Config : Boolean;
1682
   --  GNAT
1683
   --  This is the value of the configuration switch for debug pragmas disabled
1684
   --  mode, as possibly set by use of the configuration pragma Debug_Policy.
1685
 
1686
   Debug_Pragmas_Enabled_Config : Boolean;
1687
   --  GNAT
1688
   --  This is the value of the configuration switch for debug pragmas enabled
1689
   --  mode, as possibly set by the command line switch -gnata and possibly
1690
   --  modified by the use of the configuration pragma Debug_Policy.
1691
 
1692
   Default_Pool_Config : Node_Id := Empty;
1693
   --  GNAT
1694
   --  Same as Default_Pool above, except this is only for Default_Storage_Pool
1695
   --  pragmas that are configuration pragmas.
1696
 
1697
   Dynamic_Elaboration_Checks_Config : Boolean := False;
1698
   --  GNAT
1699
   --  Set True for dynamic elaboration checking mode, as set by the -gnatE
1700
   --  switch or by the use of pragma Elaboration_Checking (Dynamic).
1701
 
1702
   Exception_Locations_Suppressed_Config : Boolean := False;
1703
   --  GNAT
1704
   --  Set True by use of the configuration pragma Suppress_Exception_Messages
1705
 
1706
   Extensions_Allowed_Config : Boolean;
1707
   --  GNAT
1708
   --  This is the flag that indicates whether extensions are allowed. It can
1709
   --  be set True either by use of the -gnatX switch, or by use of the
1710
   --  configuration pragma Extensions_Allowed (On). It is always set to True
1711
   --  for internal GNAT units, since extensions are always permitted in such
1712
   --  units.
1713
 
1714
   External_Name_Exp_Casing_Config : External_Casing_Type;
1715
   --  GNAT
1716
   --  This is the value of the configuration switch that controls casing of
1717
   --  external symbols for which an explicit external name is given. It can be
1718
   --  set to Uppercase by the command line switch -gnatF, and further modified
1719
   --  by the use of the configuration pragma External_Name_Casing in the
1720
   --  gnat.adc file. This flag is used to set the initial value for
1721
   --  External_Name_Exp_Casing at the start of analyzing each unit. Note
1722
   --  however that the setting of this flag is ignored for internal and
1723
   --  predefined units (which are always compiled with As_Is mode).
1724
 
1725
   External_Name_Imp_Casing_Config : External_Casing_Type;
1726
   --  GNAT
1727
   --  This is the value of the configuration switch that controls casing of
1728
   --  external symbols where the external name is implicitly given. It can be
1729
   --  set to Uppercase by the command line switch -gnatF, and further modified
1730
   --  by the use of the configuration pragma External_Name_Casing in the
1731
   --  gnat.adc file. This flag is used to set the initial value for
1732
   --  External_Name_Imp_Casing at the start of analyzing each unit. Note
1733
   --  however that the setting of this flag is ignored for internal and
1734
   --  predefined units (which are always compiled with Lowercase mode).
1735
 
1736
   Fast_Math_Config : Boolean;
1737
   --  GNAT
1738
   --  This is the value of the configuration switch that controls Fast_Math
1739
   --  mode, as set by a Fast_Math pragma in configuration pragmas. It is
1740
   --  used to set the initial value of Fast_Math at the start of each new
1741
   --  compilation unit.
1742
 
1743
   Initialize_Scalars_Config : Boolean;
1744
   --  GNAT
1745
   --  This is the value of the configuration switch that is set by the
1746
   --  pragma Initialize_Scalars when it appears in the gnat.adc file.
1747
   --  This switch is not set when the pragma appears ahead of a given
1748
   --  unit, so it does not affect the compilation of other units.
1749
 
1750
   Optimize_Alignment_Config : Character;
1751
   --  GNAT
1752
   --  This is the value of the configuration switch that controls the
1753
   --  alignment optimization mode, as set by an Optimize_Alignment pragma.
1754
   --  It is used to set the initial value of Optimize_Alignment at the start
1755
   --  of each new compilation unit, except that it is always set to 'O' (off)
1756
   --  for internal units.
1757
 
1758
   Persistent_BSS_Mode_Config : Boolean;
1759
   --  GNAT
1760
   --  This is the value of the configuration switch that controls whether
1761
   --  potentially persistent data is to be placed in the persistent_bss
1762
   --  section. It can be set True by use of the pragma Persistent_BSS.
1763
   --  This flag is used to set the initial value of Persistent_BSS_Mode
1764
   --  at the start of each compilation unit, except that it is always
1765
   --  set False for predefined units.
1766
 
1767
   Polling_Required_Config : Boolean;
1768
   --  GNAT
1769
   --  This is the value of the configuration switch that controls polling
1770
   --  mode. It can be set True by the command line switch -gnatP, and then
1771
   --  further modified by the use of pragma Polling in the gnat.adc file. This
1772
   --  flag is used to set the initial value for Polling_Required at the start
1773
   --  of analyzing each unit.
1774
 
1775
   Short_Descriptors_Config : Boolean;
1776
   --  GNAT
1777
   --  This is the value of the configuration switch that controls the use of
1778
   --  Short_Descriptors for setting descriptor default sizes. It can be set
1779
   --  True by the use of the pragma Short_Descriptors in the gnat.adc file.
1780
   --  This flag is used to set the initial value for Short_Descriptors at the
1781
   --  start of analyzing each unit.
1782
 
1783
   Use_VADS_Size_Config : Boolean;
1784
   --  GNAT
1785
   --  This is the value of the configuration switch that controls the use of
1786
   --  VADS_Size instead of Size wherever the attribute Size is used. It can
1787
   --  be set True by the use of the pragma Use_VADS_Size in the gnat.adc file.
1788
   --  This flag is used to set the initial value for Use_VADS_Size at the
1789
   --  start of analyzing each unit. Note however that the setting of this flag
1790
   --  is ignored for internal and predefined units (which are always compiled
1791
   --  with the standard Size semantics).
1792
 
1793
   type Config_Switches_Type is private;
1794
   --  Type used to save values of the switches set from Config values
1795
 
1796
   procedure Save_Opt_Config_Switches (Save : out Config_Switches_Type);
1797
   --  This procedure saves the current values of the switches which are
1798
   --  initialized from the above Config values, and then resets these switches
1799
   --  according to the Config value settings.
1800
 
1801
   procedure Set_Opt_Config_Switches
1802
     (Internal_Unit : Boolean;
1803
      Main_Unit     : Boolean);
1804
   --  This procedure sets the switches to the appropriate initial values. The
1805
   --  parameter Internal_Unit is True for an internal or predefined unit, and
1806
   --  affects the way the switches are set (see above). Main_Unit is true if
1807
   --  switches are being set for the main unit (this affects setting of the
1808
   --  assert/debug pragma switches, which are normally set false by default
1809
   --  for an internal unit, except when the internal unit is the main unit,
1810
   --  in which case we use the command line settings).
1811
 
1812
   procedure Restore_Opt_Config_Switches (Save : Config_Switches_Type);
1813
   --  This procedure restores a set of switch values previously saved by a
1814
   --  call to Save_Opt_Switches.
1815
 
1816
   procedure Register_Opt_Config_Switches;
1817
   --  This procedure is called after processing the gnat.adc file and other
1818
   --  configuration pragma files to record the values of the Config switches,
1819
   --  as possibly modified by the use of command line switches and pragmas
1820
   --  appearing in these files.
1821
 
1822
   ------------------------
1823
   -- Other Global Flags --
1824
   ------------------------
1825
 
1826
   Expander_Active : Boolean := False;
1827
   --  A flag that indicates if expansion is active (True) or deactivated
1828
   --  (False). When expansion is deactivated all calls to expander routines
1829
   --  have no effect. Note that the initial setting of False is merely to
1830
   --  prevent saving of an undefined value for an initial call to the
1831
   --  Expander_Mode_Save_And_Set procedure. For more information on the use of
1832
   --  this flag, see package Expander. Indeed this flag might more logically
1833
   --  be in the spec of Expander, but it is referenced by Errout, and it
1834
   --  really seems wrong for Errout to depend on Expander.
1835
   --
1836
   --  Note: for many purposes, it is more appropriate to test the flag
1837
   --  Full_Expander_Active, which also checks that Alfa mode is not active.
1838
 
1839
   Static_Dispatch_Tables : Boolean := True;
1840
   --  This flag indicates if the backend supports generation of statically
1841
   --  allocated dispatch tables. If it is True, then the front end will
1842
   --  generate static aggregates for dispatch tables that contain forward
1843
   --  references to addresses of subprograms not seen yet, and the back end
1844
   --  must be prepared to handle this case. If it is False, then the front
1845
   --  end generates assignments to initialize the dispatch table, and there
1846
   --  are no such forward references. By default we build statically allocated
1847
   --  dispatch tables for all library level tagged types in all platforms.This
1848
   --  behavior can be disabled using switch -gnatd.t which will set this flag
1849
   --  to False and revert to the previous dynamic behavior.
1850
 
1851
   -----------------------
1852
   -- Tree I/O Routines --
1853
   -----------------------
1854
 
1855
   procedure Tree_Read;
1856
   --  Reads switch settings from current tree file using Tree_Read
1857
 
1858
   procedure Tree_Write;
1859
   --  Writes out switch settings to current tree file using Tree_Write
1860
 
1861
   --------------------------
1862
   -- ASIS Version Control --
1863
   --------------------------
1864
 
1865
   --  These two variables (Tree_Version_String and Tree_ASIS_Version_Number)
1866
   --  are supposed to be used in the GNAT/ASIS version check performed in
1867
   --  the ASIS code (this package is also a part of the ASIS implementation).
1868
   --  They are set by Tree_Read procedure, so they represent the version
1869
   --  number (and the version string) of the compiler which has created the
1870
   --  tree, and they are supposed to be compared with the corresponding values
1871
   --  from the Tree_IO and Gnatvsn packages which also are a part of ASIS
1872
   --  implementation.
1873
 
1874
   Tree_Version_String : String_Access;
1875
   --  Used to store the compiler version string read from a tree file to check
1876
   --  if it is from the same date as stored in the version string in Gnatvsn.
1877
   --  We require that ASIS Pro can be used only with GNAT Pro, but we allow
1878
   --  non-Pro ASIS and ASIS-based tools to be used with any version of the
1879
   --  GNAT compiler. Therefore, we need the possibility to compare the dates
1880
   --  of the corresponding source sets, using version strings that may be
1881
   --  of different lengths.
1882
 
1883
   Tree_ASIS_Version_Number : Int;
1884
   --  Used to store the ASIS version number read from a tree file to check if
1885
   --  it is the same as stored in the ASIS version number in Tree_IO.
1886
 
1887
   -----------------------------------
1888
   -- Modes for Formal Verification --
1889
   -----------------------------------
1890
 
1891
   Alfa_Mode : Boolean := False;
1892
   --  Specific compiling mode targeting formal verification through the
1893
   --  generation of Why code for those parts of the input code that belong to
1894
   --  the Alfa subset of Ada. Set by debug flag -gnatd.F.
1895
 
1896
   Strict_Alfa_Mode : Boolean := False;
1897
   --  Interpret compiler permissions as strictly as possible. E.g. base ranges
1898
   --  for integers are limited to the strict minimum with this option. Set by
1899
   --  debug flag -gnatd.D.
1900
 
1901
   function Full_Expander_Active return Boolean;
1902
   pragma Inline (Full_Expander_Active);
1903
   --  Returns the value of (Expander_Active and not Alfa_Mode). This "flag"
1904
   --  indicates that expansion is fully active, that is, not in the reduced
1905
   --  mode for Alfa (True) or that expansion is either deactivated, or active
1906
   --  in the reduced mode for Alfa (False). For more information on full
1907
   --  expansion, see package Expander. For more information on reduced
1908
   --  Alfa expansion, see package Exp_Alfa.
1909
 
1910
private
1911
 
1912
   --  The following type is used to save and restore settings of switches in
1913
   --  Opt that represent the configuration (i.e. result of config pragmas).
1914
 
1915
   --  Note that Ada_Version_Explicit is not included, since this is a sticky
1916
   --  flag that once set does not get reset, since the whole idea of this flag
1917
   --  is to record the setting for the main unit.
1918
 
1919
   type Config_Switches_Type is record
1920
      Ada_Version                    : Ada_Version_Type;
1921
      Ada_Version_Explicit           : Ada_Version_Type;
1922
      Assertions_Enabled             : Boolean;
1923
      Assume_No_Invalid_Values       : Boolean;
1924
      Check_Policy_List              : Node_Id;
1925
      Debug_Pragmas_Disabled         : Boolean;
1926
      Debug_Pragmas_Enabled          : Boolean;
1927
      Default_Pool                   : Node_Id;
1928
      Dynamic_Elaboration_Checks     : Boolean;
1929
      Exception_Locations_Suppressed : Boolean;
1930
      Extensions_Allowed             : Boolean;
1931
      External_Name_Exp_Casing       : External_Casing_Type;
1932
      External_Name_Imp_Casing       : External_Casing_Type;
1933
      Fast_Math                      : Boolean;
1934
      Initialize_Scalars             : Boolean;
1935
      Normalize_Scalars              : Boolean;
1936
      Optimize_Alignment             : Character;
1937
      Optimize_Alignment_Local       : Boolean;
1938
      Persistent_BSS_Mode            : Boolean;
1939
      Polling_Required               : Boolean;
1940
      Short_Descriptors              : Boolean;
1941
      Use_VADS_Size                  : Boolean;
1942
   end record;
1943
 
1944
   --  The following declarations are for GCC version dependent flags. We do
1945
   --  not let client code in the compiler test GCC_Version directly, but
1946
   --  instead use deferred constants for relevant feature tags.
1947
 
1948
   --  Note: there currently are no such constants defined in this section,
1949
   --  since the compiler front end is currently entirely independent of the
1950
   --  GCC version, which is a desirable state of affairs.
1951
 
1952
   function get_gcc_version return Int;
1953
   pragma Import (C, get_gcc_version, "get_gcc_version");
1954
 
1955
   GCC_Version : constant Nat := get_gcc_version;
1956
   --  GNATMAKE
1957
   --  Indicates which version of gcc is in use (3 = 3.x, 4 = 4.x). Note that
1958
   --  gcc 2.8.1 (which used to be a value of 2) is no longer supported.
1959
 
1960
end Opt;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.