This patch fixes regressions in GNATprove, after a previous patch
changed routine Is_Object_Reference to literally implement the Ada RM
and recognize aggregates as objects.
Now routine Evaluate_Name also literally implements the Ada RM rules
about name evaluation; in particular, it restores forced evaluation of
aggregates (which are now recognized as objects).

There appears to be no impact on compilation.

Tested on x86_64-pc-linux-gnu, committed on trunk

2020-06-16  Piotr Trojanek  <troja...@adacore.com>

gcc/ada/

        * exp_util.adb (Evaluate_Name): Force evaluation of aggregates;
        recursively evaluate expression of a qualified expression; fix
        location of the comment for an attribute referenced and an
        indexed component.
--- gcc/ada/exp_util.adb
+++ gcc/ada/exp_util.adb
@@ -4918,11 +4918,16 @@ package body Exp_Util is
 
    procedure Evaluate_Name (Nam : Node_Id) is
    begin
-      --  For an attribute reference or an indexed component, evaluate the
-      --  prefix, which is itself a name, recursively, and then force the
-      --  evaluation of all the subscripts (or attribute expressions).
-
       case Nkind (Nam) is
+         --  For an aggregate, force its evaluation
+
+         when N_Aggregate =>
+            Force_Evaluation (Nam);
+
+         --  For an attribute reference or an indexed component, evaluate the
+         --  prefix, which is itself a name, recursively, and then force the
+         --  evaluation of all the subscripts (or attribute expressions).
+
          when N_Attribute_Reference
             | N_Indexed_Component
          =>
@@ -4960,16 +4965,10 @@ package body Exp_Util is
          =>
             Force_Evaluation (Nam);
 
-         --  For a qualified expression, we evaluate the underlying object
-         --  name if any, otherwise we force the evaluation of the underlying
-         --  expression.
+         --  For a qualified expression, we evaluate the expression
 
          when N_Qualified_Expression =>
-            if Is_Object_Reference (Expression (Nam)) then
-               Evaluate_Name (Expression (Nam));
-            else
-               Force_Evaluation (Expression (Nam));
-            end if;
+            Evaluate_Name (Expression (Nam));
 
          --  For a selected component, we simply evaluate the prefix
 

Reply via email to