re PR ada/64057 (possible issue in the shared implementation of Ada.Strings.Unbounded)
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 12 Oct 2016 10:32:53 +0000 (12:32 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 12 Oct 2016 10:32:53 +0000 (12:32 +0200)
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

gcc/ada/exp_ch5.adb

index 77342299e82dc68e1e5ebaa32ef8a6192212552e..595a559804ec5b5d9709511f2042fa5331d8d48b 100644 (file)
@@ -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