https://gcc.gnu.org/g:f45fc31bd618154c270fa5a7b354d2025800862b

commit r14-10756-gf45fc31bd618154c270fa5a7b354d2025800862b
Author: Eric Botcazou <ebotca...@adacore.com>
Date:   Wed Sep 11 19:37:08 2024 +0200

    ada: Fix negative value returned by 'Image for array with nonnegative 
component
    
    The problem is that Exp_Put_Image.Build_Elementary_Put_Image_Call uses the
    signedness of the base type but the size of the first subtype, hence the
    discrepancy between them.
    
    gcc/ada/ChangeLog:
            PR ada/115535
            * exp_put_image.adb (Build_Elementary_Put_Image_Call): Use the size
            of the underlying type to find the support type.

Diff:
---
 gcc/ada/exp_put_image.adb | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/gcc/ada/exp_put_image.adb b/gcc/ada/exp_put_image.adb
index c298163f36fd..b7327f1f0677 100644
--- a/gcc/ada/exp_put_image.adb
+++ b/gcc/ada/exp_put_image.adb
@@ -293,10 +293,9 @@ package body Exp_Put_Image is
       Loc     : constant Source_Ptr := Sloc (N);
       P_Type  : constant Entity_Id  := Entity (Prefix (N));
       U_Type  : constant Entity_Id  := Underlying_Type (P_Type);
-      FST     : constant Entity_Id  := First_Subtype (U_Type);
       Sink    : constant Node_Id    := First (Expressions (N));
       Item    : constant Node_Id    := Next (Sink);
-      P_Size  : constant Uint       := Esize (FST);
+      P_Size  : constant Uint       := Esize (U_Type);
       Lib_RE  : RE_Id;
 
    begin

Reply via email to