[Ada] Do not crash with -gnatR3 on Ghost aspects
authorEd Schonberg <schonberg@adacore.com>
Wed, 14 Aug 2019 09:52:39 +0000 (09:52 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 14 Aug 2019 09:52:39 +0000 (09:52 +0000)
2019-08-14  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_aux.adb (Next_Rep_Item): If a node in the rep chain
involves a Ghost aspect it may have been replaced by a null
statement; use the original node to find next Rep_Item.
* repinfo.adb (List_Entities): Do not list an Ignored
Ghost_Entity, for which information may have been deleted.

From-SVN: r274470

gcc/ada/ChangeLog
gcc/ada/repinfo.adb
gcc/ada/sem_aux.adb

index 370d943a6df0ebb40ae7ca4cf3d924dd44834e37..1c869e12359fb00c37edb0ededed91c3c813bbc5 100644 (file)
@@ -1,3 +1,11 @@
+2019-08-14  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_aux.adb (Next_Rep_Item): If a node in the rep chain
+       involves a Ghost aspect it may have been replaced by a null
+       statement; use the original node to find next Rep_Item.
+       * repinfo.adb (List_Entities): Do not list an Ignored
+       Ghost_Entity, for which information may have been deleted.
+
 2019-08-14  Bob Duff  <duff@adacore.com>
 
        * sem_prag.ads, sem_prag.adb
index d168e90e0a9c92372e3c2fe18c88c27d08bf5535..6f531b21348a440e7b1a742878136c941c52243d 100644 (file)
@@ -479,6 +479,7 @@ package body Repinfo is
 
       if Present (Ent)
         and then Nkind (Declaration_Node (Ent)) not in N_Renaming_Declaration
+        and then not Is_Ignored_Ghost_Entity (Ent)
       then
          --  If entity is a subprogram and we are listing mechanisms,
          --  then we need to list mechanisms for this entity. We skip this
index 71a38732763d008cd73dbd745a768b3bcebe03ea..e5bd68ac7b8b8a448a1bca7dd57f8aac4fb07546 100644 (file)
@@ -569,6 +569,12 @@ package body Sem_Aux is
             elsif Entity (N) = E then
                return N;
             end if;
+
+         --  A Ghost-related aspect, if disabled, may have been replaced by a
+         --  null statement.
+
+         elsif Nkind (N) = N_Null_Statement then
+            N := Original_Node (N);
          end if;
 
          Next_Rep_Item (N);