------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                               W A R N S W                                --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 1999-2023, 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.      --
--                                                                          --
------------------------------------------------------------------------------

--  This unit contains the routines used to handle setting of warning options
--  in the GNAT compiler.

package Warnsw is

   -------------------
   -- Warning Flags --
   -------------------

   --  These flags are activated or deactivated by -gnatw switches and control
   --  whether warnings of a given class will be generated or not.

   package Warnings_Package is
      type Opt_Warnings_Enum is
        --  List of all warnings that can be enabled, plus the two null-ish
        --  values.
        (No_Such_Warning, Special_Case, -- see body

         Address_Clause_Overlay_Warnings,
         Check_Unreferenced,
         Check_Unreferenced_Formals,
         Check_Withs,
         Constant_Condition_Warnings,
         Elab_Info_Messages,
         Elab_Warnings,
         Implementation_Unit_Warnings,
         Ineffective_Inline_Warnings,
         List_Body_Required_Info,
         List_Inherited_Aspects,
         Warning_Doc_Switch,
         Warn_On_Ada_2005_Compatibility,
         Warn_On_Ada_2012_Compatibility,
         Warn_On_Ada_2022_Compatibility,
         Warn_On_All_Unread_Out_Parameters,
         Warn_On_Anonymous_Allocators,
         Warn_On_Assertion_Failure,
         Warn_On_Assumed_Low_Bound,
         Warn_On_Atomic_Synchronization,
         Warn_On_Bad_Fixed_Value,
         Warn_On_Biased_Representation,
         Warn_On_Component_Order,
         Warn_On_Constant,
         Warn_On_Deleted_Code,
         Warn_On_Dereference,
         Warn_On_Elab_Access,
         Warn_On_Export_Import,
         Warn_On_Hiding,
         Warn_On_Ignored_Equality,
         Warn_On_Late_Primitives,
         Warn_On_Modified_Unread,
         Warn_On_No_Value_Assigned,
         Warn_On_Non_Local_Exception,
         No_Warn_On_Non_Local_Exception,
         Warn_On_Object_Renames_Function,
         Warn_On_Obsolescent_Feature,
         Warn_On_Overlap,
         Warn_On_Overridden_Size,
         Warn_On_Parameter_Order,
         Warn_On_Pedantic_Checks,
         Warn_On_Questionable_Layout,
         Warn_On_Questionable_Missing_Parens,
         Warn_On_Record_Holes,
         Warn_On_Redundant_Constructs,
         Warn_On_Reverse_Bit_Order,
         Warn_On_Size_Alignment,
         Warn_On_Standard_Redefinition,
         Warn_On_Suspicious_Contract,
         Warn_On_Suspicious_Modulus_Value,
         Warn_On_Unchecked_Conversion,
         Warn_On_Unknown_Compile_Time_Warning,
         Warn_On_Unordered_Enumeration_Type,
         Warn_On_Unrecognized_Pragma,
         Warn_On_Unrepped_Components,
         Warn_On_Warnings_Off); -- Opt_Warnings_Enum

      subtype Warnings_Enum is Opt_Warnings_Enum
        range Opt_Warnings_Enum'Succ (Special_Case) .. Opt_Warnings_Enum'Last;
      --  Just the warning switches, without the null-ish values
   end Warnings_Package;
   use Warnings_Package;

   type Warnings_State is array (Warnings_Enum) of Boolean;
   pragma Pack (Warnings_State);
   --  Without Pack, we can have bootstrapping failures, because the compiler
   --  generates calls to System.Boolean_Array_Operations, which is not
   --  currently part of the compiler.

   Warning_Flags : Warnings_State :=
   --  Current state of warnings -- True/False means enabled/disabled.
   --  The following initializes the flags to their default values,
   --  and warning switches modify them.
     (Address_Clause_Overlay_Warnings |
      Elab_Warnings |
      Implementation_Unit_Warnings |
      Warning_Doc_Switch |
      Warn_On_Ada_2005_Compatibility |
      Warn_On_Ada_2012_Compatibility |
      Warn_On_Ada_2022_Compatibility |
      Warn_On_Assertion_Failure |
      Warn_On_Assumed_Low_Bound |
      Warn_On_Biased_Representation |
      Warn_On_Export_Import |
      Warn_On_No_Value_Assigned |
      Warn_On_Questionable_Missing_Parens |
      Warn_On_Reverse_Bit_Order |
      Warn_On_Size_Alignment |
      Warn_On_Suspicious_Contract |
      Warn_On_Suspicious_Modulus_Value |
      Warn_On_Unchecked_Conversion |
      Warn_On_Unknown_Compile_Time_Warning |
      Warn_On_Unrecognized_Pragma =>
        True,

      Check_Unreferenced |
      Check_Unreferenced_Formals |
      Check_Withs |
      Constant_Condition_Warnings |
      Elab_Info_Messages |
      Ineffective_Inline_Warnings |
      List_Body_Required_Info |
      List_Inherited_Aspects |
      Warn_On_All_Unread_Out_Parameters |
      Warn_On_Anonymous_Allocators |
      Warn_On_Atomic_Synchronization |
      Warn_On_Bad_Fixed_Value |
      Warn_On_Component_Order |
      Warn_On_Constant |
      Warn_On_Deleted_Code |
      Warn_On_Dereference |
      Warn_On_Elab_Access |
      Warn_On_Hiding |
      Warn_On_Ignored_Equality |
      Warn_On_Late_Primitives |
      Warn_On_Modified_Unread |
      Warn_On_Non_Local_Exception |
      No_Warn_On_Non_Local_Exception |
      Warn_On_Object_Renames_Function |
      Warn_On_Obsolescent_Feature |
      Warn_On_Overlap |
      Warn_On_Overridden_Size |
      Warn_On_Parameter_Order |
      Warn_On_Pedantic_Checks |
      Warn_On_Questionable_Layout |
      Warn_On_Record_Holes |
      Warn_On_Redundant_Constructs |
      Warn_On_Standard_Redefinition |
      Warn_On_Unordered_Enumeration_Type |
      Warn_On_Unrepped_Components |
      Warn_On_Warnings_Off =>
        False);

   package X renames Warnings_Package;
   F : Warnings_State renames Warning_Flags;
   --  Short-hand names used only locally to this package

   --  The following rename all the components of Warning_Flags for convenient
   --  access throughout the compiler.

   pragma Style_Checks ("M120");
   Address_Clause_Overlay_Warnings : Boolean renames F (X.Address_Clause_Overlay_Warnings);
   --  Set False to disable address clause warnings. Modified by use of
   --  -gnatwo/O.

   Check_Unreferenced : Boolean renames F (X.Check_Unreferenced);
   --  Set to True to enable checking for unreferenced entities other
   --  than formal parameters (for which see Check_Unreferenced_Formals)
   --  Modified by use of -gnatwu/U.

   Check_Unreferenced_Formals : Boolean renames F (X.Check_Unreferenced_Formals);
   --  Set to True to check for unreferenced formals. This is turned on by
   --  -gnatwa/wf/wu and turned off by -gnatwA/wF/wU.

   Check_Withs : Boolean renames F (X.Check_Withs);
   --  Set to True to enable checking for unused withs, and also the case
   --  of withing a package and using none of the entities in the package.
   --  Modified by use of -gnatwu/U.

   Constant_Condition_Warnings : Boolean renames F (X.Constant_Condition_Warnings);
   --  Set to True to activate warnings on constant conditions. Modified by
   --  use of -gnatwc/C.

   Elab_Info_Messages : Boolean renames F (X.Elab_Info_Messages);
   --  Set to True to output info messages for static elabmodel (-gnatel)

   Elab_Warnings : Boolean renames F (X.Elab_Warnings);
   --  Set to True to generate elaboration warnings (-gnatwl). The warnings are
   --  enabled by default because they carry the same importance as errors. The
   --  compiler cannot emit actual errors because elaboration diagnostics need
   --  dataflow analysis, which is not available. This behavior parallels that
   --  of the old ABE mechanism.

   Implementation_Unit_Warnings : Boolean renames F (X.Implementation_Unit_Warnings);
   --  Set True to active warnings for use of implementation internal units.
   --  Modified by use of -gnatwi/-gnatwI.

   Ineffective_Inline_Warnings : Boolean renames F (X.Ineffective_Inline_Warnings);
   --  Set True to activate warnings if front-end inlining (-gnatN) is not able
   --  to actually inline a particular call (or all calls). Can be controlled
   --  by use of -gnatwp/-gnatwP. Also set True to activate warnings if
   --  frontend inlining is not able to inline a subprogram expected to
   --  be inlined in GNATprove mode.

   List_Body_Required_Info : Boolean renames F (X.List_Body_Required_Info);
   --  List info messages about why a package requires a body. Modified by use
   --  of -gnatw.y/.Y.

   List_Inherited_Aspects : Boolean renames F (X.List_Inherited_Aspects);
   --  List inherited invariants, preconditions, and postconditions from
   --  Invariant'Class, Pre'Class, and Post'Class aspects. Also list inherited
   --  subtype predicates. Modified by use of -gnatw.l/.L.

   Warning_Doc_Switch : Boolean renames F (X.Warning_Doc_Switch);
   --  If this is set True, then the ??/?*?/?$?/?x?/?.x?/?_x? insertion
   --  sequences in error messages generate appropriate tags for the output
   --  error messages. If this switch is False, then these sequences are still
   --  recognized (for the purposes of implementing the pattern matching in
   --  pragmas Warnings (Off,..) and Warning_As_Error(...) but do not result
   --  in adding the error message tag. The -gnatw.d switch sets this flag
   --  True, -gnatw.D sets this flag False.

   Warn_On_Ada_2005_Compatibility : Boolean renames F (X.Warn_On_Ada_2005_Compatibility);
   --  Set to True to generate all warnings on Ada 2005 compatibility issues,
   --  including warnings on Ada 2005 obsolescent features used in Ada 2005
   --  mode. Set by default, modified by use of -gnatwy/Y.

   Warn_On_Ada_2012_Compatibility : Boolean renames F (X.Warn_On_Ada_2012_Compatibility);
   --  Set to True to generate all warnings on Ada 2012 compatibility issues,
   --  including warnings on Ada 2012 obsolescent features used in Ada 2012
   --  mode. Modified by use of -gnatwy/Y.

   Warn_On_Ada_2022_Compatibility : Boolean renames F (X.Warn_On_Ada_2022_Compatibility);
   --  Set to True to generate all warnings on Ada 2022 compatibility issues,
   --  including warnings on Ada 2022 obsolescent features used in Ada 2022
   --  mode. There is no switch controlling this option.

   Warn_On_All_Unread_Out_Parameters : Boolean renames F (X.Warn_On_All_Unread_Out_Parameters);
   --  Set to True to generate warnings in all cases where a variable is
   --  modified by being passed as to an OUT formal, but the resulting value is
   --  never read. The default is that this warning is suppressed. Modified
   --  by use of gnatw.o/.O.

   Warn_On_Anonymous_Allocators : Boolean renames F (X.Warn_On_Anonymous_Allocators);
   --  Warn when allocators for anonymous access types are present, which,
   --  although not illegal in Ada, may be confusing to users due to how
   --  accessibility checks get generated. Off by default, modified by use
   --  of -gnatw_a/_A and set as part of -gnatwa.

   Warn_On_Assertion_Failure : Boolean renames F (X.Warn_On_Assertion_Failure);
   --  Set to True to activate warnings on assertions that can be determined
   --  at compile time will always fail. Modified by use of -gnatw.a/.A.

   Warn_On_Assumed_Low_Bound : Boolean renames F (X.Warn_On_Assumed_Low_Bound);
   --  Set to True to activate warnings for string parameters that are indexed
   --  with literals or S'Length, presumably assuming a lower bound of one.
   --  Modified by use of -gnatww/W.

   Warn_On_Atomic_Synchronization : Boolean renames F (X.Warn_On_Atomic_Synchronization);
   --  Set to True to generate information messages for atomic synchronization.
   --  Modified by use of -gnatw.n/.N.

   Warn_On_Bad_Fixed_Value : Boolean renames F (X.Warn_On_Bad_Fixed_Value);
   --  Set to True to generate warnings for static fixed-point expression
   --  values that are not an exact multiple of the small value of the type.
   --  Odd by default, modified by use of -gnatwb/B.

   Warn_On_Biased_Representation : Boolean renames F (X.Warn_On_Biased_Representation);
   --  Set to True to generate warnings for size clauses, component clauses
   --  and component_size clauses that force biased representation. Modified
   --  by use of -gnatw.b/.B.

   Warn_On_Component_Order : Boolean renames F (X.Warn_On_Component_Order);
   --  Warn when record component clauses are out of order with respect to the
   --  component declarations, or if the memory layout is out of order with
   --  respect to component declarations and clauses.  Off by default, set by
   --  -gnatw_r (but not -gnatwa).

   Warn_On_Constant : Boolean renames F (X.Warn_On_Constant);
   --  Set to True to generate warnings for variables that could be declared
   --  as constants. Modified by use of -gnatwk/K.

   Warn_On_Deleted_Code : Boolean renames F (X.Warn_On_Deleted_Code);
   --  Set to True to generate warnings for code deleted by the front end
   --  for conditional statements whose outcome is known at compile time.
   --  Modified by use of -gnatwt/T.

   Warn_On_Dereference : Boolean renames F (X.Warn_On_Dereference);
   --  Set to True to generate warnings for implicit dereferences for array
   --  indexing and record component access. Modified by use of -gnatwd/D.

   Warn_On_Elab_Access : Boolean renames F (X.Warn_On_Elab_Access);
   --  Set to True to generate warnings for P'Access in the case where
   --  subprogram P is in the same package as the P'Access, and the P'Access is
   --  evaluated at package elaboration time, and occurs before the body of P
   --  has been elaborated. Modified by use of -gnatw.f/.F.

   Warn_On_Export_Import : Boolean renames F (X.Warn_On_Export_Import);
   --  Set to True to generate warnings for suspicious use of export or
   --  import pragmas. Modified by use of -gnatwx/X.

   Warn_On_Hiding : Boolean renames F (X.Warn_On_Hiding);
   --  Set to True to generate warnings if a declared entity hides another
   --  entity. The default is that this warning is suppressed. Modified by
   --  use of -gnatwh/H.

   Warn_On_Ignored_Equality : Boolean renames F (X.Warn_On_Ignored_Equality);
   --  Warn when a user-defined "=" function does not compose (i.e. is ignored
   --  for a predefined "=" for a composite type containing a component of
   --  whose type has the user-defined "=" as primitive). Off by default, and
   --  set by -gnatw_q (but not -gnatwa).

   Warn_On_Late_Primitives : Boolean renames F (X.Warn_On_Late_Primitives);
   --  Warn when tagged type public primitives are defined after its private
   --  extensions.

   Warn_On_Modified_Unread : Boolean renames F (X.Warn_On_Modified_Unread);
   --  Set to True to generate warnings if a variable is assigned but is never
   --  read. Also controls warnings for similar cases involving out parameters,
   --  but only if there is only one out parameter for the procedure involved.
   --  The default is that this warning is suppressed, modified by use of
   --  -gnatwm/M.

   Warn_On_No_Value_Assigned : Boolean renames F (X.Warn_On_No_Value_Assigned);
   --  Set to True to generate warnings if no value is ever assigned to a
   --  variable that is at least partially uninitialized. Set to false to
   --  suppress such warnings. The default is that such warnings are enabled.
   --  Modified by use of -gnatwv/V.

   Warn_On_Non_Local_Exception : Boolean renames F (X.Warn_On_Non_Local_Exception);
   --  Set to True to generate warnings for non-local exception raises and also
   --  handlers that can never handle a local raise. This warning is only ever
   --  generated if pragma Restrictions (No_Exception_Propagation) is set. The
   --  default is not to generate the warnings except that if the source has
   --  at least one exception handler, and this restriction is set, and the
   --  warning was not explicitly turned off, then it is turned on by default.
   --  Modified by use of -gnatw.x/.X.

   No_Warn_On_Non_Local_Exception : Boolean renames F (X.No_Warn_On_Non_Local_Exception);
   --  This is set to True if the above warning is explicitly suppressed. We
   --  use this to avoid turning it on by default when No_Exception_Propagation
   --  restriction is set and an exception handler is present.

   Warn_On_Object_Renames_Function : Boolean renames F (X.Warn_On_Object_Renames_Function);
   --  Set to True to generate warnings when a function result is renamed as
   --  an object. The default is that this warning is disabled. Modified by
   --  use of -gnatw.r/.R.

   Warn_On_Obsolescent_Feature : Boolean renames F (X.Warn_On_Obsolescent_Feature);
   --  Set to True to generate warnings on use of any feature in Annex or if a
   --  subprogram is called for which a pragma Obsolescent applies. Modified
   --  by use of -gnatwj/J.

   Warn_On_Overlap : Boolean renames F (X.Warn_On_Overlap);
   --  Set to True to generate warnings when a writable actual overlaps with
   --  another actual in a subprogram call. This applies only in modes before
   --  Ada 2012. Starting with Ada 2012, such overlaps are illegal.
   --  Modified by use of -gnatw.i/.I.

   Warn_On_Overridden_Size : Boolean renames F (X.Warn_On_Overridden_Size);
   --  Warn when explicit record component clause or array component_size
   --  clause specifies a size that overrides a size for the type which was
   --  set with an explicit size clause. Off by default, modified by use of
   --  -gnatw.s/.S (but not -gnatwa).

   Warn_On_Parameter_Order : Boolean renames F (X.Warn_On_Parameter_Order);
   --  Set to True to generate warnings for cases where the argument list for
   --  a call is a sequence of identifiers that match the formal identifiers,
   --  but are in the wrong order.

   Warn_On_Pedantic_Checks : Boolean renames F (X.Warn_On_Pedantic_Checks);
   --  Warn for violation of miscellaneous pedantic rules (such as when the
   --  subtype of a formal parameter given in a subprogram body's specification
   --  comes from a different subtype declaration that the subtype of the
   --  formal in the subprogram declaration). Off by default, and set by
   --  -gnatw_p (but not -gnatwa).

   Warn_On_Questionable_Layout : Boolean renames F (X.Warn_On_Questionable_Layout);
   --  Warn when default layout of a record type is questionable for run-time
   --  efficiency reasons and would be improved by reordering the components.
   --  Off by default, modified by use of -gnatw.q/.Q (but not -gnatwa).

   function Get_Warn_On_Questionable_Layout return Boolean is
     (Warn_On_Questionable_Layout);
   --  WARNING: There is a matching C declaration of this function in fe.h

   Warn_On_Questionable_Missing_Parens : Boolean renames F (X.Warn_On_Questionable_Missing_Parens);
   --  Set to True to generate warnings for cases where parentheses are missing
   --  and the usage is questionable, because the intent is unclear. On by
   --  default, modified by use of -gnatwq/Q.

   Warn_On_Record_Holes : Boolean renames F (X.Warn_On_Record_Holes);
   --  Warn when explicit record component clauses leave uncovered holes (gaps)
   --  in a record layout. Off by default, set by -gnatw.h (but not -gnatwa).

   Warn_On_Redundant_Constructs : Boolean renames F (X.Warn_On_Redundant_Constructs);
   --  Set to True to generate warnings for redundant constructs (e.g. useless
   --  assignments/conversions). The default is that this warning is disabled.
   --  Modified by use of -gnatwr/R.

   Warn_On_Reverse_Bit_Order : Boolean renames F (X.Warn_On_Reverse_Bit_Order);
   --  Set to True to generate warning (informational) messages for component
   --  clauses that are affected by non-standard bit-order. The default is
   --  that this warning is enabled. Modified by -gnatw.v/.V.

   Warn_On_Size_Alignment : Boolean renames F (X.Warn_On_Size_Alignment);
   --  Warn when explicit Size and Alignment clauses are given for a type, and
   --  the size is not a multiple of the alignment. Off by default, modified
   --  by use of -gnatw.z/.Z and set as part of -gnatwa.

   Warn_On_Standard_Redefinition : Boolean renames F (X.Warn_On_Standard_Redefinition);
   --  Warn when a program defines an identifier that matches a name in
   --  Standard. Off by default, modified by use of -gnatw.k/.K (but not
   --  by -gnatwa).

   Warn_On_Suspicious_Contract : Boolean renames F (X.Warn_On_Suspicious_Contract);
   --  Set to True to generate warnings for suspicious contracts expressed as
   --  pragmas or aspects precondition and postcondition, as well as other
   --  suspicious cases of expressions typically found in contracts like
   --  quantified expressions and uses of Update attribute. The default is that
   --  this warning is enabled. Modified by use of -gnatw.t/.T.

   Warn_On_Suspicious_Modulus_Value : Boolean renames F (X.Warn_On_Suspicious_Modulus_Value);
   --  Set to True to generate warnings for suspicious modulus values, as well
   --  as negative literals of a modular type. The default is that this warning
   --  is enabled. Modified by -gnatw.m/.M.

   Warn_On_Unchecked_Conversion : Boolean renames F (X.Warn_On_Unchecked_Conversion);
   --  Set to True to generate warnings for unchecked conversions that may have
   --  non-portable semantics (e.g. because sizes of types differ). Modified
   --  by use of -gnatwz/Z.

   Warn_On_Unknown_Compile_Time_Warning : Boolean renames F (X.Warn_On_Unknown_Compile_Time_Warning);
   --  Warn on a pragma Compile_Time_Warning whose condition has a value that
   --  is not known at compile time. On by default, modified by use
   --  of -gnatw_c/_C and set as part of -gnatwa.

   Warn_On_Unordered_Enumeration_Type : Boolean renames F (X.Warn_On_Unordered_Enumeration_Type);
   --  Set to True to generate warnings for inappropriate uses (comparisons
   --  and explicit ranges) on unordered enumeration types (which includes
   --  all enumeration types for which pragma Ordered is not given). The
   --  default is that this warning is disabled. Modified by -gnat.u/.U.

   Warn_On_Unrecognized_Pragma : Boolean renames F (X.Warn_On_Unrecognized_Pragma);
   --  Set to True to generate warnings for unrecognized pragmas. The default
   --  is that this warning is enabled. Modified by use of -gnatwg/G.

   Warn_On_Unrepped_Components : Boolean renames F (X.Warn_On_Unrepped_Components);
   --  Set to True to generate warnings for the case of components of record
   --  which have a record representation clause but this component does not
   --  have a component clause. Modified by use of -gnatw.c/.C.

   Warn_On_Warnings_Off : Boolean renames F (X.Warn_On_Warnings_Off);
   --  Set to True to generate warnings for use of Pragma Warnings (Off, ent),
   --  where either the pragma is never used, or it could be replaced by a
   --  pragma Unmodified or Unreferenced. Also generates warnings for pragma
   --  Warning (Off, string) which either has no matching pragma Warning On,
   --  or where no warning has been suppressed by the use of the pragma.
   --  Modified by use of -gnatw.w/.W.
   pragma Style_Checks ("M79");

   -----------------------------------
   -- Saving and Restoring Warnings --
   -----------------------------------

   function Save_Warnings return Warnings_State;
   --  Returns current settings of warnings

   procedure Restore_Warnings (W : Warnings_State);
   --  Restores current settings of warning flags from W

   -----------------
   -- Subprograms --
   -----------------

   type Warning_Family is
     --  The "family" indicates the form of warning switch:
     (Plain, -- form "-gnatwx"
      '.',   -- form "-gnatw.x"
      '_');  -- form "-gnatw_x"
     --  where "x" is a lowercase letter that enables a particular warning.
     --  Typically, uppercase of "x" disables the warning, but there are some
     --  switches that do not follow that pattern.

   function Set_Warning_Switch
     (Family : Warning_Family; C : Character) return Boolean;
   --  Set the warning switch or switches corresponding to the given family and
   --  character. Returns True for valid warning switch, False for invalid.
   --  Called for -gnatw... switches, and for pragma Warnings.

   procedure Set_GNAT_Mode_Warnings;
   --  Called for -gnatg and -gnatw.g to set GNAT mode warnings. This set of
   --  warnings is neither a subset nor a superset of -gnatwa.

end Warnsw;
