diff options
| author | Paul Brook <paul@codesourcery.com> | 2004-07-12 01:23:39 +0000 |
|---|---|---|
| committer | Paul Brook <pbrook@gcc.gnu.org> | 2004-07-12 01:23:39 +0000 |
| commit | 597073ace8549d2a934a1fe7d9402e1f63e91220 (patch) | |
| tree | 965224cf14305213a75803cd0d6ba965b02e9514 /gcc/fortran/trans-common.c | |
| parent | 247fec6ee6f9e831b62a1672abc0cc8a7ffb360e (diff) | |
| download | gcc-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.c | 33 |
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; } } |
