aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2020-01-31 12:28:21 -0500
committerPierre-Marie de Rodat <derodat@adacore.com>2020-06-05 08:17:43 -0400
commit2107ca0242fdbe6f21c9c33c0fd1b812ae944404 (patch)
treec490b3dbe5e3f26026e717fbbd1685f266a1eb84
parenta8aecf319aaa77429584ac8c18f556c2577616b9 (diff)
downloadgcc-2107ca0242fdbe6f21c9c33c0fd1b812ae944404.zip
gcc-2107ca0242fdbe6f21c9c33c0fd1b812ae944404.tar.gz
gcc-2107ca0242fdbe6f21c9c33c0fd1b812ae944404.tar.bz2
[Ada] Spurious error on address clause in task body
2020-06-05 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch9.adb, (Analyze_Task_Body): After analying the task body, indicate that all local variables have no delayed aspects. This prevents improper later calls to Check_Aspect_At_End_Of_Declarations, that would happen when the constructed task_procedure body (generated during expansion) is analyzed. The legality of aspect specifications that may appear on local declarations has already been established, and it is in general not possible to recheck them properly during expansion, when visibility may not be fully established.
-rw-r--r--gcc/ada/sem_ch9.adb18
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/ada/sem_ch9.adb b/gcc/ada/sem_ch9.adb
index df438ac..05a6d9a 100644
--- a/gcc/ada/sem_ch9.adb
+++ b/gcc/ada/sem_ch9.adb
@@ -2993,6 +2993,24 @@ package body Sem_Ch9 is
else
Set_First_Private_Entity (Spec_Id, First_Entity (Spec_Id));
end if;
+
+ -- The entity list of the current scope now includes entities in
+ -- the spec as well as the body. Their declarations will become
+ -- part of the statement sequence of the task body procedure that
+ -- is built during expansion. Indicate that aspect specifications
+ -- for these entities need not be rechecked. The guards on
+ -- Check_Aspect_At_End_Of_Declarations are not sufficient to
+ -- suppress these checks, because the declarations come from source.
+
+ declare
+ Priv : Entity_Id := First_Private_Entity (Spec_Id);
+
+ begin
+ while Present (Priv) loop
+ Set_Has_Delayed_Aspects (Priv, False);
+ Next_Entity (Priv);
+ end loop;
+ end;
end if;
-- Mark all handlers as not suitable for local raise optimization,