From 2e885093958b6f2d8383c929cd662cae87fe11fe Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Fri, 23 Oct 2015 10:25:57 +0000 Subject: [PATCH] sem_util.ads (Unique_Defining_Entity): Document the result for tasks and entries. 2015-10-23 Arnaud Charlet * sem_util.ads (Unique_Defining_Entity): Document the result for tasks and entries. * sem_util.adb (Unique_Entity): Return declaration entity for task and entry bodies From-SVN: r229222 --- gcc/ada/ChangeLog | 7 +++++++ gcc/ada/sem_util.adb | 26 ++++++++++++++++++++++++++ gcc/ada/sem_util.ads | 2 ++ 3 files changed, 35 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index d9987889237..513f3afe219 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2015-10-23 Arnaud Charlet + + * sem_util.ads (Unique_Defining_Entity): Document the result + for tasks and entries. + * sem_util.adb (Unique_Entity): Return declaration entity for task and + entry bodies + 2015-10-22 Mikhail Maltsev * gcc-interface/decl.c (gnat_to_gnu_entity): Use gcc_checking_assert. diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 384221e32db..f6c3ebd2f31 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -19082,6 +19082,32 @@ package body Sem_Util is U := Spec_Entity (E); end if; + when E_Task_Body => + P := Parent (E); + U := Corresponding_Spec (P); + + when E_Entry => + if Nkind (Parent (E)) = N_Entry_Body then + declare + Decl : Entity_Id := First_Entity (Scope (E)); + begin + -- Traverse the entity list of the protected object + -- and locate an entry declaration with a matching + -- Corresponding_Body. + + while Present (Decl) loop + if Ekind (Decl) = E_Entry + and then Corresponding_Body (Parent (Decl)) = E + then + U := Decl; + exit; + end if; + Next_Entity (Decl); + end loop; + pragma Assert (Present (Decl)); + end; + end if; + when others => null; end case; diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index c0bf234ce70..9d77c7f10a9 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -2105,6 +2105,8 @@ package Sem_Util is -- views of the same entity have the same unique defining entity: -- * package spec and body; -- * subprogram declaration, subprogram stub and subprogram body; + -- * entry declaration and entry body; + -- * task declaration, task body stub and task body; -- * private view and full view of a type; -- * private view and full view of a deferred constant. -- In other cases, return the defining entity for N. -- 2.30.2