[Ada] Force evaluation of operator calls in renamings
authorPiotr Trojanek <trojanek@adacore.com>
Sun, 5 Apr 2020 21:37:18 +0000 (23:37 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Tue, 16 Jun 2020 13:07:14 +0000 (09:07 -0400)
2020-06-16  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* exp_util.adb (Evaluate_Name): Force evaluation of operators.

gcc/ada/exp_util.adb

index 471790e73ee92a139a64e4b2249b809398ae2df5..47b4354a41a49e59f41794f3009a65018c7d4b13 100644 (file)
@@ -4953,9 +4953,11 @@ package body Exp_Util is
          when N_Explicit_Dereference =>
             Force_Evaluation (Prefix (Nam));
 
-         --  For a function call, we evaluate the call
+         --  For a function call, we evaluate the call; same for an operator
 
-         when N_Function_Call =>
+         when N_Function_Call
+            | N_Op
+         =>
             Force_Evaluation (Nam);
 
          --  For a qualified expression, we evaluate the underlying object
@@ -4989,9 +4991,11 @@ package body Exp_Util is
          when N_Type_Conversion =>
             Evaluate_Name (Expression (Nam));
 
-         --  The remaining cases are direct name, operator symbol and character
-         --  literal. In all these cases, we do nothing, since we want to
-         --  reevaluate each time the renamed object is used.
+         --  The remaining cases are direct name and character literal. In all
+         --  these cases, we do nothing, since we want to reevaluate each time
+         --  the renamed object is used. ??? There are more remaining cases, at
+         --  least in the GNATprove_Mode, where this routine is called in more
+         --  contexts than in GNAT.
 
          when others =>
             null;