------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                              A S P E C T S                               --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 2010-2021, 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 package defines the aspects that are recognized by GNAT in aspect
--  specifications. It also contains the subprograms for storing/retrieving
--  aspect specifications from the tree. The semantic processing for aspect
--  specifications is found in Sem_Ch13.Analyze_Aspect_Specifications.

------------------------
-- Adding New Aspects --
------------------------

--  In general, each aspect should have a corresponding pragma or attribute, so
--  that the newly developed functionality is available for old Ada versions.
--  When both are defined, it is convenient to first transform the aspect into
--  an equivalent pragma or attribute in Sem_Ch13.Analyze_Aspect_Specifications
--  and then analyze that.

--  To add a new aspect, you need to do the following

--    1. Create a name in snames.ads-tmpl

--    2. Create a value in type Aspect_Id in this unit

--    3. Add a value for the aspect in the global arrays defined in this unit

--    4. Add code for the aspect in Sem_Ch13.Analyze_Aspect_Specifications.
--       This may involve adding some nodes to the tree to perform additional
--       treatments later.

--    5. If the semantic analysis of expressions/names in the aspect should not
--       occur at the point the aspect is defined, add code in the appropriate
--       semantic analysis procedure for the aspect. For example, this is the
--       case for aspects Pre and Post on subprograms, which are preanalyzed
--       at the end of the declaration list to which the subprogram belongs,
--       and fully analyzed (possibly with expansion) during the semantic
--       analysis of subprogram bodies.

with Namet;   use Namet;
with Snames;  use Snames;
with Types;   use Types;

package Aspects is

   --  Type defining recognized aspects

   type Aspect_Id is
     (No_Aspect,                            -- Dummy entry for no aspect
      Aspect_Abstract_State,                -- GNAT
      Aspect_Address,
      Aspect_Aggregate,
      Aspect_Alignment,
      Aspect_Annotate,                      -- GNAT
      Aspect_Async_Readers,                 -- GNAT
      Aspect_Async_Writers,                 -- GNAT
      Aspect_Attach_Handler,
      Aspect_Bit_Order,
      Aspect_Component_Size,
      Aspect_Constant_After_Elaboration,    -- GNAT
      Aspect_Constant_Indexing,
      Aspect_Contract_Cases,                -- GNAT
      Aspect_Convention,
      Aspect_CPU,
      Aspect_Default_Component_Value,
      Aspect_Default_Initial_Condition,     -- GNAT
      Aspect_Default_Iterator,
      Aspect_Default_Storage_Pool,
      Aspect_Default_Value,
      Aspect_Depends,                       -- GNAT
      Aspect_Dimension,                     -- GNAT
      Aspect_Dimension_System,              -- GNAT
      Aspect_Dispatching_Domain,
      Aspect_Dynamic_Predicate,
      Aspect_Effective_Reads,               -- GNAT
      Aspect_Effective_Writes,              -- GNAT
      Aspect_Extensions_Visible,            -- GNAT
      Aspect_External_Name,
      Aspect_External_Tag,
      Aspect_Ghost,                         -- GNAT
      Aspect_Global,                        -- GNAT
      Aspect_GNAT_Annotate,                 -- GNAT
      Aspect_Implicit_Dereference,
      Aspect_Initial_Condition,             -- GNAT
      Aspect_Initializes,                   -- GNAT
      Aspect_Input,
      Aspect_Integer_Literal,
      Aspect_Interrupt_Priority,
      Aspect_Invariant,                     -- GNAT
      Aspect_Iterator_Element,
      Aspect_Iterable,                      -- GNAT
      Aspect_Link_Name,
      Aspect_Linker_Section,                -- GNAT
      Aspect_Machine_Radix,
      Aspect_Max_Entry_Queue_Depth,         -- GNAT
      Aspect_Max_Entry_Queue_Length,
      Aspect_Max_Queue_Length,              -- GNAT
      Aspect_No_Caching,                    -- GNAT
      Aspect_No_Controlled_Parts,
      Aspect_No_Task_Parts,                 -- GNAT
      Aspect_Object_Size,                   -- GNAT
      Aspect_Obsolescent,                   -- GNAT
      Aspect_Output,
      Aspect_Part_Of,                       -- GNAT
      Aspect_Post,
      Aspect_Postcondition,
      Aspect_Pre,
      Aspect_Precondition,
      Aspect_Predicate,                     -- GNAT
      Aspect_Predicate_Failure,
      Aspect_Priority,
      Aspect_Put_Image,
      Aspect_Read,
      Aspect_Real_Literal,
      Aspect_Refined_Depends,               -- GNAT
      Aspect_Refined_Global,                -- GNAT
      Aspect_Refined_Post,                  -- GNAT
      Aspect_Refined_State,                 -- GNAT
      Aspect_Relative_Deadline,
      Aspect_Relaxed_Initialization,        -- GNAT
      Aspect_Scalar_Storage_Order,          -- GNAT
      Aspect_Secondary_Stack_Size,          -- GNAT
      Aspect_Simple_Storage_Pool,           -- GNAT
      Aspect_Size,
      Aspect_Small,
      Aspect_SPARK_Mode,                    -- GNAT
      Aspect_Stable_Properties,
      Aspect_Static_Predicate,
      Aspect_Storage_Pool,
      Aspect_Storage_Size,
      Aspect_Stream_Size,
      Aspect_String_Literal,
      Aspect_Subprogram_Variant,            -- GNAT
      Aspect_Suppress,
      Aspect_Synchronization,
      Aspect_Test_Case,                     -- GNAT
      Aspect_Type_Invariant,
      Aspect_Unimplemented,                 -- GNAT
      Aspect_Unsuppress,
      Aspect_Value_Size,                    -- GNAT
      Aspect_Variable_Indexing,
      Aspect_Volatile_Function,             -- GNAT
      Aspect_Warnings,                      -- GNAT
      Aspect_Write,

      --  The following aspects correspond to library unit pragmas

      Aspect_All_Calls_Remote,
      Aspect_Elaborate_Body,
      Aspect_No_Elaboration_Code_All,       -- GNAT
      Aspect_Preelaborate,
      Aspect_Pure,
      Aspect_Remote_Call_Interface,
      Aspect_Remote_Types,
      Aspect_Shared_Passive,

      --  Remaining aspects have a static boolean value that turns the aspect
      --  on or off. They all correspond to pragmas, but are only converted to
      --  the pragmas where the value is True. A value of False normally means
      --  that the aspect is ignored, except in the case of derived types where
      --  the aspect value is inherited from the parent, in which case, we do
      --  not allow False if we inherit a True value from the parent.

      Aspect_Asynchronous,
      Aspect_Atomic,
      Aspect_Atomic_Components,
      Aspect_Disable_Controlled,            -- GNAT
      Aspect_Discard_Names,
      Aspect_CUDA_Global,                   -- GNAT
      Aspect_Exclusive_Functions,
      Aspect_Export,
      Aspect_Favor_Top_Level,               -- GNAT
      Aspect_Full_Access_Only,
      Aspect_Independent,
      Aspect_Independent_Components,
      Aspect_Import,
      Aspect_Inline,
      Aspect_Inline_Always,                 -- GNAT
      Aspect_Interrupt_Handler,
      Aspect_Lock_Free,                     -- GNAT
      Aspect_No_Inline,                     -- GNAT
      Aspect_No_Return,
      Aspect_No_Tagged_Streams,             -- GNAT
      Aspect_Pack,
      Aspect_Persistent_BSS,                -- GNAT
      Aspect_Preelaborable_Initialization,
      Aspect_Pure_Function,                 -- GNAT
      Aspect_Remote_Access_Type,            -- GNAT
      Aspect_Shared,                        -- GNAT (equivalent to Atomic)
      Aspect_Simple_Storage_Pool_Type,      -- GNAT
      Aspect_Static,
      Aspect_Suppress_Debug_Info,           -- GNAT
      Aspect_Suppress_Initialization,       -- GNAT
      Aspect_Thread_Local_Storage,          -- GNAT
      Aspect_Unchecked_Union,
      Aspect_Universal_Aliasing,            -- GNAT
      Aspect_Unmodified,                    -- GNAT
      Aspect_Unreferenced,                  -- GNAT
      Aspect_Unreferenced_Objects,          -- GNAT
      Aspect_Volatile,
      Aspect_Volatile_Components,
      Aspect_Volatile_Full_Access,          -- GNAT
      Aspect_Yield);

   subtype Aspect_Id_Exclude_No_Aspect is
     Aspect_Id range Aspect_Id'Succ (No_Aspect) .. Aspect_Id'Last;
   --  Aspect_Id's excluding No_Aspect

   subtype Nonoverridable_Aspect_Id is Aspect_Id with
     Static_Predicate => Nonoverridable_Aspect_Id in
       Aspect_Default_Iterator | Aspect_Iterator_Element |
       Aspect_Implicit_Dereference | Aspect_Constant_Indexing |
       Aspect_Variable_Indexing | Aspect_Aggregate |
       Aspect_Max_Entry_Queue_Length
       --  | Aspect_No_Controlled_Parts
       --  ??? No_Controlled_Parts not yet in Aspect_Id enumeration
       ;  --  see RM 13.1.1(18.7)

   --  The following array indicates aspects that accept 'Class

   Class_Aspect_OK : constant array (Aspect_Id) of Boolean :=
     (Aspect_Input             => True,
      Aspect_Invariant         => True,
      Aspect_Output            => True,
      Aspect_Pre               => True,
      Aspect_Predicate         => True,
      Aspect_Post              => True,
      Aspect_Read              => True,
      Aspect_Write             => True,
      Aspect_Stable_Properties => True,
      Aspect_Type_Invariant    => True,
      others                   => False);

   --  The following array identifies all implementation defined aspects

   Implementation_Defined_Aspect : constant array (Aspect_Id) of Boolean :=
     (Aspect_Abstract_State             => True,
      Aspect_Annotate                   => True,
      Aspect_Async_Readers              => True,
      Aspect_Async_Writers              => True,
      Aspect_Constant_After_Elaboration => True,
      Aspect_Contract_Cases             => True,
      Aspect_Depends                    => True,
      Aspect_Dimension                  => True,
      Aspect_Dimension_System           => True,
      Aspect_Effective_Reads            => True,
      Aspect_Effective_Writes           => True,
      Aspect_Extensions_Visible         => True,
      Aspect_Favor_Top_Level            => True,
      Aspect_Ghost                      => True,
      Aspect_Global                     => True,
      Aspect_GNAT_Annotate              => True,
      Aspect_Inline_Always              => True,
      Aspect_Invariant                  => True,
      Aspect_Lock_Free                  => True,
      Aspect_Max_Entry_Queue_Depth      => True,
      Aspect_Max_Entry_Queue_Length     => True,
      Aspect_Max_Queue_Length           => True,
      Aspect_Object_Size                => True,
      Aspect_Persistent_BSS             => True,
      Aspect_Predicate                  => True,
      Aspect_Pure_Function              => True,
      Aspect_Relaxed_Initialization     => True,
      Aspect_Remote_Access_Type         => True,
      Aspect_Scalar_Storage_Order       => True,
      Aspect_Secondary_Stack_Size       => True,
      Aspect_Shared                     => True,
      Aspect_Simple_Storage_Pool        => True,
      Aspect_Simple_Storage_Pool_Type   => True,
      Aspect_Suppress_Debug_Info        => True,
      Aspect_Suppress_Initialization    => True,
      Aspect_Thread_Local_Storage       => True,
      Aspect_Test_Case                  => True,
      Aspect_Universal_Aliasing         => True,
      Aspect_Unmodified                 => True,
      Aspect_Unreferenced               => True,
      Aspect_Unreferenced_Objects       => True,
      Aspect_Value_Size                 => True,
      Aspect_Volatile_Function          => True,
      Aspect_Warnings                   => True,
      others                            => False);

   --  The following array indicates aspects that specify operational
   --  characteristics, and thus are view-specific. Representation
   --  aspects break privacy, as they are needed during expansion and
   --  code generation.
   --  List is currently incomplete ???

   Operational_Aspect : constant array (Aspect_Id) of Boolean :=
     (Aspect_Constant_Indexing          => True,
      Aspect_Default_Iterator           => True,
      Aspect_Iterator_Element           => True,
      Aspect_Iterable                   => True,
      Aspect_Variable_Indexing          => True,
      Aspect_Aggregate                  => True,
      others                            => False);

   --  The following array indicates aspects for which multiple occurrences of
   --  the same aspect attached to the same declaration are allowed.

   No_Duplicates_Allowed : constant array (Aspect_Id) of Boolean :=
     (Aspect_Annotate      => False,
      Aspect_GNAT_Annotate => False,
      Aspect_Test_Case     => False,
      others               => True);

   --  The following subtype defines aspects corresponding to library unit
   --  pragmas, these can only validly appear as aspects for library units,
   --  and result in a corresponding pragma being inserted immediately after
   --  the occurrence of the aspect.

   subtype Library_Unit_Aspects is
     Aspect_Id range Aspect_All_Calls_Remote .. Aspect_Shared_Passive;

   --  The following subtype defines aspects accepting an optional static
   --  boolean parameter indicating if the aspect should be active or
   --  cancelling. If the parameter is missing the effective value is True,
   --  enabling the aspect. If the parameter is present it must be a static
   --  expression of type Standard.Boolean. If the value is True, then the
   --  aspect is enabled. If it is False, the aspect is disabled.

   subtype Boolean_Aspects is
     Aspect_Id range Aspect_Asynchronous .. Aspect_Id'Last;

   subtype Pre_Post_Aspects is
     Aspect_Id range Aspect_Post .. Aspect_Precondition;

   --  The following type is used for indicating allowed expression forms

   type Aspect_Expression is
     (Expression,             -- Required expression
      Name,                   -- Required name
      Optional_Expression,    -- Optional boolean expression
      Optional_Name);         -- Optional name

   --  The following array indicates what argument type is required

   Aspect_Argument : constant array (Aspect_Id) of Aspect_Expression :=
     (No_Aspect                         => Optional_Expression,
      Aspect_Abstract_State             => Expression,
      Aspect_Address                    => Expression,
      Aspect_Aggregate                  => Expression,
      Aspect_Alignment                  => Expression,
      Aspect_Annotate                   => Expression,
      Aspect_Async_Readers              => Optional_Expression,
      Aspect_Async_Writers              => Optional_Expression,
      Aspect_Attach_Handler             => Expression,
      Aspect_Bit_Order                  => Expression,
      Aspect_Component_Size             => Expression,
      Aspect_Constant_After_Elaboration => Optional_Expression,
      Aspect_Constant_Indexing          => Name,
      Aspect_Contract_Cases             => Expression,
      Aspect_Convention                 => Name,
      Aspect_CPU                        => Expression,
      Aspect_Default_Component_Value    => Expression,
      Aspect_Default_Initial_Condition  => Optional_Expression,
      Aspect_Default_Iterator           => Name,
      Aspect_Default_Storage_Pool       => Expression,
      Aspect_Default_Value              => Expression,
      Aspect_Depends                    => Expression,
      Aspect_Dimension                  => Expression,
      Aspect_Dimension_System           => Expression,
      Aspect_Dispatching_Domain         => Expression,
      Aspect_Dynamic_Predicate          => Expression,
      Aspect_Effective_Reads            => Optional_Expression,
      Aspect_Effective_Writes           => Optional_Expression,
      Aspect_Extensions_Visible         => Optional_Expression,
      Aspect_External_Name              => Expression,
      Aspect_External_Tag               => Expression,
      Aspect_Ghost                      => Optional_Expression,
      Aspect_Global                     => Expression,
      Aspect_GNAT_Annotate              => Expression,
      Aspect_Implicit_Dereference       => Name,
      Aspect_Initial_Condition          => Expression,
      Aspect_Initializes                => Expression,
      Aspect_Input                      => Name,
      Aspect_Integer_Literal            => Name,
      Aspect_Interrupt_Priority         => Expression,
      Aspect_Invariant                  => Expression,
      Aspect_Iterable                   => Expression,
      Aspect_Iterator_Element           => Name,
      Aspect_Link_Name                  => Expression,
      Aspect_Linker_Section             => Expression,
      Aspect_Machine_Radix              => Expression,
      Aspect_Max_Entry_Queue_Depth      => Expression,
      Aspect_Max_Entry_Queue_Length     => Expression,
      Aspect_Max_Queue_Length           => Expression,
      Aspect_No_Caching                 => Optional_Expression,
      Aspect_No_Controlled_Parts        => Optional_Expression,
      Aspect_No_Task_Parts              => Optional_Expression,
      Aspect_Object_Size                => Expression,
      Aspect_Obsolescent                => Optional_Expression,
      Aspect_Output                     => Name,
      Aspect_Part_Of                    => Expression,
      Aspect_Post                       => Expression,
      Aspect_Postcondition              => Expression,
      Aspect_Pre                        => Expression,
      Aspect_Precondition               => Expression,
      Aspect_Predicate                  => Expression,
      Aspect_Predicate_Failure          => Expression,
      Aspect_Priority                   => Expression,
      Aspect_Put_Image                  => Name,
      Aspect_Read                       => Name,
      Aspect_Real_Literal               => Name,
      Aspect_Refined_Depends            => Expression,
      Aspect_Refined_Global             => Expression,
      Aspect_Refined_Post               => Expression,
      Aspect_Refined_State              => Expression,
      Aspect_Relative_Deadline          => Expression,
      Aspect_Relaxed_Initialization     => Optional_Expression,
      Aspect_Scalar_Storage_Order       => Expression,
      Aspect_Secondary_Stack_Size       => Expression,
      Aspect_Simple_Storage_Pool        => Name,
      Aspect_Size                       => Expression,
      Aspect_Small                      => Expression,
      Aspect_SPARK_Mode                 => Optional_Name,
      Aspect_Stable_Properties          => Expression,
      Aspect_Static_Predicate           => Expression,
      Aspect_Storage_Pool               => Name,
      Aspect_Storage_Size               => Expression,
      Aspect_Stream_Size                => Expression,
      Aspect_String_Literal             => Name,
      Aspect_Subprogram_Variant         => Expression,
      Aspect_Suppress                   => Name,
      Aspect_Synchronization            => Name,
      Aspect_Test_Case                  => Expression,
      Aspect_Type_Invariant             => Expression,
      Aspect_Unimplemented              => Optional_Expression,
      Aspect_Unsuppress                 => Name,
      Aspect_Value_Size                 => Expression,
      Aspect_Variable_Indexing          => Name,
      Aspect_Volatile_Function          => Optional_Expression,
      Aspect_Warnings                   => Name,
      Aspect_Write                      => Name,

      Boolean_Aspects                   => Optional_Expression,
      Library_Unit_Aspects              => Optional_Expression);

   --  The following array indicates what aspects are representation aspects

   Is_Representation_Aspect : constant array (Aspect_Id) of Boolean :=
     (No_Aspect                           => False,
      Aspect_Abstract_State               => False,
      Aspect_Address                      => True,
      Aspect_Aggregate                    => False,
      Aspect_Alignment                    => True,
      Aspect_Annotate                     => False,
      Aspect_Async_Readers                => False,
      Aspect_Async_Writers                => False,
      Aspect_Attach_Handler               => False,
      Aspect_Bit_Order                    => True,
      Aspect_Component_Size               => True,
      Aspect_Constant_After_Elaboration   => False,
      Aspect_Constant_Indexing            => False,
      Aspect_Contract_Cases               => False,
      Aspect_Convention                   => True,
      Aspect_CPU                          => False,
      Aspect_CUDA_Global                  => False,
      Aspect_Default_Component_Value      => True,
      Aspect_Default_Initial_Condition    => False,
      Aspect_Default_Iterator             => False,
      Aspect_Default_Storage_Pool         => True,
      Aspect_Default_Value                => True,
      Aspect_Depends                      => False,
      Aspect_Dimension                    => False,
      Aspect_Dimension_System             => False,
      Aspect_Dispatching_Domain           => False,
      Aspect_Dynamic_Predicate            => False,
      Aspect_Effective_Reads              => False,
      Aspect_Effective_Writes             => False,
      Aspect_Exclusive_Functions          => False,
      Aspect_Extensions_Visible           => False,
      Aspect_External_Name                => False,
      Aspect_External_Tag                 => False,
      Aspect_Ghost                        => False,
      Aspect_Global                       => False,
      Aspect_GNAT_Annotate               => False,
      Aspect_Implicit_Dereference         => False,
      Aspect_Initial_Condition            => False,
      Aspect_Initializes                  => False,
      Aspect_Input                        => False,
      Aspect_Integer_Literal              => False,
      Aspect_Interrupt_Priority           => False,
      Aspect_Invariant                    => False,
      Aspect_Iterable                     => False,
      Aspect_Iterator_Element             => False,
      Aspect_Link_Name                    => True,
      Aspect_Linker_Section               => True,
      Aspect_Machine_Radix                => True,
      Aspect_Max_Entry_Queue_Depth        => False,
      Aspect_Max_Entry_Queue_Length       => False,
      Aspect_Max_Queue_Length             => False,
      Aspect_No_Caching                   => False,
      Aspect_No_Controlled_Parts          => False,
      Aspect_No_Task_Parts                => False,
      Aspect_Object_Size                  => True,
      Aspect_Obsolescent                  => False,
      Aspect_Output                       => False,
      Aspect_Part_Of                      => False,
      Aspect_Post                         => False,
      Aspect_Postcondition                => False,
      Aspect_Pre                          => False,
      Aspect_Precondition                 => False,
      Aspect_Predicate                    => False,
      Aspect_Predicate_Failure            => False,
      Aspect_Priority                     => False,
      Aspect_Put_Image                    => False,
      Aspect_Read                         => False,
      Aspect_Real_Literal                 => False,
      Aspect_Refined_Depends              => False,
      Aspect_Refined_Global               => False,
      Aspect_Refined_Post                 => False,
      Aspect_Refined_State                => False,
      Aspect_Relative_Deadline            => False,
      Aspect_Relaxed_Initialization       => False,
      Aspect_Scalar_Storage_Order         => True,
      Aspect_Secondary_Stack_Size         => True,
      Aspect_Simple_Storage_Pool          => True,
      Aspect_Size                         => True,
      Aspect_Small                        => True,
      Aspect_SPARK_Mode                   => False,
      Aspect_Stable_Properties            => False,
      Aspect_Static_Predicate             => False,
      Aspect_Storage_Pool                 => True,
      Aspect_Storage_Size                 => True,
      Aspect_Stream_Size                  => True,
      Aspect_String_Literal               => False,
      Aspect_Subprogram_Variant           => False,
      Aspect_Suppress                     => False,
      Aspect_Synchronization              => False,
      Aspect_Test_Case                    => False,
      Aspect_Type_Invariant               => False,
      Aspect_Unimplemented                => False,
      Aspect_Unsuppress                   => False,
      Aspect_Value_Size                   => True,
      Aspect_Variable_Indexing            => False,
      Aspect_Volatile_Function            => False,
      Aspect_Warnings                     => False,
      Aspect_Write                        => False,

      Library_Unit_Aspects                => False,

      Aspect_Asynchronous                 => True,
      Aspect_Atomic                       => True,
      Aspect_Atomic_Components            => True,
      Aspect_Disable_Controlled           => False,
      Aspect_Discard_Names                => True,
      Aspect_Export                       => True,
      Aspect_Favor_Top_Level              => False,
      Aspect_Full_Access_Only             => True,
      Aspect_Independent                  => True,
      Aspect_Independent_Components       => True,
      Aspect_Import                       => True,
      Aspect_Inline                       => False,
      Aspect_Inline_Always                => False,
      Aspect_Interrupt_Handler            => False,
      Aspect_Lock_Free                    => False,
      Aspect_No_Inline                    => False,
      Aspect_No_Return                    => False,
      Aspect_No_Tagged_Streams            => False,
      Aspect_Pack                         => True,
      Aspect_Persistent_BSS               => True,
      Aspect_Preelaborable_Initialization => False,
      Aspect_Pure_Function                => False,
      Aspect_Remote_Access_Type           => False,
      Aspect_Shared                       => True,
      Aspect_Simple_Storage_Pool_Type     => True,
      Aspect_Static                       => False,
      Aspect_Suppress_Debug_Info          => False,
      Aspect_Suppress_Initialization      => False,
      Aspect_Thread_Local_Storage         => True,
      Aspect_Unchecked_Union              => True,
      Aspect_Universal_Aliasing           => False,
      Aspect_Unmodified                   => False,
      Aspect_Unreferenced                 => False,
      Aspect_Unreferenced_Objects         => False,
      Aspect_Volatile                     => True,
      Aspect_Volatile_Components          => True,
      Aspect_Volatile_Full_Access         => True,
      Aspect_Yield                        => False);

   -----------------------------------------
   -- Table Linking Names and Aspect_Id's --
   -----------------------------------------

   --  Table linking aspect names and id's

   Aspect_Names : constant array (Aspect_Id) of Name_Id :=
     (No_Aspect                           => No_Name,
      Aspect_Abstract_State               => Name_Abstract_State,
      Aspect_Address                      => Name_Address,
      Aspect_Aggregate                    => Name_Aggregate,
      Aspect_Alignment                    => Name_Alignment,
      Aspect_All_Calls_Remote             => Name_All_Calls_Remote,
      Aspect_Annotate                     => Name_Annotate,
      Aspect_Async_Readers                => Name_Async_Readers,
      Aspect_Async_Writers                => Name_Async_Writers,
      Aspect_Asynchronous                 => Name_Asynchronous,
      Aspect_Atomic                       => Name_Atomic,
      Aspect_Atomic_Components            => Name_Atomic_Components,
      Aspect_Attach_Handler               => Name_Attach_Handler,
      Aspect_Bit_Order                    => Name_Bit_Order,
      Aspect_Component_Size               => Name_Component_Size,
      Aspect_Constant_After_Elaboration   => Name_Constant_After_Elaboration,
      Aspect_Constant_Indexing            => Name_Constant_Indexing,
      Aspect_Contract_Cases               => Name_Contract_Cases,
      Aspect_Convention                   => Name_Convention,
      Aspect_CPU                          => Name_CPU,
      Aspect_CUDA_Global                  => Name_CUDA_Global,
      Aspect_Default_Component_Value      => Name_Default_Component_Value,
      Aspect_Default_Initial_Condition    => Name_Default_Initial_Condition,
      Aspect_Default_Iterator             => Name_Default_Iterator,
      Aspect_Default_Storage_Pool         => Name_Default_Storage_Pool,
      Aspect_Default_Value                => Name_Default_Value,
      Aspect_Depends                      => Name_Depends,
      Aspect_Dimension                    => Name_Dimension,
      Aspect_Dimension_System             => Name_Dimension_System,
      Aspect_Disable_Controlled           => Name_Disable_Controlled,
      Aspect_Discard_Names                => Name_Discard_Names,
      Aspect_Dispatching_Domain           => Name_Dispatching_Domain,
      Aspect_Dynamic_Predicate            => Name_Dynamic_Predicate,
      Aspect_Effective_Reads              => Name_Effective_Reads,
      Aspect_Effective_Writes             => Name_Effective_Writes,
      Aspect_Elaborate_Body               => Name_Elaborate_Body,
      Aspect_Exclusive_Functions          => Name_Exclusive_Functions,
      Aspect_Export                       => Name_Export,
      Aspect_Extensions_Visible           => Name_Extensions_Visible,
      Aspect_External_Name                => Name_External_Name,
      Aspect_External_Tag                 => Name_External_Tag,
      Aspect_Favor_Top_Level              => Name_Favor_Top_Level,
      Aspect_Full_Access_Only             => Name_Full_Access_Only,
      Aspect_Ghost                        => Name_Ghost,
      Aspect_Global                       => Name_Global,
      Aspect_GNAT_Annotate                => Name_GNAT_Annotate,
      Aspect_Implicit_Dereference         => Name_Implicit_Dereference,
      Aspect_Import                       => Name_Import,
      Aspect_Independent                  => Name_Independent,
      Aspect_Independent_Components       => Name_Independent_Components,
      Aspect_Inline                       => Name_Inline,
      Aspect_Inline_Always                => Name_Inline_Always,
      Aspect_Initial_Condition            => Name_Initial_Condition,
      Aspect_Initializes                  => Name_Initializes,
      Aspect_Input                        => Name_Input,
      Aspect_Integer_Literal              => Name_Integer_Literal,
      Aspect_Interrupt_Handler            => Name_Interrupt_Handler,
      Aspect_Interrupt_Priority           => Name_Interrupt_Priority,
      Aspect_Invariant                    => Name_Invariant,
      Aspect_Iterator_Element             => Name_Iterator_Element,
      Aspect_Iterable                     => Name_Iterable,
      Aspect_Link_Name                    => Name_Link_Name,
      Aspect_Linker_Section               => Name_Linker_Section,
      Aspect_Lock_Free                    => Name_Lock_Free,
      Aspect_Machine_Radix                => Name_Machine_Radix,
      Aspect_Max_Entry_Queue_Depth        => Name_Max_Entry_Queue_Depth,
      Aspect_Max_Entry_Queue_Length       => Name_Max_Entry_Queue_Length,
      Aspect_Max_Queue_Length             => Name_Max_Queue_Length,
      Aspect_No_Caching                   => Name_No_Caching,
      Aspect_No_Controlled_Parts          => Name_No_Controlled_Parts,
      Aspect_No_Task_Parts                => Name_No_Task_Parts,
      Aspect_No_Elaboration_Code_All      => Name_No_Elaboration_Code_All,
      Aspect_No_Inline                    => Name_No_Inline,
      Aspect_No_Return                    => Name_No_Return,
      Aspect_No_Tagged_Streams            => Name_No_Tagged_Streams,
      Aspect_Object_Size                  => Name_Object_Size,
      Aspect_Obsolescent                  => Name_Obsolescent,
      Aspect_Output                       => Name_Output,
      Aspect_Pack                         => Name_Pack,
      Aspect_Part_Of                      => Name_Part_Of,
      Aspect_Persistent_BSS               => Name_Persistent_BSS,
      Aspect_Post                         => Name_Post,
      Aspect_Postcondition                => Name_Postcondition,
      Aspect_Pre                          => Name_Pre,
      Aspect_Precondition                 => Name_Precondition,
      Aspect_Predicate                    => Name_Predicate,
      Aspect_Predicate_Failure            => Name_Predicate_Failure,
      Aspect_Preelaborable_Initialization => Name_Preelaborable_Initialization,
      Aspect_Preelaborate                 => Name_Preelaborate,
      Aspect_Priority                     => Name_Priority,
      Aspect_Pure                         => Name_Pure,
      Aspect_Pure_Function                => Name_Pure_Function,
      Aspect_Put_Image                    => Name_Put_Image,
      Aspect_Read                         => Name_Read,
      Aspect_Real_Literal                 => Name_Real_Literal,
      Aspect_Refined_Depends              => Name_Refined_Depends,
      Aspect_Refined_Global               => Name_Refined_Global,
      Aspect_Refined_Post                 => Name_Refined_Post,
      Aspect_Refined_State                => Name_Refined_State,
      Aspect_Relative_Deadline            => Name_Relative_Deadline,
      Aspect_Relaxed_Initialization       => Name_Relaxed_Initialization,
      Aspect_Remote_Access_Type           => Name_Remote_Access_Type,
      Aspect_Remote_Call_Interface        => Name_Remote_Call_Interface,
      Aspect_Remote_Types                 => Name_Remote_Types,
      Aspect_Scalar_Storage_Order         => Name_Scalar_Storage_Order,
      Aspect_Secondary_Stack_Size         => Name_Secondary_Stack_Size,
      Aspect_Shared                       => Name_Shared,
      Aspect_Shared_Passive               => Name_Shared_Passive,
      Aspect_Simple_Storage_Pool          => Name_Simple_Storage_Pool,
      Aspect_Simple_Storage_Pool_Type     => Name_Simple_Storage_Pool_Type,
      Aspect_Size                         => Name_Size,
      Aspect_Small                        => Name_Small,
      Aspect_SPARK_Mode                   => Name_SPARK_Mode,
      Aspect_Stable_Properties            => Name_Stable_Properties,
      Aspect_Static                       => Name_Static,
      Aspect_Static_Predicate             => Name_Static_Predicate,
      Aspect_Storage_Pool                 => Name_Storage_Pool,
      Aspect_Storage_Size                 => Name_Storage_Size,
      Aspect_Stream_Size                  => Name_Stream_Size,
      Aspect_String_Literal               => Name_String_Literal,
      Aspect_Subprogram_Variant           => Name_Subprogram_Variant,
      Aspect_Suppress                     => Name_Suppress,
      Aspect_Suppress_Debug_Info          => Name_Suppress_Debug_Info,
      Aspect_Suppress_Initialization      => Name_Suppress_Initialization,
      Aspect_Thread_Local_Storage         => Name_Thread_Local_Storage,
      Aspect_Synchronization              => Name_Synchronization,
      Aspect_Test_Case                    => Name_Test_Case,
      Aspect_Type_Invariant               => Name_Type_Invariant,
      Aspect_Unchecked_Union              => Name_Unchecked_Union,
      Aspect_Unimplemented                => Name_Unimplemented,
      Aspect_Universal_Aliasing           => Name_Universal_Aliasing,
      Aspect_Unmodified                   => Name_Unmodified,
      Aspect_Unreferenced                 => Name_Unreferenced,
      Aspect_Unreferenced_Objects         => Name_Unreferenced_Objects,
      Aspect_Unsuppress                   => Name_Unsuppress,
      Aspect_Value_Size                   => Name_Value_Size,
      Aspect_Variable_Indexing            => Name_Variable_Indexing,
      Aspect_Volatile                     => Name_Volatile,
      Aspect_Volatile_Components          => Name_Volatile_Components,
      Aspect_Volatile_Full_Access         => Name_Volatile_Full_Access,
      Aspect_Volatile_Function            => Name_Volatile_Function,
      Aspect_Warnings                     => Name_Warnings,
      Aspect_Write                        => Name_Write,
      Aspect_Yield                        => Name_Yield);

   function Get_Aspect_Id (Name : Name_Id) return Aspect_Id;
   pragma Inline (Get_Aspect_Id);
   --  Given a name Nam, returns the corresponding aspect id value. If the name
   --  does not match any aspect, then No_Aspect is returned as the result.

   function Get_Aspect_Id (Aspect : Node_Id) return Aspect_Id;
   pragma Inline (Get_Aspect_Id);
   --  Given an aspect specification, return the corresponding aspect_id value.
   --  If the name does not match any aspect, return No_Aspect.

   ------------------------------------
   -- Delaying Evaluation of Aspects --
   ------------------------------------

   --  The RM requires that all language defined aspects taking an expression
   --  delay evaluation of the expression till the freeze point of the entity
   --  to which the aspect applies. This allows forward references, and is of
   --  use for example in connection with preconditions and postconditions
   --  where the requirement of making all references in contracts to local
   --  functions be backwards references would be onerous.

   --  For consistency, even attributes like Size are delayed, so we can do:

   --    type A is range 1 .. 10
   --      with Size => Not_Defined_Yet;
   --    ..
   --    Not_Defined_Yet : constant := 64;

   --  Resulting in A having a size of 64, which gets set when A is frozen.
   --  Furthermore, we can have a situation like

   --    type A is range 1 .. 10
   --      with Size => Not_Defined_Yet;
   --    ..
   --    type B is new A;
   --    ..
   --    Not_Defined_Yet : constant := 64;

   --  where the Size of A is considered to have been previously specified at
   --  the point of derivation, even though the actual value of the size is
   --  not known yet, and in this example B inherits the size value of 64.

   --  Our normal implementation model (prior to Ada 2012) was simply to copy
   --  inheritable attributes at the point of derivation. Then any subsequent
   --  representation items apply either to the parent type, not affecting the
   --  derived type, or to the derived type, not affecting the parent type.

   --  To deal with the delayed aspect case, we use two flags. The first is
   --  set on the parent type if it has delayed representation aspects. This
   --  flag Has_Delayed_Rep_Aspects indicates that if we derive from this type
   --  we have to worry about making sure we inherit any delayed aspects. The
   --  second flag is set on a derived type: May_Have_Inherited_Rep_Aspects
   --  is set if the parent type has Has_Delayed_Rep_Aspects set.

   --  When we freeze a derived type, if the May_Have_Inherited_Rep_Aspects
   --  flag is set, then we call Freeze.Inherit_Delayed_Rep_Aspects when
   --  the derived type is frozen, which deals with the necessary copying of
   --  information from the parent type, which must be frozen at that point
   --  (since freezing the derived type first freezes the parent type).

   --  SPARK 2014 aspects do not follow the general delay mechanism as they
   --  act as annotations and cannot modify the attributes of their related
   --  constructs. To handle forward references in such aspects, the compiler
   --  delays the analysis of their respective pragmas by collecting them in
   --  N_Contract nodes. The pragmas are then analyzed at the end of the
   --  declarative region containing the related construct. For details,
   --  see routines Analyze_xxx_In_Decl_Part.

   --  The following shows which aspects are delayed. There are three cases:

   type Delay_Type is
     (Always_Delay,
      --  This aspect is not a representation aspect that can be inherited and
      --  is always delayed, as required by the language definition.

      Never_Delay,
      --  There are two cases. There are language defined aspects like
      --  Convention where the "expression" is simply an uninterpreted
      --  identifier, and there is no issue of evaluating it and thus no
      --  issue of delaying the evaluation. The second case is implementation
      --  defined aspects where we have decided that we don't want to allow
      --  delays (and for our own aspects we can do what we like).

      Rep_Aspect);
      --  These are the cases of representation aspects that are in general
      --  delayed, and where there is a potential issue of derived types that
      --  inherit delayed representation values.

   --  Note: even if this table indicates that an aspect is delayed, we never
   --  delay Boolean aspects that have a missing expression (taken as True),
   --  or expressions for delayed rep items that consist of an integer literal
   --  (most cases of Size etc. in practice), since in these cases we know we
   --  can get the value of the expression without delay. Note that we still
   --  need to delay Boolean aspects that are specifically set to True:

   --     type R is array (0 .. 31) of Boolean
   --       with Pack => True;
   --     True : constant Boolean := False;

   --  This is nonsense, but we need to make it work and result in R not
   --  being packed, and if we have something like:

   --     type R is array (0 .. 31) of Boolean
   --       with Pack => True;
   --     RR : R;
   --     True : constant Boolean := False;

   --  This is illegal because the visibility of True changes after the freeze
   --  point, which is not allowed, and we need the delay mechanism to properly
   --  diagnose this error.

   Aspect_Delay : constant array (Aspect_Id) of Delay_Type :=
     (No_Aspect                           => Always_Delay,
      Aspect_Address                      => Always_Delay,
      Aspect_Aggregate                    => Always_Delay,
      Aspect_All_Calls_Remote             => Always_Delay,
      Aspect_Asynchronous                 => Always_Delay,
      Aspect_Attach_Handler               => Always_Delay,
      Aspect_Constant_Indexing            => Always_Delay,
      Aspect_CPU                          => Always_Delay,
      Aspect_CUDA_Global                  => Always_Delay,
      Aspect_Default_Iterator             => Always_Delay,
      Aspect_Default_Storage_Pool         => Always_Delay,
      Aspect_Default_Value                => Always_Delay,
      Aspect_Default_Component_Value      => Always_Delay,
      Aspect_Discard_Names                => Always_Delay,
      Aspect_Dispatching_Domain           => Always_Delay,
      Aspect_Dynamic_Predicate            => Always_Delay,
      Aspect_Elaborate_Body               => Always_Delay,
      Aspect_Exclusive_Functions          => Always_Delay,
      Aspect_External_Name                => Always_Delay,
      Aspect_External_Tag                 => Always_Delay,
      Aspect_Favor_Top_Level              => Always_Delay,
      Aspect_Implicit_Dereference         => Always_Delay,
      Aspect_Independent                  => Always_Delay,
      Aspect_Independent_Components       => Always_Delay,
      Aspect_Inline                       => Always_Delay,
      Aspect_Inline_Always                => Always_Delay,
      Aspect_Input                        => Always_Delay,
      Aspect_Integer_Literal              => Always_Delay,
      Aspect_Interrupt_Handler            => Always_Delay,
      Aspect_Interrupt_Priority           => Always_Delay,
      Aspect_Invariant                    => Always_Delay,
      Aspect_Iterable                     => Always_Delay,
      Aspect_Iterator_Element             => Always_Delay,
      Aspect_Link_Name                    => Always_Delay,
      Aspect_Linker_Section               => Always_Delay,
      Aspect_Lock_Free                    => Always_Delay,
      Aspect_No_Inline                    => Always_Delay,
      Aspect_No_Return                    => Always_Delay,
      Aspect_Output                       => Always_Delay,
      Aspect_Persistent_BSS               => Always_Delay,
      Aspect_Post                         => Always_Delay,
      Aspect_Postcondition                => Always_Delay,
      Aspect_Pre                          => Always_Delay,
      Aspect_Precondition                 => Always_Delay,
      Aspect_Predicate                    => Always_Delay,
      Aspect_Predicate_Failure            => Always_Delay,
      Aspect_Preelaborable_Initialization => Always_Delay,
      Aspect_Preelaborate                 => Always_Delay,
      Aspect_Priority                     => Always_Delay,
      Aspect_Pure                         => Always_Delay,
      Aspect_Pure_Function                => Always_Delay,
      Aspect_Put_Image                    => Always_Delay,
      Aspect_Read                         => Always_Delay,
      Aspect_Real_Literal                 => Always_Delay,
      Aspect_Relative_Deadline            => Always_Delay,
      Aspect_Remote_Access_Type           => Always_Delay,
      Aspect_Remote_Call_Interface        => Always_Delay,
      Aspect_Remote_Types                 => Always_Delay,
      Aspect_Secondary_Stack_Size         => Always_Delay,
      Aspect_Shared                       => Always_Delay,
      Aspect_Shared_Passive               => Always_Delay,
      Aspect_Simple_Storage_Pool          => Always_Delay,
      Aspect_Simple_Storage_Pool_Type     => Always_Delay,
      Aspect_Static_Predicate             => Always_Delay,
      Aspect_Storage_Pool                 => Always_Delay,
      Aspect_Stream_Size                  => Always_Delay,
      Aspect_String_Literal               => Always_Delay,
      Aspect_Suppress                     => Always_Delay,
      Aspect_Suppress_Debug_Info          => Always_Delay,
      Aspect_Suppress_Initialization      => Always_Delay,
      Aspect_Thread_Local_Storage         => Always_Delay,
      Aspect_Type_Invariant               => Always_Delay,
      Aspect_Unchecked_Union              => Always_Delay,
      Aspect_Universal_Aliasing           => Always_Delay,
      Aspect_Unmodified                   => Always_Delay,
      Aspect_Unreferenced                 => Always_Delay,
      Aspect_Unreferenced_Objects         => Always_Delay,
      Aspect_Unsuppress                   => Always_Delay,
      Aspect_Variable_Indexing            => Always_Delay,
      Aspect_Write                        => Always_Delay,

      Aspect_Abstract_State               => Never_Delay,
      Aspect_Annotate                     => Never_Delay,
      Aspect_Async_Readers                => Never_Delay,
      Aspect_Async_Writers                => Never_Delay,
      Aspect_Constant_After_Elaboration   => Never_Delay,
      Aspect_Contract_Cases               => Never_Delay,
      Aspect_Convention                   => Never_Delay,
      Aspect_Default_Initial_Condition    => Never_Delay,
      Aspect_Depends                      => Never_Delay,
      Aspect_Dimension                    => Never_Delay,
      Aspect_Dimension_System             => Never_Delay,
      Aspect_Disable_Controlled           => Never_Delay,
      Aspect_Effective_Reads              => Never_Delay,
      Aspect_Effective_Writes             => Never_Delay,
      Aspect_Export                       => Never_Delay,
      Aspect_Extensions_Visible           => Never_Delay,
      Aspect_Ghost                        => Never_Delay,
      Aspect_Global                       => Never_Delay,
      Aspect_GNAT_Annotate                => Never_Delay,
      Aspect_Import                       => Never_Delay,
      Aspect_Initial_Condition            => Never_Delay,
      Aspect_Initializes                  => Never_Delay,
      Aspect_Max_Entry_Queue_Depth        => Never_Delay,
      Aspect_Max_Entry_Queue_Length       => Never_Delay,
      Aspect_Max_Queue_Length             => Never_Delay,
      Aspect_No_Caching                   => Never_Delay,
      Aspect_No_Controlled_Parts          => Never_Delay,
      Aspect_No_Task_Parts                => Never_Delay,
      Aspect_No_Elaboration_Code_All      => Never_Delay,
      Aspect_No_Tagged_Streams            => Never_Delay,
      Aspect_Obsolescent                  => Never_Delay,
      Aspect_Part_Of                      => Never_Delay,
      Aspect_Refined_Depends              => Never_Delay,
      Aspect_Refined_Global               => Never_Delay,
      Aspect_Refined_Post                 => Never_Delay,
      Aspect_Refined_State                => Never_Delay,
      Aspect_Relaxed_Initialization       => Never_Delay,
      Aspect_SPARK_Mode                   => Never_Delay,
      Aspect_Stable_Properties            => Always_Delay,
      Aspect_Static                       => Never_Delay,
      Aspect_Subprogram_Variant           => Never_Delay,
      Aspect_Synchronization              => Never_Delay,
      Aspect_Test_Case                    => Never_Delay,
      Aspect_Unimplemented                => Never_Delay,
      Aspect_Volatile_Function            => Never_Delay,
      Aspect_Warnings                     => Never_Delay,
      Aspect_Yield                        => Never_Delay,

      Aspect_Alignment                    => Rep_Aspect,
      Aspect_Atomic                       => Rep_Aspect,
      Aspect_Atomic_Components            => Rep_Aspect,
      Aspect_Bit_Order                    => Rep_Aspect,
      Aspect_Component_Size               => Rep_Aspect,
      Aspect_Full_Access_Only             => Rep_Aspect,
      Aspect_Machine_Radix                => Rep_Aspect,
      Aspect_Object_Size                  => Rep_Aspect,
      Aspect_Pack                         => Rep_Aspect,
      Aspect_Scalar_Storage_Order         => Rep_Aspect,
      Aspect_Size                         => Rep_Aspect,
      Aspect_Small                        => Rep_Aspect,
      Aspect_Storage_Size                 => Rep_Aspect,
      Aspect_Value_Size                   => Rep_Aspect,
      Aspect_Volatile                     => Rep_Aspect,
      Aspect_Volatile_Components          => Rep_Aspect,
      Aspect_Volatile_Full_Access         => Rep_Aspect);

   ------------------------------------------------
   -- Handling of Aspect Specifications on Stubs --
   ------------------------------------------------

   --  Aspects that appear on the following stub nodes

   --    N_Package_Body_Stub
   --    N_Protected_Body_Stub
   --    N_Subprogram_Body_Stub
   --    N_Task_Body_Stub

   --  are treated as if they apply to the corresponding proper body. Their
   --  analysis is postponed until the analysis of the proper body takes place
   --  (see Analyze_Proper_Body). The delay is required because the analysis
   --  may generate extra code which would be harder to relocate to the body.
   --  If the proper body is present, the aspect specifications are relocated
   --  to the corresponding body node:

   --    N_Package_Body
   --    N_Protected_Body
   --    N_Subprogram_Body
   --    N_Task_Body

   --  The subsequent analysis takes care of the aspect-to-pragma conversions
   --  and verification of pragma legality. In the case where the proper body
   --  is not available, the aspect specifications are analyzed on the spot
   --  (see Analyze_Proper_Body) to catch potential errors.

   --  The following table lists all aspects that can apply to a subprogram
   --  body [stub]. For instance, the following example is legal:

   --    package P with SPARK_Mode ...;
   --    package body P with SPARK_Mode is ...;

   --  The table should be synchronized with Pragma_On_Body_Or_Stub_OK in unit
   --  Sem_Prag.

   Aspect_On_Body_Or_Stub_OK : constant array (Aspect_Id) of Boolean :=
     (Aspect_Refined_Depends              => True,
      Aspect_Refined_Global               => True,
      Aspect_Refined_Post                 => True,
      Aspect_SPARK_Mode                   => True,
      Aspect_Warnings                     => True,
      others                              => False);

   -------------------------------------------------------------------
   -- Handling of Aspects Specifications on Single Concurrent Types --
   -------------------------------------------------------------------

   --  Certain aspects that appear on the following nodes

   --    N_Single_Protected_Declaration
   --    N_Single_Task_Declaration

   --  are treated as if they apply to the anonymous object produced by the
   --  analysis of a single concurrent type. The following table lists all
   --  aspects that should apply to the anonymous object. The table should
   --  be synchronized with Pragma_On_Anonymous_Object_OK in unit Sem_Prag.

   Aspect_On_Anonymous_Object_OK : constant array (Aspect_Id) of Boolean :=
     (Aspect_Depends                      => True,
      Aspect_Global                       => True,
      Aspect_Part_Of                      => True,
      others                              => False);

   ---------------------------------------------------
   -- Handling of Aspect Specifications in the Tree --
   ---------------------------------------------------

   --  Several kinds of declaration node permit aspect specifications in Ada
   --  2012 mode. If there was room in all the corresponding declaration nodes,
   --  we could just have a field Aspect_Specifications pointing to a list of
   --  nodes for the aspects (N_Aspect_Specification nodes). But there isn't
   --  room, so we adopt a different approach.

   --  The following subprograms provide access to a specialized interface
   --  implemented internally with a hash table in the body, that provides
   --  access to aspect specifications.

   function Aspect_Specifications (N : Node_Id) return List_Id;
   --  Given a node N, returns the list of N_Aspect_Specification nodes that
   --  are attached to this declaration node. If the node is in the class of
   --  declaration nodes that permit aspect specifications, as defined by the
   --  predicate above, and if their Has_Aspects flag is set to True, then this
   --  will always be a non-empty list. If this flag is set to False, then
   --  No_List is returned. Normally, the only nodes that have Has_Aspects set
   --  True are the nodes for which Permits_Aspect_Specifications would return
   --  True (i.e. the declaration nodes defined in the RM as permitting the
   --  presence of Aspect_Specifications). However, it is possible for the
   --  flag Has_Aspects to be set on other nodes as a result of Rewrite and
   --  Replace calls, and this function may be used to retrieve the aspect
   --  specifications for the original rewritten node in such cases.

   function Aspects_On_Body_Or_Stub_OK (N : Node_Id) return Boolean;
   --  N denotes a body [stub] with aspects. Determine whether all aspects of N
   --  are allowed to appear on a body [stub].

   procedure Exchange_Aspects (N1 : Node_Id; N2 : Node_Id);
   --  Exchange the aspect specifications of two nodes. If either node lacks an
   --  aspect specification list, the routine has no effect. It is assumed that
   --  both nodes can support aspects.

   function Find_Aspect (Id            : Entity_Id;
                         A             : Aspect_Id;
                         Class_Present : Boolean := False) return Node_Id;
   --  Find the aspect specification of aspect A (or A'Class if Class_Present)
   --  associated with entity I.
   --  Return Empty if Id does not have the requested aspect.

   function Find_Value_Of_Aspect
     (Id            : Entity_Id;
      A             : Aspect_Id;
      Class_Present : Boolean := False) return Node_Id;
   --  Find the value of aspect A (or A'Class, if Class_Present) associated
   --  with entity Id. Return Empty if Id does not have the requested aspect.

   function Has_Aspect (Id            : Entity_Id;
                        A             : Aspect_Id;
                        Class_Present : Boolean := False) return Boolean;
   --  Determine whether entity Id has aspect A (or A'Class, if Class_Present)

   procedure Move_Aspects (From : Node_Id; To : Node_Id);
   --  Relocate the aspect specifications of node From to node To. On entry it
   --  is assumed that To does not have aspect specifications. If From has no
   --  aspects, the routine has no effect.

   procedure Move_Or_Merge_Aspects (From : Node_Id; To : Node_Id);
   --  Relocate the aspect specifications of node From to node To. If To has
   --  aspects, the aspects of From are appended to the aspects of To. If From
   --  has no aspects, the routine has no effect. Special behavior:
   --    * When node From denotes a subprogram body stub without a previous
   --      declaration, the only aspects relocated to node To are those found
   --      in table Aspect_On_Body_Or_Stub_OK.
   --    * When node From denotes a single synchronized type declaration, the
   --      only aspects relocated to node To are those found in table
   --      Aspect_On_Anonymous_Object_OK.

   function Permits_Aspect_Specifications (N : Node_Id) return Boolean;
   --  Returns True if the node N is a declaration node that permits aspect
   --  specifications in the grammar. It is possible for other nodes to have
   --  aspect specifications as a result of Rewrite or Replace calls.

   procedure Remove_Aspects (N : Node_Id);
   --  Delete the aspect specifications associated with node N. If the node has
   --  no aspects, the routine has no effect.

   function Same_Aspect (A1 : Aspect_Id; A2 : Aspect_Id) return Boolean;
   --  Returns True if A1 and A2 are (essentially) the same aspect. This is not
   --  a simple equality test because e.g. Post and Postcondition are the same.
   --  This is used for detecting duplicate aspects.

   procedure Set_Aspect_Specifications (N : Node_Id; L : List_Id);
   --  The node N must be in the class of declaration nodes that permit aspect
   --  specifications and the Has_Aspects flag must be False on entry. L must
   --  be a non-empty list of N_Aspect_Specification nodes. This procedure sets
   --  the Has_Aspects flag to True, and makes an entry that can be retrieved
   --  by a subsequent Aspect_Specifications call. It is an error to call this
   --  procedure with a node that does not permit aspect specifications, or a
   --  node that has its Has_Aspects flag set True on entry, or with L being an
   --  empty list or No_List.

end Aspects;
