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