[Ada] Avoid unnecessary work when expanding 'Image into 'Put_Image
authorPiotr Trojanek <trojanek@adacore.com>
Thu, 17 Jun 2021 16:49:11 +0000 (18:49 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 12 Jul 2021 12:50:55 +0000 (12:50 +0000)
gcc/ada/

* exp_imgv.adb (Expand_Image_Attribute): Move rewriting to
attribute Put_Image to the beginning of expansion of attribute
Image.

gcc/ada/exp_imgv.adb

index d2605fb..69b9f2d 100644 (file)
@@ -1044,6 +1044,15 @@ package body Exp_Imgv is
          return;
       end if;
 
+      --  If Image should be transformed using Put_Image, then do so. See
+      --  Exp_Put_Image for details.
+
+      if Exp_Put_Image.Image_Should_Call_Put_Image (N) then
+         Rewrite (N, Exp_Put_Image.Build_Image_Call (N));
+         Analyze_And_Resolve (N, Standard_String, Suppress => All_Checks);
+         return;
+      end if;
+
       Ptyp := Underlying_Type (Entity (Pref));
 
       --  Ada 2022 allows 'Image on private types, so fetch the underlying
@@ -1063,15 +1072,7 @@ package body Exp_Imgv is
 
       Enum_Case := False;
 
-      --  If this is a case where Image should be transformed using Put_Image,
-      --  then do so. See Exp_Put_Image for details.
-
-      if Exp_Put_Image.Image_Should_Call_Put_Image (N) then
-         Rewrite (N, Exp_Put_Image.Build_Image_Call (N));
-         Analyze_And_Resolve (N, Standard_String, Suppress => All_Checks);
-         return;
-
-      elsif Rtyp = Standard_Boolean then
+      if Rtyp = Standard_Boolean then
          --  Use inline expansion if the -gnatd_x switch is not passed to the
          --  compiler. Otherwise expand into a call to the runtime.