diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2016-10-12 12:32:53 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2016-10-12 12:32:53 +0200 |
commit | f40dbd80eb764d7dbab35d3bb7ec871a64db5606 (patch) | |
tree | e612c8755d59bda478c85f7dc997a1b5ae4daf1a /gcc | |
parent | b4a9ef2f4d68a5a10f4c87c9f416562bf5f59d35 (diff) | |
download | gcc-f40dbd80eb764d7dbab35d3bb7ec871a64db5606.zip gcc-f40dbd80eb764d7dbab35d3bb7ec871a64db5606.tar.gz gcc-f40dbd80eb764d7dbab35d3bb7ec871a64db5606.tar.bz2 |
re PR ada/64057 (possible issue in the shared implementation of Ada.Strings.Unbounded)
2016-10-12 Eric Botcazou <ebotcazou@adacore.com>
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/exp_ch5.adb | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 7734229..595a559 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 |