sem_util.ads (Unique_Defining_Entity): Document the result for tasks and entries.
authorArnaud Charlet <charlet@adacore.com>
Fri, 23 Oct 2015 10:25:57 +0000 (10:25 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 23 Oct 2015 10:25:57 +0000 (12:25 +0200)
2015-10-23  Arnaud Charlet  <charlet@adacore.com>

* 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
gcc/ada/sem_util.adb
gcc/ada/sem_util.ads

index d99878892379d100848f23b32e8abe72d164e44d..513f3afe2190d1fbd747ee3058e41732d53f71b7 100644 (file)
@@ -1,3 +1,10 @@
+2015-10-23  Arnaud Charlet  <charlet@adacore.com>
+
+       * 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  <maltsevm@gmail.com>
 
        * gcc-interface/decl.c (gnat_to_gnu_entity): Use gcc_checking_assert.
index 384221e32dba18975072d2daacae726ece033004..f6c3ebd2f310abdd911ce53688798c5c29731ade 100644 (file)
@@ -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;
index c0bf234ce70fe7e7373ec42e7444b6fddd46b84d..9d77c7f10a97a7029eedfb12b91012e9ba389050 100644 (file)
@@ -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.