diff options
author | Jan Hubicka <jh@suse.cz> | 2010-09-07 23:35:19 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2010-09-07 21:35:19 +0000 |
commit | fa9a71936a85479cba4a2138b7859f492fdae60c (patch) | |
tree | 1b6ad1710069d8d46df88e8ed3125e1dcd9d971c /gcc/fortran/trans-expr.c | |
parent | f27e50db1ab5c90adf4ce77902a4e5783196d7d7 (diff) | |
download | gcc-fa9a71936a85479cba4a2138b7859f492fdae60c.zip gcc-fa9a71936a85479cba4a2138b7859f492fdae60c.tar.gz gcc-fa9a71936a85479cba4a2138b7859f492fdae60c.tar.bz2 |
* trans-expr.c (gfc_conv_initializer): Set STATIC flags for initializers.
From-SVN: r163973
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r-- | gcc/fortran/trans-expr.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 479c807..433db25 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -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; } } |