]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* trans-expr.c (gfc_conv_initializer): Set STATIC flags for initializers.
authorJan Hubicka <jh@suse.cz>
Tue, 7 Sep 2010 21:35:19 +0000 (23:35 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 7 Sep 2010 21:35:19 +0000 (21:35 +0000)
From-SVN: r163973

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

index 1d26e99d89defc986929887d9854607ee0bb1770..84cf449e03d30c66fb866f8126211b6e4a3bc101 100644 (file)
@@ -1,3 +1,7 @@
+2010-09-07  Jan Hubicka  <jh@suse.cz>
+
+       * trans-expr.c (gfc_conv_initializer): Set STATIC flags for initializers.
+
 2010-09-07  Tobias Burnus <burnus@net-b.de>
        
        PR fortran/45583
index 479c807752c318db68585ca06af0841f297051df..433db2571b3089476ee2c53a052aef9b7bd5508e 100644 (file)
@@ -4000,19 +4000,23 @@ gfc_conv_initializer (gfc_expr * expr, gfc_typespec * ts, tree type,
 
       gfc_init_se (&se, NULL);
       gfc_conv_constant (&se, expr);
+      gcc_assert (TREE_CODE (se.expr) != CONSTRUCTOR);
       return se.expr;
     }
   
   if (array && !procptr)
     {
+      tree ctor;
       /* Arrays need special handling.  */
       if (pointer)
-       return gfc_build_null_descriptor (type);
+       ctor = gfc_build_null_descriptor (type);
       /* Special case assigning an array to zero.  */
       else if (is_zero_initializer_p (expr))
-        return build_constructor (type, NULL);
+        ctor = build_constructor (type, NULL);
       else
-       return gfc_conv_array_initializer (type, expr);
+       ctor = gfc_conv_array_initializer (type, expr);
+      TREE_STATIC (ctor) = 1;
+      return ctor;
     }
   else if (pointer || procptr)
     {
@@ -4023,6 +4027,7 @@ gfc_conv_initializer (gfc_expr * expr, gfc_typespec * ts, tree type,
          gfc_init_se (&se, NULL);
          se.want_pointer = 1;
          gfc_conv_expr (&se, expr);
+          gcc_assert (TREE_CODE (se.expr) != CONSTRUCTOR);
          return se.expr;
        }
     }
@@ -4037,14 +4042,21 @@ gfc_conv_initializer (gfc_expr * expr, gfc_typespec * ts, tree type,
            gfc_conv_structure (&se, gfc_class_null_initializer(ts), 1);
          else
            gfc_conv_structure (&se, expr, 1);
+         gcc_assert (TREE_CODE (se.expr) == CONSTRUCTOR);
+         TREE_STATIC (se.expr) = 1;
          return se.expr;
 
        case BT_CHARACTER:
-         return gfc_conv_string_init (ts->u.cl->backend_decl,expr);
+         {
+           tree ctor = gfc_conv_string_init (ts->u.cl->backend_decl,expr);
+           TREE_STATIC (ctor) = 1;
+           return ctor;
+         }
 
        default:
          gfc_init_se (&se, NULL);
          gfc_conv_constant (&se, expr);
+         gcc_assert (TREE_CODE (se.expr) != CONSTRUCTOR);
          return se.expr;
        }
     }