[Ada] Convert operands of generated code to Standard.Unsigned for modular ops.
authorEd Schonberg <schonberg@adacore.com>
Thu, 31 May 2018 10:44:45 +0000 (10:44 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 31 May 2018 10:44:45 +0000 (10:44 +0000)
2018-05-31  Ed Schonberg  <schonberg@adacore.com>

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
gcc/ada/exp_ch4.adb

index 96c90c64711f18420eaac8deaa3d44e7e8019474..9f47a77104461e4ee4928f1299681ed46e9b86a6 100644 (file)
@@ -1,3 +1,11 @@
+2018-05-31  Ed Schonberg  <schonberg@adacore.com>
+
+       * 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  <trojanek@adacore.com>
 
        * einfo.ads (Package_Instantiation): Update comment after a routine
index d110385a20c7a64cc9cb5157cd295e4164cd93e1..50333d3eb6bf71a9bcb96afb3faf02d9d8aebbe2 100644 (file)
@@ -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);