trans-array.c (gfc_trans_create_temp_array): Properly create a DECL_EXPR for the...
authorRichard Biener <rguenther@suse.de>
Mon, 2 May 2016 08:27:54 +0000 (08:27 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 2 May 2016 08:27:54 +0000 (08:27 +0000)
2016-05-02  Richard Biener  <rguenther@suse.de>

fortran/
* trans-array.c (gfc_trans_create_temp_array): Properly
create a DECL_EXPR for the anonymous VLA array type.

From-SVN: r235705

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c

index 6a6b85ea1fcc9e2192d70e9abd55497b17a3cdb6..115586c5dae29b516cb88b5d57641749825bbe1a 100644 (file)
@@ -1,3 +1,8 @@
+2016-05-02  Richard Biener  <rguenther@suse.de>
+
+       * trans-array.c (gfc_trans_create_temp_array): Properly
+       create a DECL_EXPR for the anonymous VLA array type.
+
 2016-04-29  Cesar Philippidis  <cesar@codesourcery.com>
 
        PR middle-end/70626
index 825dfb822af5a963f0c76794432ff15dd80135d6..7be301ddab8cf99e1969c7bd3c50d9a1164cc469 100644 (file)
@@ -1094,6 +1094,16 @@ gfc_trans_create_temp_array (stmtblock_t * pre, stmtblock_t * post, gfc_ss * ss,
   info->descriptor = desc;
   size = gfc_index_one_node;
 
+  /* Emit a DECL_EXPR for the variable sized array type in
+     GFC_TYPE_ARRAY_DATAPTR_TYPE so the gimplification of its type
+     sizes works correctly.  */
+  tree arraytype = TREE_TYPE (GFC_TYPE_ARRAY_DATAPTR_TYPE (type));
+  if (! TYPE_NAME (arraytype))
+    TYPE_NAME (arraytype) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
+                                       NULL_TREE, arraytype);
+  gfc_add_expr_to_block (pre, build1 (DECL_EXPR,
+                                     arraytype, TYPE_NAME (arraytype)));
+
   /* Fill in the array dtype.  */
   tmp = gfc_conv_descriptor_dtype (desc);
   gfc_add_modify (pre, tmp, gfc_get_dtype (TREE_TYPE (desc)));