aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2016-10-12 12:32:53 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2016-10-12 12:32:53 +0200
commitf40dbd80eb764d7dbab35d3bb7ec871a64db5606 (patch)
treee612c8755d59bda478c85f7dc997a1b5ae4daf1a
parentb4a9ef2f4d68a5a10f4c87c9f416562bf5f59d35 (diff)
downloadgcc-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
-rw-r--r--gcc/ada/exp_ch5.adb18
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