aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2022-09-14 21:59:05 +0200
committerMarc Poulhiès <poulhies@adacore.com>2022-09-26 11:02:31 +0200
commita490e7da3ad435d72916564e166f966eabe7328f (patch)
tree559034c26846d37f728a42e67f38e627bbfaf519 /gcc
parent756efb7484f4bbdc74dd9c285fff5c5d4a0730ff (diff)
downloadgcc-a490e7da3ad435d72916564e166f966eabe7328f.zip
gcc-a490e7da3ad435d72916564e166f966eabe7328f.tar.gz
gcc-a490e7da3ad435d72916564e166f966eabe7328f.tar.bz2
ada: Fix location of pragmas coming from aspects in top-level instances
This patch fixes an AST anomaly where pragmas that correspond to aspects of a generic package declaration appeared as the auxiliary declarations of the compilation unit for the instantiated package body. In particular, this anomaly happened for aspect Annotate and affected GNATprove, which didn't pick pragma corresponding to this aspect. gcc/ada/ * sem_ch12.adb (Build_Instance_Compilation_Unit_Nodes): Relocate auxiliary declarations from the original compilation unit to the newly created compilation unit for the spec.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_ch12.adb7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 9525140..ab2e182 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -6296,13 +6296,16 @@ package body Sem_Ch12 is
Old_Main : constant Entity_Id := Cunit_Entity (Main_Unit);
begin
- -- A new compilation unit node is built for the instance declaration
+ -- A new compilation unit node is built for the instance declaration.
+ -- It relocates the auxiliary declaration node from the compilation unit
+ -- where the instance appeared, so that declarations that originally
+ -- followed the instance will be attached to the spec compilation unit.
Decl_Cunit :=
Make_Compilation_Unit (Sloc (N),
Context_Items => Empty_List,
Unit => Act_Decl,
- Aux_Decls_Node => Make_Compilation_Unit_Aux (Sloc (N)));
+ Aux_Decls_Node => Relocate_Node (Aux_Decls_Node (Parent (N))));
Set_Parent_Spec (Act_Decl, Parent_Spec (N));