From: Eric Botcazou Date: Wed, 12 Oct 2016 10:32:53 +0000 (+0200) Subject: re PR ada/64057 (possible issue in the shared implementation of Ada.Strings.Unbounded) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f40dbd80eb764d7dbab35d3bb7ec871a64db5606;p=gcc.git re PR ada/64057 (possible issue in the shared implementation of Ada.Strings.Unbounded) 2016-10-12 Eric Botcazou PR ada/64057 * exp_ch5.adb (Is_Non_Local_Array): Return true for every array that is not a component or slice of an entity in the current scope. From-SVN: r241025 --- diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 77342299e82..595a559804e 100644 --- a/gcc/ada/exp_ch5.adb +++ b/gcc/ada/exp_ch5.adb @@ -278,9 +278,9 @@ package body Exp_Ch5 is function Is_Non_Local_Array (Exp : Node_Id) return Boolean; -- Determine if Exp is a reference to an array variable which is other - -- than an object defined in the current scope, or a slice of such - -- an object. Such objects can be aliased to parameters (unlike local - -- array references). + -- than an object defined in the current scope, or a component or a + -- slice of such an object. Such objects can be aliased to parameters + -- (unlike local array references). ----------------------- -- Apply_Dereference -- @@ -327,10 +327,14 @@ package body Exp_Ch5 is function Is_Non_Local_Array (Exp : Node_Id) return Boolean is begin - return (Is_Entity_Name (Exp) - and then Scope (Entity (Exp)) /= Current_Scope) - or else (Nkind (Exp) = N_Slice - and then Is_Non_Local_Array (Prefix (Exp))); + case Nkind (Exp) is + when N_Indexed_Component | N_Selected_Component | N_Slice => + return Is_Non_Local_Array (Prefix (Exp)); + when others => + return + not (Is_Entity_Name (Exp) and then + Scope (Entity (Exp)) = Current_Scope); + end case; end Is_Non_Local_Array; -- Determine if Lhs, Rhs are formal arrays or nonlocal arrays