[Ada] Storage_Model_Object fails to return object entity
authorGary Dismukes <dismukes@adacore.com>
Fri, 4 Mar 2022 22:19:18 +0000 (17:19 -0500)
committerPierre-Marie de Rodat <derodat@adacore.com>
Fri, 13 May 2022 08:04:46 +0000 (08:04 +0000)
After a compilation unit containing a Designated_Storage_Model aspect
was processed by the compiler front end, the aspect's expression was
seen as not having been analyzed. In some cases this can lead to the
Storage_Model_Object function not returning the entity of the associated
model object (such as when the model object is specified using an
expanded name). This was due to a second copy of the aspect's expression
being made in Check_Aspect_At_Freeze_Point, and that copy wasn't
analyzed, even though the earlier version of the expression prior to
that copy had been. (The copy is needed for proper checking of Ada's
rules for ensuring that certain aspect expressions resolve the same way
at the freeze point and later at the end of the declarations.) This is
corrected by doing analysis of the new aspect expression within
Check_Aspect_At_Freeze_Point, as is already done in that procedure in
the case of several other aspects.

gcc/ada/

* sem_ch13.adb (Check_Aspect_At_Freeze_Point): Analyze the
expression of the aspect at this point, like other aspects that
denote simple entities. Ensures that function
Storage_Model_Object will have an entity to retrieve from the
aspect expression. Also, move comment about aspects that don't
require delay analysis in front of last alternative of the case
statement, where it's supposed to be.

gcc/ada/sem_ch13.adb

index 3cac123..61f7ba7 100644 (file)
@@ -11359,9 +11359,11 @@ package body Sem_Ch13 is
          when Aspect_Predicate_Failure =>
             T := Standard_String;
 
-         --  Here is the list of aspects that don't require delay analysis
+         --  As for some other aspects above, the expression of this aspect is
+         --  just an entity that does not need any resolution, so just analyze.
 
          when Aspect_Designated_Storage_Model =>
+            Analyze (Expression (ASN));
             return;
 
          when Aspect_Storage_Model_Type =>
@@ -11389,6 +11391,8 @@ package body Sem_Ch13 is
 
             return;
 
+         --  Here is the list of aspects that don't require delay analysis
+
          when Aspect_Abstract_State
             | Aspect_Annotate
             | Aspect_Async_Readers