From: Eric Botcazou Date: Fri, 4 Sep 2020 10:34:02 +0000 (+0200) Subject: [Ada] Do not use Long_Long_Long_Integer'Image with pragma Discard_Names X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3a5c9377f6d99ea23520f71340880b2fcb7bef11;p=gcc.git [Ada] Do not use Long_Long_Long_Integer'Image with pragma Discard_Names gcc/ada/ * exp_imgv.adb (Expand_Image_Attribute): For an enumeration type subject to pragma Discard_Names, convert 'Pos to Long_Long_Integer before applying 'Img to the result. --- diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb index 5850b5d2fe1..40cb51462b8 100644 --- a/gcc/ada/exp_imgv.adb +++ b/gcc/ada/exp_imgv.adb @@ -619,15 +619,18 @@ package body Exp_Imgv is or else No (Lit_Strings (Rtyp)) then -- When pragma Discard_Names applies to the first subtype, build - -- (Pref'Pos (Expr))'Img. + -- (Long_Long_Integer (Pref'Pos (Expr)))'Img. The conversion is + -- there to avoid applying 'Img directly in Universal_Integer, + -- which can be a very large type. See also the handling of 'Val. Rewrite (N, Make_Attribute_Reference (Loc, Prefix => - Make_Attribute_Reference (Loc, - Prefix => Pref, - Attribute_Name => Name_Pos, - Expressions => New_List (Expr)), + Convert_To (Standard_Long_Long_Integer, + Make_Attribute_Reference (Loc, + Prefix => Pref, + Attribute_Name => Name_Pos, + Expressions => New_List (Expr))), Attribute_Name => Name_Img)); Analyze_And_Resolve (N, Standard_String);