------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                                D E B U G                                 --
--                                                                          --
--                                 B o d y                                  --
--                                                                          --
--          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
--                                                                          --
-- GNAT is free software;  you can  redistribute it  and/or modify it under --
-- terms of the  GNU General Public License as published  by the Free Soft- --
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
-- for  more details.  You should have  received  a copy of the GNU General --
-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
-- http://www.gnu.org/licenses for a complete copy of the license.          --
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
--                                                                          --
------------------------------------------------------------------------------

package body Debug is

   ---------------------------------
   -- Summary of Debug Flag Usage --
   ---------------------------------

   --  Debug flags for compiler (GNAT1)

   --  da   Generate messages tracking semantic analyzer progress
   --  db   Show encoding of type names for debug output
   --  dc   List names of units as they are compiled
   --  dd   Dynamic allocation of tables messages generated
   --  de   List the entity table
   --  df   Full tree/source print (includes withed units)
   --  dg   Print source from tree (generated code only)
   --  dh   Generate listing showing loading of name table hash chains
   --  di   Generate messages for visibility linking/delinking
   --  dj   Suppress "junk null check" for access parameter values
   --  dk   Generate GNATBUG message on abort, even if previous errors
   --  dl   Generate unit load trace messages
   --  dm   Prevent special frontend inlining in GNATprove mode
   --  dn   Generate messages for node/list allocation
   --  do   Print source from tree (original code only)
   --  dp   Generate messages for parser scope stack push/pops
   --  dq   No auto-alignment of small records
   --  dr   Generate parser resynchronization messages
   --  ds   Print source from tree (including original and generated stuff)
   --  dt   Print full tree
   --  du   Uncheck categorization pragmas
   --  dv   Output trace of overload resolution
   --  dw   Print trace of semantic scope stack
   --  dx   Force expansion on, even if no code being generated
   --  dy   Print tree of package Standard
   --  dz   Print source of package Standard

   --  dA   All entities included in representation information output
   --  dB   Output debug encoding of type names and variants
   --  dC   Output debugging information on check suppression
   --  dD   Delete elaboration checks in inner level routines
   --  dE   Apply elaboration checks to predefined units
   --  dF   Alternative display for messages over multiple lines
   --  dG   Generate all warnings including those normally suppressed
   --  dH   Hold (kill) call to gigi
   --  dI   Inhibit internal name numbering in gnatG listing
   --  dJ   Prepend subprogram name in messages
   --  dK   Kill all error messages
   --  dL   Ignore external calls from instances for elaboration
   --  dM   Assume all variables are modified (no current values)
   --  dN   No file name information in exception messages
   --  dO   Output immediate error messages
   --  dP   Do not check for controlled objects in preelaborable packages
   --  dQ
   --  dR   Bypass check for correct version of s-rpc
   --  dS   Never convert numbers to machine numbers in Sem_Eval
   --  dT   Convert to machine numbers only for constant declarations
   --  dU   Enable garbage collection of unreachable entities
   --  dV   Enable viewing of all symbols in debugger
   --  dW   Disable warnings on calls for IN OUT parameters
   --  dX   Display messages on reads of potentially uninitialized scalars
   --  dY   Enable configurable run-time mode
   --  dZ   Generate listing showing the contents of the dispatch tables

   --  d.a  Force Target_Strict_Alignment mode to True
   --  d.b  Dump backend types
   --  d.c  Generate inline concatenation, do not call procedure
   --  d.d  Disable atomic synchronization
   --  d.e  Enable atomic synchronization
   --  d.f  Inhibit folding of static expressions
   --  d.g  Enable conversion of raise into goto
   --  d.h  Minimize the creation of public internal symbols for concatenation
   --  d.i  Ignore Warnings pragmas
   --  d.j  Generate listing of frontend inlined calls
   --  d.k  Kill referenced run-time library unit line numbers
   --  d.l  Use Ada 95 semantics for limited function returns
   --  d.m  For -gnatl, print full source only for main unit
   --  d.n  Print source file names
   --  d.o  Conservative elaboration order for indirect calls
   --  d.p  Use original Ada 95 semantics for Bit_Order (disable AI95-0133)
   --  d.q  Suppress optimizations on imported 'in'
   --  d.r  Disable reordering of components in record types
   --  d.s  Strict secondary stack management
   --  d.t  Disable static allocation of library level dispatch tables
   --  d.u  Enable Modify_Tree_For_C (update tree for c)
   --  d.v  Enforce SPARK elaboration rules in SPARK code
   --  d.w  Do not check for infinite loops
   --  d.x  No exception handlers
   --  d.y  Disable implicit pragma Elaborate_All on task bodies
   --  d.z  Restore previous support for frontend handling of Inline_Always

   --  d.A  Enable statistics printing in Atree
   --  d.B  Generate a bug box on abort_statement
   --  d.C  Generate concatenation call, do not generate inline code
   --  d.D  Disable errors on use of overriding keyword in Ada 95 mode
   --  d.E  Turn selected errors into warnings
   --  d.F  Debug mode for GNATprove
   --  d.G  Ignore calls through generic formal parameters for elaboration
   --  d.H  Disable the support for 128-bit integer types on 64-bit platforms
   --  d.I  Do not ignore enum representation clauses in CodePeer mode
   --  d.J  Relaxed rules for pragma No_Return
   --  d.K  Do not reject components in extensions overlapping with parent
   --  d.L  Depend on back end for limited types in if and case expressions
   --  d.M  Relaxed RM semantics
   --  d.N
   --  d.O  Dump internal SCO tables
   --  d.P  Previous (non-optimized) handling of length comparisons
   --  d.Q  Previous (incomplete) style check for binary operators
   --  d.R  Restrictions in ali files in positional form
   --  d.S  Force Optimize_Alignment (Space)
   --  d.T  Force Optimize_Alignment (Time)
   --  d.U  Ignore indirect calls for static elaboration
   --  d.V  Do not verify validity of SCIL files (CodePeer mode)
   --  d.W  Print out debugging information for Walk_Library_Items
   --  d.X  Old treatment of indexing aspects
   --  d.Y
   --  d.Z  Do not enable expansion in configurable run-time mode

   --  d_a  Stop elaboration checks on accept or select statement
   --  d_b  Use designated type model under No_Dynamic_Accessibility_Checks
   --  d_c  CUDA compilation : compile for the host
   --  d_d  CUDA compilation : compile for the device
   --  d_e  Ignore entry calls and requeue statements for elaboration
   --  d_f  Issue info messages related to GNATprove usage
   --  d_g  Disable large static aggregates
   --  d_h  Disable the use of (perfect) hash functions for enumeration Value
   --  d_i  Ignore activations and calls to instances for elaboration
   --  d_j  Read JSON files and populate Repinfo tables (opposite of -gnatRjs)
   --  d_k
   --  d_l
   --  d_m
   --  d_n
   --  d_o
   --  d_p  Ignore assertion pragmas for elaboration
   --  d_q
   --  d_r  Disable the use of the return slot in functions
   --  d_s  Stop elaboration checks on synchronous suspension
   --  d_t  In LLVM-based CCG, dump LLVM IR after transformations are done
   --  d_u  In LLVM-based CCG, dump flows
   --  d_v  Enable additional checks and debug printouts in Atree
   --  d_w
   --  d_x  Disable inline expansion of Image attribute for enumeration types
   --  d_y
   --  d_z

   --  d_A  Stop generation of ALI file
   --  d_B  Warn on build-in-place function calls
   --  d_C
   --  d_D
   --  d_E
   --  d_F  Encode full invocation paths in ALI files
   --  d_G
   --  d_H
   --  d_I
   --  d_J
   --  d_K  (Reserved) Enable reporting a warning on known-problem issues
   --  d_L  Output trace information on elaboration checking
   --  d_M
   --  d_N
   --  d_O
   --  d_P
   --  d_Q
   --  d_R  For LLVM, dump the representation of records
   --  d_S
   --  d_T  Output trace information on invocation path recording
   --  d_U  Disable prepending messages with "error:".
   --  d_V  Enable verifications on the expanded tree
   --  d_W
   --  d_X  Disable assertions to check matching of extra formals
   --  d_Y
   --  d_Z

   --  d1   Error msgs have node numbers where possible
   --  d2   Eliminate error flags in verbose form error messages
   --  d3   Dump bad node in Comperr on an abort
   --  d4   Inhibit automatic krunch of predefined library unit files
   --  d5   Debug output for tree read/write
   --  d6   Default access unconstrained to thin pointers
   --  d7   Suppress version/source stamp/compilation time for -gnatv/-gnatl
   --  d8   Force opposite endianness in packed stuff
   --  d9

   --  d.1  Enable unnesting of nested procedures
   --  d.2  Allow statements in declarative part
   --  d.3  Output debugging information from Exp_Unst
   --  d.4  Do not delete generated C file in case of errors
   --  d.5  Do not generate imported subprogram definitions in C code
   --  d.6  Do not avoid declaring unreferenced types in C code
   --  d.7  Disable unsound heuristics in gnat2scil (for CP as SPARK prover)
   --  d.8  Disable unconditional inlining of expression functions
   --  d.9

   --  d_1
   --  d_2
   --  d_3
   --  d_4
   --  d_5
   --  d_6
   --  d_7
   --  d_8
   --  d_9

   --  Debug flags for binder (GNATBIND)

   --  da  All links (including internal units) listed if there is a cycle
   --  db  Output information from Better_Choice
   --  dc  List units as they are chosen
   --  dd
   --  de  Elaboration dependencies including system units
   --  df
   --  dg
   --  dh
   --  di  Ignore_Errors mode for reading ali files
   --  dj
   --  dk
   --  dl
   --  dm
   --  dn  List details of manipulation of Num_Pred values
   --  do  Use older preference for elaboration order
   --  dp  Use old preference for elaboration order
   --  dq
   --  dr
   --  ds
   --  dt
   --  du  List units as they are acquired
   --  dv  Verbose debugging printouts
   --  dw
   --  dx  Force binder to read xref information from ali files
   --  dy
   --  dz

   --  dA
   --  dB
   --  dC
   --  dD
   --  dE
   --  dF
   --  dG
   --  dH
   --  dI
   --  dJ
   --  dK
   --  dL
   --  dM
   --  dN
   --  dO
   --  dP
   --  dQ
   --  dR
   --  dS
   --  dT
   --  dU
   --  dV
   --  dW
   --  dX
   --  dY
   --  dZ

   --  d.a
   --  d.b
   --  d.c
   --  d.d
   --  d.e
   --  d.f
   --  d.g
   --  d.h
   --  d.i
   --  d.j
   --  d.k
   --  d.l
   --  d.m
   --  d.n
   --  d.o
   --  d.p
   --  d.q
   --  d.r
   --  d.s
   --  d.t
   --  d.u
   --  d.v
   --  d.w
   --  d.x
   --  d.y
   --  d.z

   --  d.A
   --  d.B
   --  d.C
   --  d.D
   --  d.E
   --  d.F
   --  d.G
   --  d.H
   --  d.I
   --  d.J
   --  d.K
   --  d.L
   --  d.M
   --  d.N
   --  d.O
   --  d.P
   --  d.Q
   --  d.R
   --  d.S
   --  d.T
   --  d.U
   --  d.V
   --  d.W
   --  d.X
   --  d.Y
   --  d.Z

   --  d.1
   --  d.2
   --  d.3
   --  d.4
   --  d.5
   --  d.6
   --  d.7
   --  d.8
   --  d.9

   --  d_a  Ignore the effects of pragma Elaborate_All
   --  d_b  Ignore the effects of pragma Elaborate_Body
   --  d_c  CUDA compilation : compile/bind for the host
   --  d_d  CUDA compilation : compile/bind for the device
   --  d_e  Ignore the effects of pragma Elaborate
   --  d_f
   --  d_g
   --  d_h
   --  d_i
   --  d_j
   --  d_k
   --  d_l
   --  d_m
   --  d_n
   --  d_o
   --  d_p
   --  d_q
   --  d_r
   --  d_s
   --  d_t  Output cycle-detection trace information
   --  d_u
   --  d_v
   --  d_w
   --  d_x
   --  d_y
   --  d_z

   --  d_A  Output ALI invocation tables
   --  d_B
   --  d_C  Diagnose all cycles
   --  d_D
   --  d_E
   --  d_F
   --  d_G
   --  d_H
   --  d_I  Output invocation graph
   --  d_J
   --  d_K
   --  d_L  Output library graph
   --  d_M
   --  d_N
   --  d_O
   --  d_P  Output cycle paths
   --  d_Q
   --  d_R
   --  d_S  Output elaboration-order status
   --  d_T  Output elaboration-order trace information
   --  d_U
   --  d_V  Validate bindo cycles, graphs, and order
   --  d_W
   --  d_X
   --  d_Y
   --  d_Z

   --  d_1
   --  d_2
   --  d_3
   --  d_4
   --  d_5
   --  d_6
   --  d_7
   --  d_8
   --  d_9

   --  Debug flags used in package Make and its clients (e.g. GNATMAKE)

   --  da
   --  db
   --  dc
   --  dd
   --  de
   --  df  Only output file names, not path names, in log
   --  dg
   --  dh  Generate listing showing loading of name table hash chains
   --  di
   --  dj
   --  dk
   --  dl
   --  dm  Display the number of maximum simultaneous compilations
   --  dn  Do not delete temp files created by gnatmake
   --  do
   --  dp  Prints the contents of the Q used by Make.Compile_Sources
   --  dq  Prints source files as they are enqueued and dequeued
   --  dr
   --  ds
   --  dt  Display time stamps when there is a mismatch
   --  du  List units as their ali files are acquired
   --  dv
   --  dw  Prints the list of units withed by the unit currently explored
   --  dx
   --  dy
   --  dz

   --------------------------------------------
   -- Documentation for Compiler Debug Flags --
   --------------------------------------------

   --  da   Generate messages tracking semantic analyzer progress. A message
   --       is output showing each node as it gets analyzed, expanded,
   --       resolved, or evaluated. This option is useful for finding out
   --       exactly where a bomb during semantic analysis is occurring.

   --  db   In Exp_Dbug, certain type names are encoded to include debugging
   --       information. This debug switch causes lines to be output showing
   --       the encodings used.

   --  dc   List names of units as they are compiled. One line of output will
   --       be generated at the start of compiling each unit (package or
   --       subprogram).

   --  dd   Dynamic allocation of tables messages generated. Each time a
   --       table is reallocated, a line is output indicating the expansion.

   --  de   List the entity table

   --  df   Full tree/source print (includes withed units). Normally the tree
   --       output (dt) or recreated source output (dg,do,ds) includes only
   --       the main unit. If df is set, then the output in either case
   --       includes all compiled units (see also dg,do,ds,dt). Note that to
   --       be effective, this switch must be used in combination with one or
   --       more of dt, dg, do or ds.

   --  dg   Print the source recreated from the generated tree. In the case
   --       where the tree has been rewritten this output includes only the
   --       generated code, not the original code (see also df,do,ds,dz).
   --       This flag differs from -gnatG in that the output also includes
   --       non-source generated null statements, and freeze nodes, which
   --       are normally omitted in -gnatG mode.

   --  dh   Generates a table at the end of a compilation showing how the hash
   --       table chains built by the Namet package are loaded. This is useful
   --       in ensuring that the hashing algorithm (in Namet.Hash) is working
   --       effectively with typical sets of program identifiers.

   --  di   Generate messages for visibility linking/delinking

   --  dj   Suppress "junk null check" for access parameters. This flag permits
   --       Ada programs to pass null parameters to access parameters, and to
   --       explicitly check such access values against the null literal.
   --       Neither of these is valid Ada, but both were allowed in versions of
   --       GNAT before 3.10, so this switch can ease the transition process.

   --  dk   Immediate kill on abort. Normally on an abort (i.e. a call to
   --       Comperr.Compiler_Abort), the GNATBUG message is not given if
   --       there is a previous error. This debug switch bypasses this test
   --       and gives the message unconditionally (useful for debugging).

   --  dl   Generate unit load trace messages. A line of traceback output is
   --       generated each time a request is made to the library manager to
   --       load a new unit.

   --  dm   Prevent special frontend inlining in GNATprove mode. In some cases,
   --       some subprogram calls are inlined in GNATprove mode in order to
   --       facilitate formal verification. This debug switch prevents that
   --       inlining to happen.

   --  dn   Generate messages for node/list allocation. Each time a node or
   --       list header is allocated, a line of output is generated. Certain
   --       other basic tree operations also cause a line of output to be
   --       generated. This option is useful in seeing where the parser is
   --       blowing up.

   --  do   Print the source recreated from the generated tree. In the case
   --       where the tree has been rewritten, this output includes only the
   --       original code, not the generated code (see also df,dg,ds,dz).

   --  dp   Generate messages for parser scope stack push/pops. A line of
   --       output by the parser each time the parser scope stack is either
   --       pushed or popped. Useful in debugging situations where the
   --       parser scope stack ends up incorrectly synchronized

   --  dq   In layout version 1.38, 2002/01/12, a circuit was implemented
   --       to give decent default alignment to short records that had no
   --       specific alignment set. This debug option restores the previous
   --       behavior of giving such records poor alignments, typically 1.
   --       This may be useful in dealing with transition.

   --  dr   Generate parser resynchronization messages. Normally the parser
   --       resynchronizes quietly. With this debug option, two messages
   --       are generated, one when the parser starts a resynchronization
   --       skip, and another when it resumes parsing. Useful in debugging
   --       inadequate error recovery situations.

   --  ds   Print the source recreated from the generated tree. In the case
   --       where the tree has been rewritten this output includes both the
   --       generated code and the original code with the generated code
   --       being enlosed in curly brackets (see also df,do,ds,dz)

   --  dt   Print full tree. The generated tree is output (see also df,dy)

   --  du   Uncheck categorization pragmas. This debug switch causes the
   --       elaboration control pragmas (Pure, Preelaborate, etc.) and the
   --       categorization pragmas (Shared_Passive, Remote_Types, etc.) to be
   --       ignored, so that normal checks are not made (this is particularly
   --       useful for adding temporary debugging code to units that have
   --       pragmas that are inconsistent with the debugging code added).

   --  dv   Output trace of overload resolution. Outputs messages for
   --       overload attempts that involve cascaded errors, or where
   --       an interpretation is incompatible with the context.

   --  dw   Write semantic scope stack messages. Each time a scope is created
   --       or removed, a message is output (see the Sem_Ch8.Push_Scope and
   --       Sem_Ch8.Pop_Scope subprograms).

   --  dx   Force expansion on, even if no code being generated. Normally the
   --       expander is inhibited if no code is generated. This switch forces
   --       expansion to proceed normally even if the backend is not being
   --       called. This is particularly useful for debugging purposes when
   --       using the front-end only version of the compiler (which normally
   --       would never do any expansion).

   --  dy   Print tree of package Standard. Normally the tree print out does
   --       not include package Standard, even if the -df switch is set. This
   --       switch forces output of the internal tree built for Standard.

   --  dz   Print source of package Standard. Normally the source print out
   --       does not include package Standard, even if the -df switch is set.
   --       This switch forces output of the source recreated from the internal
   --       tree built for Standard. Note that this differs from -gnatS in
   --       that it prints from the actual tree using the normal Sprint
   --       circuitry for printing trees.

   --  dA   Forces output of representation information, including full
   --       information for all internal type and object entities, as well
   --       as all user defined type and object entities including private
   --       and incomplete types. This debug switch also automatically sets
   --       the equivalent of -gnatRm.

   --  dB   Output debug encodings for types and variants. See Exp_Dbug for
   --       exact form of the generated output.

   --  dC   Output trace information showing the decisions made during
   --       check suppression activity in unit Checks.

   --  dD   Delete new elaboration checks. This flag causes GNAT to return
   --       to the 3.13a elaboration semantics, and to suppress the fixing
   --       of two bugs. The first is in the context of inner routines in
   --       dynamic elaboration mode, when the subprogram we are in was
   --       called at elaboration time by a unit that was also compiled with
   --       dynamic elaboration checks. In this case, if A calls B calls C,
   --       and all are in different units, we need an elaboration check at
   --       each call. These nested checks were only put in recently (see
   --       version 1.80 of Sem_Elab) and we provide this debug flag to
   --       revert to the previous behavior in case of regressions. The
   --       other behavior reverted by this flag is the treatment of the
   --       Elaborate_Body pragma in static elaboration mode. This used to
   --       be treated as not needing elaboration checking, but in fact in
   --       general Elaborate_All is still required because of nested calls.

   --  dE   Apply compile time elaboration checking for with relations between
   --       predefined units. Normally no checks are made.

   --  dG   Generate all warnings. Normally Errout suppresses warnings on
   --       units that are not part of the main extended source, and also
   --       suppresses warnings on instantiations in the main extended
   --       source that duplicate warnings already posted on the template.
   --       This switch stops both kinds of deletion and causes Errout to
   --       post all warnings sent to it.

   --  dH   Inhibit call to gigi. This is useful for testing front end data
   --       layout, and may be useful in other debugging situations where
   --       you do not want gigi to intefere with the testing.

   --  dI   Inhibit internal name numbering in gnatDG listing. Any sequence of
   --       the form <uppercase-letter><digits><lowercase-letter> appearing in
   --       a name is replaced by <uppercase-letter>...<lowercase-letter>. This
   --       is used in the fixed bugs run to minimize system and version
   --       dependency in filed -gnatD or -gnatG output.

   --  dJ   Prepend the name of the enclosing subprogram in compiler messages
   --       (errors, warnings, style checks). This is useful in particular to
   --       integrate compiler warnings in static analysis tools such as
   --       CodePeer.

   --  dK   Kill all error messages. This debug flag suppresses the output
   --       of all error messages. It is used in regression tests where the
   --       error messages are target dependent and irrelevant.

   --  dL   The compiler ignores calls in instances and invoke subprograms
   --       which are external to the instance for both the static and dynamic
   --       elaboration models.

   --  dM   Assume all variables have been modified, and ignore current value
   --       indications. This debug flag disconnects the tracking of constant
   --       values (see Exp_Ch2.Expand_Current_Value).

   --  dN   Do not generate file name information in exception messages

   --  dO   Output immediate error messages. This causes error messages to
   --       be output as soon as they are generated (disconnecting several
   --       circuits for improvement of messages, deletion of duplicate
   --       messages etc). Useful to diagnose compiler bombs caused by
   --       erroneous handling of error situations

   --  dP   Do not check for controlled objects in preelaborable packages.
   --       RM 10.2.1(9) forbids the use of library level controlled objects
   --       in preelaborable packages, but this restriction is a huge pain,
   --       especially in the predefined library units.

   --  dR   Bypass the check for a proper version of s-rpc being present
   --       to use the -gnatz? switch. This allows debugging of the use
   --       of stubs generation without needing to have GLADE (or some
   --       other PCS  installed).

   --  dS   Omit conversion of fpt numbers to exact machine numbers in
   --       non-static evaluation contexts (see Check_Non_Static_Context).
   --       This is intended for testing out timing problems with this
   --       conversion circuit.

   --  dT   Similar to dS, but omits the conversions only in the case where
   --       the parent is not a constant declaration.

   --  dU   Enable garbage collection of unreachable entities. This enables
   --       both the reachability analysis and changing the Is_Public and
   --       Is_Eliminated flags.

   --  dV   Enable viewing of all symbols in debugger. Causes debug information
   --       to be generated for all symbols, including internal symbols. This
   --       is enabled by default for -gnatD, but this switch allows this to
   --       be enabled without generating modified source files. Note that the
   --       use of -gnatdV ensures in the dwarf/elf case that all symbols that
   --       are present in the elf tables are also in the dwarf tables (which
   --       seems to be required by some tools). Another effect of dV is to
   --       generate full qualified names, including internal names generated
   --       for blocks and loops.

   --  dW   Disable warnings when a possibly uninitialized scalar value is
   --       passed to an IN OUT parameter of a procedure. This usage is a
   --       quite improper bounded error [erroneous in Ada 83] situation,
   --       and would normally generate a warning. However, to ease the
   --       task of transitioning incorrect legacy code, we provide this
   --       undocumented feature for suppressing these warnings.

   --  dY   Enable configurable run-time mode, just as though the System file
   --       had Configurable_Run_Time_Mode set to True. This is useful in
   --       testing high integrity mode.

   --  dZ   Generate listing showing the contents of the dispatch tables. Each
   --       line has an internally generated number used for references between
   --       tagged types and primitives. For each primitive the output has the
   --       following fields:
   --
   --         - Letter 'P' or letter 's': The former indicates that this
   --           primitive will be located in a primary dispatch table. The
   --           latter indicates that it will be located in a secondary
   --           dispatch table.
   --
   --         - Name of the primitive. In case of predefined Ada primitives
   --           the text "(predefined)" is added before the name, and these
   --           acronyms are used: SR (Stream_Read), SW (Stream_Write), SI
   --           (Stream_Input), SO (Stream_Output), DA (Deep_Adjust), DF
   --           (Deep_Finalize). In addition Oeq identifies the equality
   --           operator, and "_assign" the assignment.
   --
   --         - If the primitive covers interface types, two extra fields
   --           referencing other primitives are generated: "Alias" references
   --           the primitive of the tagged type that covers an interface
   --           primitive, and "AI_Alias" references the covered interface
   --           primitive.
   --
   --         - The expression "at #xx" indicates the slot of the dispatch
   --           table occupied by such primitive in its corresponding primary
   --           or secondary dispatch table.
   --
   --         - In case of abstract subprograms the text "is abstract" is
   --           added at the end of the line.

   --  d.a  Force Target_Strict_Alignment to True, even on targets where it
   --       would normally be false. Can be used for testing strict alignment
   --       circuitry in the compiler.

   --  d.b  Dump back end types. During Create_Standard, the back end is
   --       queried for all available types. This option shows them.

   --  d.c  Generate inline concatenation, instead of calling one of the
   --       System.Concat_n.Str_Concat_n routines in cases where the latter
   --       routines would normally be called.

   --  d.d  Disable atomic synchronization for all atomic variable references.
   --       Pragma Enable_Atomic_Synchronization is ignored.

   --  d.e  Enable atomic synchronization for all atomic variable references.
   --       Pragma Disable_Atomic_Synchronization is ignored, and also the
   --       compiler switch -gnated is ignored.

   --  d.f  Suppress folding of static expressions. This of course results
   --       in seriously non-conforming behavior, but is useful sometimes
   --       when tracking down handling of complex expressions.

   --  d.g  Enables conversion of a raise statement into a goto when the
   --       relevant handler is statically determinable. For now we only try
   --       this if this debug flag is set. Later we will enable this more
   --       generally by default.

   --  d.h  Minimize the creation of public internal symbols for concatenation
   --       by enforcing a secondary stack-like handling of the final result.
   --       The target of the concatenation is thus constrained in place and
   --       initialized with the result instead of acting as its alias.

   --  d.i  Ignore all occurrences of pragma Warnings in the sources. This can
   --       be used in particular to disable Warnings (Off) to check if any of
   --       these statements are inappropriate.

   --  d.k  If an error message contains a reference to a location in an
   --       internal unit, then suppress the line number in this reference.

   --  d.j  Generate listing of frontend inlined calls and inline calls passed
   --       to the backend. This is useful to locate skipped calls that must be
   --       inlined by the frontend.

   --  d.l  Use Ada 95 semantics for limited function returns. This may be
   --       used to work around the incompatibility introduced by AI-318-2.
   --       It is useful only in Ada 2005 and later.

   --  d.m  When -gnatl is used, the normal output includes full listings of
   --       all files in the extended main source (body/spec/subunits). If this
   --       debug switch is used, then the full listing is given only for the
   --       main source (this corresponds to a previous behavior of -gnatl and
   --       is used for running the ACATS tests).

   --  d.n  Print source file names as they are loaded. This is useful if the
   --       compiler has a bug -- these are the files that need to be included
   --       in a bug report.

   --  d.o  Conservative elaboration order for indirect calls. This causes
   --       P'Access to be treated as a call in more cases.

   --  d.p  In Ada 95 (or 83) mode, use original Ada 95 behavior for the
   --       interpretation of component clauses crossing byte boundaries when
   --       using the non-default bit order (i.e. ignore AI95-0133).

   --  d.q  If an array variable or constant is not modified in Ada code, and
   --       is passed to an 'in' parameter of a foreign-convention subprogram,
   --       and that subprogram modifies the array, the Ada compiler normally
   --       assumes that the array is not modified. This option suppresses such
   --       optimizations. This option should not be used; the correct solution
   --       is to declare the parameter 'in out'.

   --  d.r  Do not reorder components in record types.

   --  d.s  The compiler no longer attempts to optimize the calls to secondary
   --       stack management routines SS_Mark and SS_Release. As a result, each
   --       transient block tasked with secondary stack management will fulfill
   --       its role unconditionally.

   --  d.s  The compiler does not generate calls to secondary stack management
   --       routines SS_Mark and SS_Release for a transient block when there is
   --       an enclosing scoping construct which already manages the secondary
   --       stack.

   --  d.t  The compiler has been modified (a fairly extensive modification)
   --       to generate static dispatch tables for library level tagged types.
   --       This debug switch disables this modification and reverts to the
   --       previous dynamic construction of tables. It is there as a possible
   --       work around if we run into trouble with the new implementation.

   --  d.u  Sets Modify_Tree_For_C mode in which tree is modified to make it
   --       easier to generate code using a C compiler.

   --  d.v  This flag enforces the elaboration rules defined in the SPARK
   --       Reference Manual, chapter 7.7, to all SPARK code within a unit. As
   --       a result, constructs which violate the rules in chapter 7.7 are no
   --       longer accepted, even if the implementation is able to statically
   --       ensure that accepting these constructs does not introduce the
   --       possibility of failing an elaboration check.

   --  d.w  This flag turns off the scanning of loops to detect possible
   --       infinite loops.

   --  d.x  No exception handlers in generated code. This causes exception
   --       handlers to be eliminated from the generated code. They are still
   --       fully compiled and analyzed, they just get eliminated from the
   --       code generation step.

   --  d.y  Disable implicit pragma Elaborate_All on task bodies. When a task
   --       body calls a procedure in the same package, and that procedure
   --       calls a procedure in another package, the static elaboration
   --       machinery adds an implicit Elaborate_All on the other package. This
   --       switch disables the addition of the implicit pragma in such cases.

   --  d.z  Restore previous front-end support for Inline_Always. In default
   --       mode, for targets that use the GCC back end, Inline_Always is
   --       handled by the back end. Use of this switch restores the previous
   --       handling of Inline_Always by the front end on such targets. For the
   --       targets that do not use the GCC back end, this switch is ignored.

   --  d.A  Enable statistics printing in Atree. First set Statistics_Enabled
   --       in gen_il-gen.adb to True, then rebuild, then run the compiler
   --       with -gnatd.A. You might want to apply "sort -nr" to parts of the
   --       output.

   --  d.B  Generate a bug box when we see an abort_statement, even though
   --       there is no bug. Useful for testing Comperr.Compiler_Abort: write
   --       some code containing an abort_statement, and compile it with
   --       -gnatd.B. There is nothing special about abort_statements; it just
   --       provides a way to control where the bug box is generated. See "when
   --       N_Abort_Statement" in package body Expander.

   --  d.C  Generate call to System.Concat_n.Str_Concat_n routines in cases
   --       where we would normally generate inline concatenation code.

   --  d.D  For compatibility with some Ada 95 compilers implementing only
   --       one feature of Ada 2005 (overriding keyword), disable errors on use
   --       of overriding keyword in Ada 95 mode.

   --  d.E  Turn selected errors into warnings. This debug switch causes a
   --       specific set of error messages into warnings. Setting this switch
   --       causes Opt.Error_To_Warning to be set to True. The intention is
   --       that this be used for messages representing upwards incompatible
   --       changes to Ada 2012 that cause previously correct programs to be
   --       treated as illegal now. The following cases are affected:
   --
   --          Errors relating to overlapping subprogram parameters for cases
   --          other than IN OUT parameters to functions.
   --
   --          Errors relating to the new rules about not defining equality
   --          too late so that composition of equality can be assured.
   --
   --          Errors relating to overriding indicators on protected subprogram
   --          bodies (not an Ada 2012 incompatibility, but might cause errors
   --          for existing programs assuming they were legal because GNAT
   --          formerly allowed them).

   --  d.F  Sets GNATprove_Mode to True. This allows debugging the frontend in
   --       the special mode used by GNATprove.

   --  d.G  Previously the compiler ignored calls via generic formal parameters
   --       when doing the analysis for the static elaboration model. This is
   --       now fixed, but we provide this debug flag to revert to the previous
   --       situation of ignoring such calls to aid in transition.

   --  d.H  Disable the support for 128-bit integer types on 64-bit platforms.
   --       This makes it easier to mimic the behavior of the current compiler
   --       on 32-bit platforms or of older compilers on 64-bit platforms.

   --  d.I  Do not ignore enum representation clauses in CodePeer mode.
   --       The default of ignoring representation clauses for enumeration
   --       types in CodePeer is good for the majority of Ada code, but in some
   --       cases being able to change this default might be useful to remove
   --       some false positives.

   --  d.J  Relaxed rules for pragma No_Return. A pragma No_Return is illegal
   --       if it applies to a body. This switch disables the legality check
   --       for that. If the procedure does in fact return normally, execution
   --       is erroneous, and therefore unpredictable.

   --  d.K  Do not reject components in extensions overlapping with the parent
   --       component. Such components can be specified by means of a component
   --       clause but they cannot be fully supported by the GCC type system.
   --       This switch nevertheless allows them for the sake of compatibility.

   --  d.L  Normally the front end generates special expansion for conditional
   --       expressions of a limited type. This debug flag removes this special
   --       case expansion, leaving it up to the back end to handle conditional
   --       expressions correctly.

   --  d.M  Relaxed RM semantics. This flag sets Opt.Relaxed_RM_Semantics
   --       See Opt.Relaxed_RM_Semantics for more details.

   --  d.O  Dump internal SCO tables. Before outputting the SCO information to
   --       the ALI file, the internal SCO tables (SCO_Table/SCO_Unit_Table)
   --       are dumped for debugging purposes.

   --  d.P  Previous non-optimized handling of length comparisons. Setting this
   --       flag inhibits the effect of Optimize_Length_Comparison in Exp_Ch4.
   --       This is there in case we find a situation where the optimization
   --       malfunctions, to provide a work around.

   --  d.Q  Previous incomplete style checks for binary operators. Style checks
   --       for token separation rules were incomplete and have been made
   --       compliant with the documentation. For example, no warning was
   --       issued for expressions such as 16-One or "A"&"B". Setting this flag
   --       inhibits these new checks.

   --  d.R  As documented in lib-writ.ads, restrictions in the ali file can
   --       have two forms, positional and named. The named notation is the
   --       current preferred form, but the use of this debug switch will force
   --       the use of the obsolescent positional form.

   --  d.S  Force Optimize_Alignment (Space) mode as the default

   --  d.T  Force Optimize_Alignment (Time) mode as the default

   --  d.U  Ignore indirect calls for static elaboration. The static
   --       elaboration model is conservative, especially regarding indirect
   --       calls. If you say Proc'Access, it will assume you might call
   --       Proc. This can cause elaboration cycles at bind time. This flag
   --       reverts to the behavior of earlier compilers, which ignored
   --       indirect calls.

   --  d.V  Do not verify the validity of SCIL files (CodePeer mode). When
   --       generating SCIL files for CodePeer, by default we verify that the
   --       SCIL is well formed before saving it on disk. This switch can be
   --       used to disable this checking, either to improve speed or to shut
   --       down a false positive detected during the verification.

   --  d.W  Print out debugging information for Walk_Library_Items, including
   --       the order in which units are walked. This is primarily for use in
   --       debugging CodePeer mode.

   --  d.X  A previous version of GNAT allowed indexing aspects to be redefined
   --       on derived container types, while the default iterator was
   --       inherited from the parent type. This nonstandard extension is
   --       preserved temporarily for use by the modeling project under debug
   --       flag d.X.

   --  d.Z  Normally we always enable expansion in configurable run-time mode
   --       to make sure we get error messages about unsupported features even
   --       when compiling in -gnatc mode. But expansion is turned off in this
   --       case if debug flag -gnatd.Z is used. This is to deal with the case
   --       where we discover difficulties in this new processing.

   --  d_a  The compiler stops the examination of a task body once it reaches
   --       an accept or select statement for the static elaboration model. The
   --       behavior is similar to that of No_Entry_Calls_In_Elaboration_Code,
   --       but does not penalize actual entry calls in elaboration code.

   --  d_b  When the restriction No_Dynamic_Accessibility_Checks is enabled,
   --       use the simple "designated type" accessibility model, instead of
   --       using the implicit level of the anonymous access type declaration.

   --  d_e  The compiler ignores simple entry calls, asynchronous transfer of
   --       control, conditional entry calls, timed entry calls, and requeue
   --       statements in both the static and dynamic elaboration models.

   --  d_f  Issue info messages related to GNATprove usage to help users
   --       understand analysis results. By default these are not issued as
   --       beginners find them confusing. Set automatically by GNATprove when
   --       switch --info is used.

   --  d_g  Disable large static aggregates. The maximum size for a static
   --       aggregate will be fairly modest, which is useful if the compiler
   --       is using too much memory and time at compile time.

   --  d_h  The compiler does not make use of (perfect) hash functions in the
   --       implementation of the Value attribute for enumeration types.

   --  d_i  The compiler ignores calls and task activations when they target a
   --       subprogram or task type defined in an external instance for both
   --       the static and dynamic elaboration models.

   --  d_j  The compiler reads JSON files that would be generated by the same
   --       compilation session if -gnatRjs was passed, in order to populate
   --       the internal tables of the Repinfo unit from them.

   --  d_p  The compiler ignores calls to subprograms which verify the run-time
   --       semantics of invariants and postconditions in both the static and
   --       dynamic elaboration models.

   --  d_r  The compiler does not make use of the return slot in the expansion
   --       of functions returning a by-reference type. If this use is required
   --       for these functions to return on the primary stack, then they are
   --       changed to return on the secondary stack instead.

   --  d_s  The compiler stops the examination of a task body once it reaches
   --       a call to routine Ada.Synchronous_Task_Control.Suspend_Until_True
   --       or Ada.Synchronous_Barriers.Wait_For_Release.

   --  d_t  In the LLVM-based CCG, do an additional dump of the LLVM IR
   --       after the pass that does transformations to the IR into a
   --       filename ending with .trans.ll.

   --  d_u  In the LLVM-based CCG, dump flows, both when originally created
   --       and after transformations.

   --  d_v  Enable additional checks and debug printouts in Atree

   --  d_x  The compiler does not expand in line the Image attribute for user-
   --       defined enumeration types and the standard boolean type.

   --  d_A  Do not generate ALI files by setting Opt.Disable_ALI_File.

   --  d_B  Warn on build-in-place function calls. This allows users to
   --       inspect their code in case it triggers compiler bugs related
   --       to build-in-place calls. See known-problem entries for details.

   --  d_F  The compiler encodes the full path from an invocation construct to
   --       an external target, offering additional information to GNATBIND for
   --       purposes of error diagnostics.

   --  d_K  (Reserved) Enable reporting a warning on known-problem issues of
   --       previous releases. No action performed in the wavefront.

   --  d_L  Output trace information on elaboration checking. This debug switch
   --       causes output to be generated showing each call or instantiation as
   --       it is checked, and the progress of the recursive trace through
   --       elaboration calls at compile time.

   --  d_R  In the LLVM backend, output the internal representation of
   --       each record

   --  d_T  The compiler outputs trace information to standard output whenever
   --       an invocation path is recorded.

   --  d_U  Disable prepending 'error:' to error messages. This used to be the
   --       default and can be seen as the opposite of -gnatU.

   --  d_V  Enable verification of the expanded code before calling the backend
   --       and generate error messages on each inconsistency found.

   --  d_X  Disable assertions to check matching of extra formals; switch added
   --       temporarily to disable these checks until this work is complete if
   --       they cause unexpected assertion failures.

   --  d1   Error messages have node numbers where possible. Normally error
   --       messages have only source locations. This option is useful when
   --       debugging errors caused by expanded code, where the source location
   --       does not give enough information.

   --  d2   Suppress output of the error position flags for verbose form error
   --       messages. The messages are still interspersed in the listing, but
   --       without any error flags or extra blank lines. Also causes an extra
   --       <<< to be output at the right margin. This is intended to be the
   --       easiest format for checking conformance of ACATS B tests. This
   --       flag also suppresses the additional messages explaining why a
   --       non-static expression is non-static (see Sem_Eval.Why_Not_Static).
   --       This avoids having to worry about these messages in ACATS testing.
   --       Finally, this flag is also used for strict legality check, in
   --       particular it will generate an error instead a warning when
   --       encountering an unknown pragma.

   --  d3   Causes Comperr to dump the contents of the node for which an abort
   --       was detected (normally only the Node_Id of the node is output).

   --  d4   Inhibits automatic krunching of predefined library unit file names.
   --       Normally, as described in the spec of package Krunch, such files
   --       are automatically krunched to 8 characters, with special treatment
   --       of the prefixes Ada, System, and Interfaces. Setting this debug
   --       switch disables this special treatment.

   --  d5   Causes the tree read/write circuit to output detailed information
   --       tracking the data that is read and written element by element.

   --  d6   Normally access-to-unconstrained-array types are represented
   --       using fat (double) pointers. Using this debug flag causes them
   --       to default to thin. This can be used to test the performance
   --       implications of using thin pointers, and also to test that the
   --       compiler functions correctly with this choice.

   --  d7   Normally a -gnatl or -gnatv listing includes the time stamp of the
   --       source file and the time of the compilation. This debug flag can
   --       be used to suppress this output, and also suppresses the message
   --       with the version of the compiler. This is useful for regression
   --       tests which need to have consistent output.

   --  d8   This forces the packed stuff to generate code assuming the
   --       opposite endianness from the actual correct value. Useful in
   --       testing out code generation from the packed routines.

   --  d.1  Sets Opt.Unnest_Subprogram_Mode to enable unnesting of subprograms.
   --       This special pass does not actually unnest things, but it ensures
   --       that a nested procedure does not contain any uplevel references.
   --       See spec of Exp_Unst for full details.

   --  d.2  Allow statements within declarative parts. This is not usually
   --       allowed, but in some debugging contexts (e.g. testing the circuit
   --       for unnesting of procedures), it is useful to allow this.

   --  d.3  Output debugging information from Exp_Unst, including the name of
   --       any unreachable subprograms that get deleted.

   --  d.4  By default in case of an error during C generation, the .c or .h
   --       file is deleted. This flag keeps the C file.

   --  d.5  By default a subprogram imported generates a subprogram profile.
   --       This debug flag disables this generation when generating C code,
   --       assuming a proper #include will be used instead.

   --  d.6  By default the C back-end avoids declaring types that are not
   --       referenced by the generated C code. This debug flag restores the
   --       output of all the types.

   --  d.7  Indicates (to gnat2scil) that CodePeer is being invoked as a
   --       prover by the SPARK tools and that therefore gnat2scil should
   --       avoid SCIL generation strategies which can introduce soundness
   --       issues (e.g., assuming that a low bound of an array parameter
   --       of an unconstrained subtype belongs to the index subtype).

   --  d.8  By default calls to expression functions are always inlined.
   --       This debug flag turns off this behavior, making them subject
   --       to the usual inlining heuristics of the code generator.

   ------------------------------------------
   -- Documentation for Binder Debug Flags --
   ------------------------------------------

   --  da  Normally if there is an elaboration circularity, then in describing
   --      the cycle, links involving internal units are omitted, since they
   --      are irrelevant and confusing. This debug flag causes all links to
   --      be listed, and is useful when diagnosing circularities introduced
   --      by incorrect changes to the run-time library itself.

   --  db  Output debug information from Better_Choice in Binde, which uses
   --      various heuristics to determine elaboration order in cases where
   --      multiple orders are valid.

   --  dc  List units as they are chosen. As units are selected for addition to
   --      the elaboration order, a line of output is generated showing which
   --      unit has been selected.

   --  de  Similar to the effect of -e (output complete list of elaboration
   --      dependencies) except that internal units are included in the
   --      listing.

   --  di  Normally GNATBIND calls Read_Ali with Ignore_Errors set to False,
   --      since the binder really needs correct version ALI files to do its
   --      job. This debug flag causes Ignore_Errors mode to be set for the
   --      binder (and is particularly useful for testing ignore errors mode).

   --  dn  List details of manipulation of Num_Pred values during execution of
   --      the algorithm used to determine a correct order of elaboration. This
   --      is useful in diagnosing any problems in its behavior.

   --  do  Use older elaboration order preference. The new preference rules
   --      prefer specs with no bodies to specs with bodies, and between two
   --      specs with bodies, prefers the one whose body is closer to being
   --      able to be elaborated. This is a clear improvement, but we provide
   --      this debug flag in case of regressions. Note: -do is even older
   --      than -dp.

   --  dp  Use old elaboration order preference. The new preference rules
   --      elaborate all units within a strongly connected component together,
   --      with no other units in between. In particular, if a spec/body pair
   --      can be elaborated together, it will be. In the new order, the binder
   --      behaves as if every pragma Elaborate_All that would be legal is
   --      present, even if it does not appear in the source code.

   --  du  List unit name and file name for each unit as it is read in

   --  dv  Verbose debugging printouts

   --  dx  Force the binder to read (and then ignore) the xref information
   --      in ali files (used to check that read circuit is working OK).

   --  d_a  GNATBIND ignores the effects of pragma Elaborate_All in the case of
   --       elaboration order and treats the associated dependency as a regular
   --       with edge.

   --  d_b  GNATBIND ignores the effects of pragma Elaborate_Body in the case
   --       of elaboration order and treats the spec and body as decoupled.

   --  d_e  GNATBIND ignores the effects of pragma Elaborate in the case of
   --       elaboration order and no longer creates an implicit dependency on
   --       the body of the argument.

   --  d_t  GNATBIND output trace information of cycle-detection activities to
   --       standard output.

   --  d_A  GNATBIND output the contents of all ALI invocation-related tables
   --       in textual format to standard output.

   --  d_C  GNATBIND diagnoses all unique cycles within the bind, rather than
   --       just the most important one.

   --  d_I  GNATBIND outputs the contents of the invocation graph in textual
   --       format to standard output.

   --  d_L  GNATBIND outputs the contents of the library graph in textual
   --       format to standard output.

   --  d_P  GNATBIND outputs the cycle paths to standard output

   --  d_S  GNATBIND outputs trace information concerning the status of its
   --       various phases to standard output.

   --  d_T  GNATBIND outputs trace information of elaboration order detection
   --       activities to standard output.

   --  d_V  GNATBIND validates the invocation graph, library graph along with
   --       its cycles, and the elaboration order.

   --------------------------------------------
   -- Documentation for gnatmake Debug Flags --
   --------------------------------------------

   --  df  Only output file names, not path names, in log

   --  dh  Generate listing showing loading of name table hash chains,
   --      same as for the compiler.

   --  dm  Issue a message indicating the maximum number of simultaneous
   --      compilations.

   --  dn  Do not delete temporary files created by gnatmake at the end
   --      of execution, such as temporary config pragma files, mapping
   --      files or project path files. This debug switch is equivalent to
   --      the standard switch --keep-temp-files. We retain the debug switch
   --      for back compatibility with past usage.

   --  dp  Prints the Q used by routine Make.Compile_Sources every time
   --      we go around the main compile loop of Make.Compile_Sources

   --  dq  Prints source files as they are enqueued and dequeued in the Q
   --      used by routine Make.Compile_Sources. Useful to figure out the
   --      order in which sources are recompiled.

   --  dt  When a time stamp mismatch has been found for an ALI file,
   --      display the source file name, the time stamp expected and
   --      the time stamp found.

   --  du  List unit name and file name for each unit as it is read in

   --  dw  Prints the list of units withed by the unit currently explored
   --      during the main loop of Make.Compile_Sources.

   ---------------------------------------------
   -- Documentation for gprbuild Debug Flags  --
   ---------------------------------------------

   --  dm  Display the maximum number of simultaneous compilations.

   --  dn  Do not delete temporary files created by gprbuild at the end
   --      of execution, such as temporary config pragma files, mapping
   --      files or project path files. This debug switch is equivalent to
   --      the standard switch --keep-temp-files. We retain the debug switch
   --      for back compatibility with past usage.

   --  dt  When a time stamp mismatch has been found for an ALI file,
   --      display the source file name, the time stamp expected and
   --      the time stamp found.

   --------------------
   -- Set_Debug_Flag --
   --------------------

   procedure Set_Debug_Flag (C : Character; Val : Boolean := True) is
      subtype Dig  is Character range '1' .. '9';
      subtype LLet is Character range 'a' .. 'z';
      subtype ULet is Character range 'A' .. 'Z';

   begin
      if C in Dig then
         case Dig (C) is
            when '1' =>
               Debug_Flag_1 := Val;
            when '2' =>
               Debug_Flag_2 := Val;
            when '3' =>
               Debug_Flag_3 := Val;
            when '4' =>
               Debug_Flag_4 := Val;
            when '5' =>
               Debug_Flag_5 := Val;
            when '6' =>
               Debug_Flag_6 := Val;
            when '7' =>
               Debug_Flag_7 := Val;
            when '8' =>
               Debug_Flag_8 := Val;
            when '9' =>
               Debug_Flag_9 := Val;
         end case;

      elsif C in ULet then
         case ULet (C) is
            when 'A' =>
               Debug_Flag_AA := Val;
            when 'B' =>
               Debug_Flag_BB := Val;
            when 'C' =>
               Debug_Flag_CC := Val;
            when 'D' =>
               Debug_Flag_DD := Val;
            when 'E' =>
               Debug_Flag_EE := Val;
            when 'F' =>
               Debug_Flag_FF := Val;
            when 'G' =>
               Debug_Flag_GG := Val;
            when 'H' =>
               Debug_Flag_HH := Val;
            when 'I' =>
               Debug_Flag_II := Val;
            when 'J' =>
               Debug_Flag_JJ := Val;
            when 'K' =>
               Debug_Flag_KK := Val;
            when 'L' =>
               Debug_Flag_LL := Val;
            when 'M' =>
               Debug_Flag_MM := Val;
            when 'N' =>
               Debug_Flag_NN := Val;
            when 'O' =>
               Debug_Flag_OO := Val;
            when 'P' =>
               Debug_Flag_PP := Val;
            when 'Q' =>
               Debug_Flag_QQ := Val;
            when 'R' =>
               Debug_Flag_RR := Val;
            when 'S' =>
               Debug_Flag_SS := Val;
            when 'T' =>
               Debug_Flag_TT := Val;
            when 'U' =>
               Debug_Flag_UU := Val;
            when 'V' =>
               Debug_Flag_VV := Val;
            when 'W' =>
               Debug_Flag_WW := Val;
            when 'X' =>
               Debug_Flag_XX := Val;
            when 'Y' =>
               Debug_Flag_YY := Val;
            when 'Z' =>
               Debug_Flag_ZZ := Val;
         end case;

      else
         case LLet (C) is
            when 'a' =>
               Debug_Flag_A := Val;
            when 'b' =>
               Debug_Flag_B := Val;
            when 'c' =>
               Debug_Flag_C := Val;
            when 'd' =>
               Debug_Flag_D := Val;
            when 'e' =>
               Debug_Flag_E := Val;
            when 'f' =>
               Debug_Flag_F := Val;
            when 'g' =>
               Debug_Flag_G := Val;
            when 'h' =>
               Debug_Flag_H := Val;
            when 'i' =>
               Debug_Flag_I := Val;
            when 'j' =>
               Debug_Flag_J := Val;
            when 'k' =>
               Debug_Flag_K := Val;
            when 'l' =>
               Debug_Flag_L := Val;
            when 'm' =>
               Debug_Flag_M := Val;
            when 'n' =>
               Debug_Flag_N := Val;
            when 'o' =>
               Debug_Flag_O := Val;
            when 'p' =>
               Debug_Flag_P := Val;
            when 'q' =>
               Debug_Flag_Q := Val;
            when 'r' =>
               Debug_Flag_R := Val;
            when 's' =>
               Debug_Flag_S := Val;
            when 't' =>
               Debug_Flag_T := Val;
            when 'u' =>
               Debug_Flag_U := Val;
            when 'v' =>
               Debug_Flag_V := Val;
            when 'w' =>
               Debug_Flag_W := Val;
            when 'x' =>
               Debug_Flag_X := Val;
            when 'y' =>
               Debug_Flag_Y := Val;
            when 'z' =>
               Debug_Flag_Z := Val;
         end case;
      end if;
   end Set_Debug_Flag;

   ---------------------------
   -- Set_Dotted_Debug_Flag --
   ---------------------------

   procedure Set_Dotted_Debug_Flag (C : Character; Val : Boolean := True) is
      subtype Dig  is Character range '1' .. '9';
      subtype LLet is Character range 'a' .. 'z';
      subtype ULet is Character range 'A' .. 'Z';

   begin
      if C in Dig then
         case Dig (C) is
            when '1' =>
               Debug_Flag_Dot_1 := Val;
            when '2' =>
               Debug_Flag_Dot_2 := Val;
            when '3' =>
               Debug_Flag_Dot_3 := Val;
            when '4' =>
               Debug_Flag_Dot_4 := Val;
            when '5' =>
               Debug_Flag_Dot_5 := Val;
            when '6' =>
               Debug_Flag_Dot_6 := Val;
            when '7' =>
               Debug_Flag_Dot_7 := Val;
            when '8' =>
               Debug_Flag_Dot_8 := Val;
            when '9' =>
               Debug_Flag_Dot_9 := Val;
         end case;

      elsif C in ULet then
         case ULet (C) is
            when 'A' =>
               Debug_Flag_Dot_AA := Val;
            when 'B' =>
               Debug_Flag_Dot_BB := Val;
            when 'C' =>
               Debug_Flag_Dot_CC := Val;
            when 'D' =>
               Debug_Flag_Dot_DD := Val;
            when 'E' =>
               Debug_Flag_Dot_EE := Val;
            when 'F' =>
               Debug_Flag_Dot_FF := Val;
            when 'G' =>
               Debug_Flag_Dot_GG := Val;
            when 'H' =>
               Debug_Flag_Dot_HH := Val;
            when 'I' =>
               Debug_Flag_Dot_II := Val;
            when 'J' =>
               Debug_Flag_Dot_JJ := Val;
            when 'K' =>
               Debug_Flag_Dot_KK := Val;
            when 'L' =>
               Debug_Flag_Dot_LL := Val;
            when 'M' =>
               Debug_Flag_Dot_MM := Val;
            when 'N' =>
               Debug_Flag_Dot_NN := Val;
            when 'O' =>
               Debug_Flag_Dot_OO := Val;
            when 'P' =>
               Debug_Flag_Dot_PP := Val;
            when 'Q' =>
               Debug_Flag_Dot_QQ := Val;
            when 'R' =>
               Debug_Flag_Dot_RR := Val;
            when 'S' =>
               Debug_Flag_Dot_SS := Val;
            when 'T' =>
               Debug_Flag_Dot_TT := Val;
            when 'U' =>
               Debug_Flag_Dot_UU := Val;
            when 'V' =>
               Debug_Flag_Dot_VV := Val;
            when 'W' =>
               Debug_Flag_Dot_WW := Val;
            when 'X' =>
               Debug_Flag_Dot_XX := Val;
            when 'Y' =>
               Debug_Flag_Dot_YY := Val;
            when 'Z' =>
               Debug_Flag_Dot_ZZ := Val;
         end case;

      else
         case LLet (C) is
            when 'a' =>
               Debug_Flag_Dot_A := Val;
            when 'b' =>
               Debug_Flag_Dot_B := Val;
            when 'c' =>
               Debug_Flag_Dot_C := Val;
            when 'd' =>
               Debug_Flag_Dot_D := Val;
            when 'e' =>
               Debug_Flag_Dot_E := Val;
            when 'f' =>
               Debug_Flag_Dot_F := Val;
            when 'g' =>
               Debug_Flag_Dot_G := Val;
            when 'h' =>
               Debug_Flag_Dot_H := Val;
            when 'i' =>
               Debug_Flag_Dot_I := Val;
            when 'j' =>
               Debug_Flag_Dot_J := Val;
            when 'k' =>
               Debug_Flag_Dot_K := Val;
            when 'l' =>
               Debug_Flag_Dot_L := Val;
            when 'm' =>
               Debug_Flag_Dot_M := Val;
            when 'n' =>
               Debug_Flag_Dot_N := Val;
            when 'o' =>
               Debug_Flag_Dot_O := Val;
            when 'p' =>
               Debug_Flag_Dot_P := Val;
            when 'q' =>
               Debug_Flag_Dot_Q := Val;
            when 'r' =>
               Debug_Flag_Dot_R := Val;
            when 's' =>
               Debug_Flag_Dot_S := Val;
            when 't' =>
               Debug_Flag_Dot_T := Val;
            when 'u' =>
               Debug_Flag_Dot_U := Val;
            when 'v' =>
               Debug_Flag_Dot_V := Val;
            when 'w' =>
               Debug_Flag_Dot_W := Val;
            when 'x' =>
               Debug_Flag_Dot_X := Val;
            when 'y' =>
               Debug_Flag_Dot_Y := Val;
            when 'z' =>
               Debug_Flag_Dot_Z := Val;
         end case;
      end if;
   end Set_Dotted_Debug_Flag;

   --------------------------------
   -- Set_Underscored_Debug_Flag --
   --------------------------------

   procedure Set_Underscored_Debug_Flag
     (C   : Character;
      Val : Boolean := True)
   is
      subtype Dig  is Character range '1' .. '9';
      subtype LLet is Character range 'a' .. 'z';
      subtype ULet is Character range 'A' .. 'Z';

   begin
      if C in Dig then
         case Dig (C) is
            when '1' =>
               Debug_Flag_Underscore_1 := Val;
            when '2' =>
               Debug_Flag_Underscore_2 := Val;
            when '3' =>
               Debug_Flag_Underscore_3 := Val;
            when '4' =>
               Debug_Flag_Underscore_4 := Val;
            when '5' =>
               Debug_Flag_Underscore_5 := Val;
            when '6' =>
               Debug_Flag_Underscore_6 := Val;
            when '7' =>
               Debug_Flag_Underscore_7 := Val;
            when '8' =>
               Debug_Flag_Underscore_8 := Val;
            when '9' =>
               Debug_Flag_Underscore_9 := Val;
         end case;

      elsif C in ULet then
         case ULet (C) is
            when 'A' =>
               Debug_Flag_Underscore_AA := Val;
            when 'B' =>
               Debug_Flag_Underscore_BB := Val;
            when 'C' =>
               Debug_Flag_Underscore_CC := Val;
            when 'D' =>
               Debug_Flag_Underscore_DD := Val;
            when 'E' =>
               Debug_Flag_Underscore_EE := Val;
            when 'F' =>
               Debug_Flag_Underscore_FF := Val;
            when 'G' =>
               Debug_Flag_Underscore_GG := Val;
            when 'H' =>
               Debug_Flag_Underscore_HH := Val;
            when 'I' =>
               Debug_Flag_Underscore_II := Val;
            when 'J' =>
               Debug_Flag_Underscore_JJ := Val;
            when 'K' =>
               Debug_Flag_Underscore_KK := Val;
            when 'L' =>
               Debug_Flag_Underscore_LL := Val;
            when 'M' =>
               Debug_Flag_Underscore_MM := Val;
            when 'N' =>
               Debug_Flag_Underscore_NN := Val;
            when 'O' =>
               Debug_Flag_Underscore_OO := Val;
            when 'P' =>
               Debug_Flag_Underscore_PP := Val;
            when 'Q' =>
               Debug_Flag_Underscore_QQ := Val;
            when 'R' =>
               Debug_Flag_Underscore_RR := Val;
            when 'S' =>
               Debug_Flag_Underscore_SS := Val;
            when 'T' =>
               Debug_Flag_Underscore_TT := Val;
            when 'U' =>
               Debug_Flag_Underscore_UU := Val;
            when 'V' =>
               Debug_Flag_Underscore_VV := Val;
            when 'W' =>
               Debug_Flag_Underscore_WW := Val;
            when 'X' =>
               Debug_Flag_Underscore_XX := Val;
            when 'Y' =>
               Debug_Flag_Underscore_YY := Val;
            when 'Z' =>
               Debug_Flag_Underscore_ZZ := Val;
         end case;

      else
         case LLet (C) is
            when 'a' =>
               Debug_Flag_Underscore_A := Val;
            when 'b' =>
               Debug_Flag_Underscore_B := Val;
            when 'c' =>
               Debug_Flag_Underscore_C := Val;
            when 'd' =>
               Debug_Flag_Underscore_D := Val;
            when 'e' =>
               Debug_Flag_Underscore_E := Val;
            when 'f' =>
               Debug_Flag_Underscore_F := Val;
            when 'g' =>
               Debug_Flag_Underscore_G := Val;
            when 'h' =>
               Debug_Flag_Underscore_H := Val;
            when 'i' =>
               Debug_Flag_Underscore_I := Val;
            when 'j' =>
               Debug_Flag_Underscore_J := Val;
            when 'k' =>
               Debug_Flag_Underscore_K := Val;
            when 'l' =>
               Debug_Flag_Underscore_L := Val;
            when 'm' =>
               Debug_Flag_Underscore_M := Val;
            when 'n' =>
               Debug_Flag_Underscore_N := Val;
            when 'o' =>
               Debug_Flag_Underscore_O := Val;
            when 'p' =>
               Debug_Flag_Underscore_P := Val;
            when 'q' =>
               Debug_Flag_Underscore_Q := Val;
            when 'r' =>
               Debug_Flag_Underscore_R := Val;
            when 's' =>
               Debug_Flag_Underscore_S := Val;
            when 't' =>
               Debug_Flag_Underscore_T := Val;
            when 'u' =>
               Debug_Flag_Underscore_U := Val;
            when 'v' =>
               Debug_Flag_Underscore_V := Val;
            when 'w' =>
               Debug_Flag_Underscore_W := Val;
            when 'x' =>
               Debug_Flag_Underscore_X := Val;
            when 'y' =>
               Debug_Flag_Underscore_Y := Val;
            when 'z' =>
               Debug_Flag_Underscore_Z := Val;
         end case;
      end if;
   end Set_Underscored_Debug_Flag;

end Debug;
