aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-common.c
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2004-07-12 01:23:39 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2004-07-12 01:23:39 +0000
commit597073ace8549d2a934a1fe7d9402e1f63e91220 (patch)
tree965224cf14305213a75803cd0d6ba965b02e9514 /gcc/fortran/trans-common.c
parent247fec6ee6f9e831b62a1672abc0cc8a7ffb360e (diff)
downloadgcc-597073ace8549d2a934a1fe7d9402e1f63e91220.zip
gcc-597073ace8549d2a934a1fe7d9402e1f63e91220.tar.gz
gcc-597073ace8549d2a934a1fe7d9402e1f63e91220.tar.bz2
expr.c (gfc_check_assign_symbol): Handle pointer assignments.
* expr.c (gfc_check_assign_symbol): Handle pointer assignments. * trans-array.c (gfc_trans_auto_array_allocation): Remove initialization code. * trans-common.c (create_common): Use gfc_conv_initializer. * trans-decl.c (gfc_get_symbol_decl): Use gfc_conv_initializer. * trans-expr.c (gfc_conv_initializer): New function. (gfc_conv_structure): Use it. * trans.h (gfc_conv_initializer): Add prototype. testsuite/ * gfortran.dg/pointer_init_1.f90: New test. From-SVN: r84542
Diffstat (limited to 'gcc/fortran/trans-common.c')
-rw-r--r--gcc/fortran/trans-common.c33
1 files changed, 5 insertions, 28 deletions
diff --git a/gcc/fortran/trans-common.c b/gcc/fortran/trans-common.c
index 7907020..451312e 100644
--- a/gcc/fortran/trans-common.c
+++ b/gcc/fortran/trans-common.c
@@ -383,7 +383,6 @@ create_common (gfc_common_head *com)
if (is_init)
{
tree list, ctor, tmp;
- gfc_se se;
HOST_WIDE_INT offset = 0;
list = NULL_TREE;
@@ -399,33 +398,11 @@ create_common (gfc_common_head *com)
We don't implement this yet, so bail out. */
gfc_todo_error ("Initialization of overlapping variables");
}
- if (s->sym->attr.dimension)
- {
- tmp = gfc_conv_array_initializer (TREE_TYPE (s->field),
- s->sym->value);
- list = tree_cons (s->field, tmp, list);
- }
- else
- {
- switch (s->sym->ts.type)
- {
- case BT_CHARACTER:
- se.expr = gfc_conv_string_init
- (s->sym->ts.cl->backend_decl, s->sym->value);
- break;
-
- case BT_DERIVED:
- gfc_init_se (&se, NULL);
- gfc_conv_structure (&se, s->sym->value, 1);
- break;
-
- default:
- gfc_init_se (&se, NULL);
- gfc_conv_expr (&se, s->sym->value);
- break;
- }
- list = tree_cons (s->field, se.expr, list);
- }
+ /* Add the initializer for this field. */
+ tmp = gfc_conv_initializer (s->sym->value, &s->sym->ts,
+ TREE_TYPE (s->field), s->sym->attr.dimension,
+ s->sym->attr.pointer || s->sym->attr.allocatable);
+ list = tree_cons (s->field, tmp, list);
offset = s->offset + s->length;
}
}