From dfd2da005e1023bbcbcc0390bbb360c1b8a43f77 Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Thu, 31 May 2018 10:44:45 +0000 Subject: [PATCH] [Ada] Convert operands of generated code to Standard.Unsigned for modular ops. 2018-05-31 Ed Schonberg gcc/ada/ * exp_ch4.adb (Expand_Modular_Addition, Expand_Modular_Subtraction): Convert all operands of the generated code to Standard.Unsigned, to prevent spurious visibility errors. This is needed when the generated expansion involves a modular index type of an array type, and the index type is not immediately visible. From-SVN: r260993 --- gcc/ada/ChangeLog | 8 ++++++++ gcc/ada/exp_ch4.adb | 9 +++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 96c90c64711..9f47a771044 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,11 @@ +2018-05-31 Ed Schonberg + + * exp_ch4.adb (Expand_Modular_Addition, Expand_Modular_Subtraction): + Convert all operands of the generated code to Standard.Unsigned, to + prevent spurious visibility errors. This is needed when the generated + expansion involves a modular index type of an array type, and the index + type is not immediately visible. + 2018-05-30 Piotr Trojanek * einfo.ads (Package_Instantiation): Update comment after a routine diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index d110385a20c..50333d3eb6b 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -4057,8 +4057,12 @@ package body Exp_Ch4 is Else_Expr : constant Node_Id := New_Op_Node (N_Op_Subtract, Loc); begin + -- To prevent spurious visibility issues, convert all + -- operands to Standard.Unsigned. + Set_Left_Opnd (Cond_Expr, - New_Copy_Tree (Left_Opnd (N))); + Unchecked_Convert_To (Standard_Unsigned, + New_Copy_Tree (Left_Opnd (N)))); Set_Right_Opnd (Cond_Expr, Make_Integer_Literal (Loc, Mod_Minus_Right)); Append_To (Exprs, Cond_Expr); @@ -4180,7 +4184,8 @@ package body Exp_Ch4 is Loc); begin Set_Left_Opnd (Cond_Expr, - New_Copy_Tree (Left_Opnd (N))); + Unchecked_Convert_To (Standard_Unsigned, + New_Copy_Tree (Left_Opnd (N)))); Set_Right_Opnd (Cond_Expr, Make_Integer_Literal (Loc, Intval (Right_Opnd (N)))); Append_To (Exprs, Cond_Expr); -- 2.30.2