]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Extend Find_Related_Context to deal with child instances
authorPiotr Trojanek <trojanek@adacore.com>
Sat, 12 Dec 2020 22:59:34 +0000 (23:59 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Thu, 29 Apr 2021 08:00:45 +0000 (04:00 -0400)
gcc/ada/

* sem_elab.adb (Process_SPARK_Instantiation): Fix typo in
comment.
* sem_prag.adb (Find_Related_Context): Add missing reference to
No_Caching in the comment; handle pragmas on compilation units.

gcc/ada/sem_elab.adb
gcc/ada/sem_prag.adb

index 89b6e13e1ff0061992175652eed2dc685dd5d6e7..5bc116ae0ebdb5736ea1045401cf5d67cc048b73 100644 (file)
@@ -15121,7 +15121,7 @@ package body Sem_Elab is
          Inst_Rep : Scenario_Rep_Id;
          In_State : Processing_In_State);
       pragma Inline (Process_SPARK_Instantiation);
-      --  Verify that instanciation Inst does not precede the generic body it
+      --  Verify that instantiation Inst does not precede the generic body it
       --  instantiates (SPARK RM 7.7(6)). Inst_Rep is the representation of the
       --  instantiation. In_State is the current state of the Processing phase.
 
index 1b1e01b4da058160ba9e6383ca6974d2042ddf34..a1d645ee853997be2c70cfdc9a1bae5bf08be5d8 100644 (file)
@@ -243,6 +243,7 @@ package body Sem_Prag is
    --    Constant_After_Elaboration
    --    Effective_Reads
    --    Effective_Writers
+   --    No_Caching
    --    Part_Of
    --  Find the first source declaration or statement found while traversing
    --  the previous node chain starting from pragma Prag. If flag Do_Checks is
@@ -30474,6 +30475,16 @@ package body Sem_Prag is
       Stmt : Node_Id;
 
    begin
+      --  If the pragma comes from an aspect on a compilation unit that is a
+      --  package instance, then return the original package instantiation
+      --  node.
+
+      if Nkind (Parent (Prag)) = N_Compilation_Unit_Aux then
+         return
+           Get_Unit_Instantiation_Node
+             (Defining_Entity (Unit (Enclosing_Comp_Unit_Node (Prag))));
+      end if;
+
       Stmt := Prev (Prag);
       while Present (Stmt) loop