decl.c (array_type_has_nonaliased_component): Return false if the component type...
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 2 Feb 2018 18:09:58 +0000 (18:09 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 2 Feb 2018 18:09:58 +0000 (18:09 +0000)
* gcc-interface/decl.c (array_type_has_nonaliased_component): Return
false if the component type is a pointer.

From-SVN: r257344

gcc/ada/ChangeLog
gcc/ada/gcc-interface/decl.c

index aa69c9216fc06f3fb2e42ec0f99c4a3ffa97fc4c..e0e72a7d9547a98d2ac859147eb6fb133f9b19be 100644 (file)
@@ -1,3 +1,8 @@
+2018-02-02  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/decl.c (array_type_has_nonaliased_component): Return
+       false if the component type is a pointer.
+
 2018-01-11  Gary Dismukes  <dismukes@adacore.com>
 
        * exp_ch3.adb (Default_Initialize_Object): Call New_Copy_Tree on the
index e8c48c7157a1eaa00382c763e738b2ca12442ce9..e0466f349c32b1c5cbdfc8a949d3b2870db7a4ad 100644 (file)
@@ -6113,6 +6113,11 @@ array_type_has_nonaliased_component (tree gnu_type, Entity_Id gnat_type)
       return TYPE_NONALIASED_COMPONENT (gnu_parent_type);
     }
 
+  /* Consider that an array of pointers has an aliased component, which is
+     sort of logical and helps with Taft Amendment types in LTO mode.  */
+  if (POINTER_TYPE_P (TREE_TYPE (gnu_type)))
+    return false;
+
   /* Otherwise, rely exclusively on properties of the element type.  */
   return type_for_nonaliased_component_p (TREE_TYPE (gnu_type));
 }