From b516a1a96b625e6b2b1d5c4f6b48573a8481e9ac Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Mon, 11 Jun 2018 09:15:03 +0000 Subject: [PATCH] [Ada] Unnesting: improve handling of bounds for formal parameters 2018-06-11 Ed Schonberg gcc/ada/ * exp_unst.adb (Visit_Node): Check reference to formal parameter of current procedure, because the bounds of its type may be uplevel references. From-SVN: r261394 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/exp_unst.adb | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 6b883b9dd3a..ea2c131bf23 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2018-06-11 Ed Schonberg + + * exp_unst.adb (Visit_Node): Check reference to formal parameter of + current procedure, because the bounds of its type may be uplevel + references. + 2018-06-02 Eric Botcazou * gcc-interface/decl.c (gnat_to_gnu_entity) : If this is diff --git a/gcc/ada/exp_unst.adb b/gcc/ada/exp_unst.adb index c6d49e08f7d..b38f2b6d17f 100644 --- a/gcc/ada/exp_unst.adb +++ b/gcc/ada/exp_unst.adb @@ -999,6 +999,20 @@ package body Exp_Unst is and then not Is_Static_Type (Ent) then Note_Uplevel_Ref (Ent, N, Caller, Callee); + + -- Check the type of a formal parameter of the current + -- subprogram, whose formal type may be an uplevel + -- reference. + + elsif Is_Formal (Ent) + and then Scope (Ent) = Current_Subprogram + then + declare + DT : Boolean := False; + + begin + Check_Static_Type (Etype (Ent), Empty, DT); + end; end if; end if; end if;