[Ada] Convert operands of generated code to Standard.Unsigned for modular ops.

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
This commit is contained in:
Ed Schonberg 2018-05-31 10:44:45 +00:00 committed by Pierre-Marie de Rodat
parent 5b87c1fe09
commit dfd2da005e
2 changed files with 15 additions and 2 deletions

View 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

View 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);