From 3a5c9377f6d99ea23520f71340880b2fcb7bef11 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 4 Sep 2020 12:34:02 +0200 Subject: [PATCH] [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. --- gcc/ada/exp_imgv.adb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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); -- 2.30.2