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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [ada/] [opt.ads] - Blame information for rev 327

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

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

powered by: WebSVN 2.1.0

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