[gcc(refs/users/guojiufu/heads/guojiufu-branch)] [Ada] Ada_2020: shared variable control aspects on formal derived types

Jiu Fu Guo guojiufu@gcc.gnu.org
Wed Jun 10 03:42:51 GMT 2020


https://gcc.gnu.org/g:2f7294f23e87c4e0a48e50814ab7bb9a4a756a9f

commit 2f7294f23e87c4e0a48e50814ab7bb9a4a756a9f
Author: Ed Schonberg <schonberg@adacore.com>
Date:   Sun Feb 9 19:30:05 2020 -0500

    [Ada] Ada_2020: shared variable control aspects on formal derived types
    
    2020-06-08  Ed Schonberg  <schonberg@adacore.com>
    
    gcc/ada/
    
            * par-ch12.adb (P_Formal_Derived_Type_Definition): Handle
            properly formal derived types that include aspect
            specifications, so that the "with" keyword appears twice in the
            formal type declaration.
            * sem_ch13.adb (Has_Generic_Parent): Return true if the type
            itself is a generic formal.

Diff:
---
 gcc/ada/par-ch12.adb | 8 +++++++-
 gcc/ada/sem_ch13.adb | 6 +++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/gcc/ada/par-ch12.adb b/gcc/ada/par-ch12.adb
index ebfe791504d..c53f7cb83d8 100644
--- a/gcc/ada/par-ch12.adb
+++ b/gcc/ada/par-ch12.adb
@@ -972,8 +972,14 @@ package body Ch12 is
 
       if Token = Tok_With then
 
-         if Ada_Version >= Ada_2020 and Token /= Tok_Private then
+         if Ada_Version >= Ada_2020 and not Next_Token_Is (Tok_Private) then
+
             --  Formal type has aspect specifications, parsed later.
+            --  Otherwise this is a formal derived type. Note that it may
+            --  also include later aspect specifications, as in:
+
+            --    type DT is new T with private with atomic;
+
             return Def_Node;
 
          else
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index bd3010ca405..b0b673fe230 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -13027,7 +13027,7 @@ package body Sem_Ch13 is
 
    function Rep_Item_Too_Early (T : Entity_Id; N : Node_Id) return Boolean is
       function Has_Generic_Parent (E : Entity_Id) return Boolean;
-      --  Return True if any ancestor is a generic type
+      --  Return True if R or any ancestor is a generic type
 
       ------------------------
       -- Has_Generic_Parent --
@@ -13037,6 +13037,10 @@ package body Sem_Ch13 is
          Ancestor_Type : Entity_Id := Etype (E);
 
       begin
+         if Is_Generic_Type (E) then
+            return True;
+         end if;
+
          while Present (Ancestor_Type)
            and then not Is_Generic_Type (Ancestor_Type)
            and then Etype (Ancestor_Type) /= Ancestor_Type


More information about the Gcc-cvs mailing list