diff options
author | janus <janus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-08-13 19:46:46 +0000 |
---|---|---|
committer | janus <janus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-08-13 19:46:46 +0000 |
commit | eeebe20ba63ca092de5e2d4575b5765dd88a7ce6 (patch) | |
tree | 7ca7b016aeb3b05df501fe81fe97a0e52abdc7b1 /gcc/fortran/array.c | |
parent | f6c8c8fca300b704555635d16da440e42970b3a6 (diff) | |
download | gcc-eeebe20ba63ca092de5e2d4575b5765dd88a7ce6.tar.gz |
2009-08-13 Janus Weil <janus@gcc.gnu.org>
PR fortran/40941
* gfortran.h (gfc_typespec): Put 'derived' and 'cl' into union.
* decl.c (build_struct): Make sure 'cl' is only used
if type is BT_CHARACTER.
* symbol.c (gfc_set_default_type): Ditto.
* resolve.c (resolve_symbol, resolve_fl_derived): Ditto.
(resolve_equivalence,resolve_equivalence_derived): Make sure 'derived'
is only used if type is BT_DERIVED.
* trans-io.c (transfer_expr): Make sure 'derived' is only used if type
is BT_DERIVED or BT_INTEGER (special case: C_PTR/C_FUNPTR).
* array.c: Mechanical replacements to accomodate union in gfc_typespec.
* check.c: Ditto.
* data.c: Ditto.
* decl.c: Ditto.
* dump-parse-tree.c: Ditto.
* expr.c: Ditto.
* interface.c: Ditto.
* iresolve.c: Ditto.
* match.c: Ditto.
* misc.c: Ditto.
* module.c: Ditto.
* openmp.c: Ditto.
* parse.c: Ditto.
* primary.c: Ditto.
* resolve.c: Ditto.
* simplify.c: Ditto.
* symbol.c: Ditto.
* target-memory.c: Ditto.
* trans-array.c: Ditto.
* trans-common.c: Ditto.
* trans-const.c: Ditto.
* trans-decl.c: Ditto.
* trans-expr.c: Ditto.
* trans-intrinsic.c: Ditto.
* trans-io.c: Ditto.
* trans-stmt.c: Ditto.
* trans-types.c: Ditto.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@150725 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r-- | gcc/fortran/array.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index 2fee4658a0d..2e12a146ae0 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -968,8 +968,8 @@ done: else expr->ts.type = BT_UNKNOWN; - if (expr->ts.cl) - expr->ts.cl->length_from_typespec = seen_ts; + if (expr->ts.u.cl) + expr->ts.u.cl->length_from_typespec = seen_ts; expr->where = where; expr->rank = 1; @@ -1588,25 +1588,25 @@ gfc_resolve_character_array_constructor (gfc_expr *expr) gcc_assert (expr->expr_type == EXPR_ARRAY); gcc_assert (expr->ts.type == BT_CHARACTER); - if (expr->ts.cl == NULL) + if (expr->ts.u.cl == NULL) { for (p = expr->value.constructor; p; p = p->next) - if (p->expr->ts.cl != NULL) + if (p->expr->ts.u.cl != NULL) { /* Ensure that if there is a char_len around that it is used; otherwise the middle-end confuses them! */ - expr->ts.cl = p->expr->ts.cl; + expr->ts.u.cl = p->expr->ts.u.cl; goto got_charlen; } - expr->ts.cl = gfc_new_charlen (gfc_current_ns); + expr->ts.u.cl = gfc_new_charlen (gfc_current_ns); } got_charlen: found_length = -1; - if (expr->ts.cl->length == NULL) + if (expr->ts.u.cl->length == NULL) { /* Check that all constant string elements have the same length until we reach the end or find a variable-length one. */ @@ -1630,11 +1630,11 @@ got_charlen: - mpz_get_ui (ref->u.ss.start->value.integer) + 1; current_length = (int) j; } - else if (p->expr->ts.cl && p->expr->ts.cl->length - && p->expr->ts.cl->length->expr_type == EXPR_CONSTANT) + else if (p->expr->ts.u.cl && p->expr->ts.u.cl->length + && p->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT) { long j; - j = mpz_get_si (p->expr->ts.cl->length->value.integer); + j = mpz_get_si (p->expr->ts.u.cl->length->value.integer); current_length = (int) j; } else @@ -1658,18 +1658,18 @@ got_charlen: gcc_assert (found_length != -1); /* Update the character length of the array constructor. */ - expr->ts.cl->length = gfc_int_expr (found_length); + expr->ts.u.cl->length = gfc_int_expr (found_length); } else { /* We've got a character length specified. It should be an integer, otherwise an error is signalled elsewhere. */ - gcc_assert (expr->ts.cl->length); + gcc_assert (expr->ts.u.cl->length); /* If we've got a constant character length, pad according to this. gfc_extract_int does check for BT_INTEGER and EXPR_CONSTANT and sets max_length only if they pass. */ - gfc_extract_int (expr->ts.cl->length, &found_length); + gfc_extract_int (expr->ts.u.cl->length, &found_length); /* Now pad/truncate the elements accordingly to the specified character length. This is ok inside this conditional, as in the case above @@ -1683,16 +1683,16 @@ got_charlen: int current_length = -1; bool has_ts; - if (p->expr->ts.cl && p->expr->ts.cl->length) + if (p->expr->ts.u.cl && p->expr->ts.u.cl->length) { - cl = p->expr->ts.cl->length; + cl = p->expr->ts.u.cl->length; gfc_extract_int (cl, ¤t_length); } /* If gfc_extract_int above set current_length, we implicitly know the type is BT_INTEGER and it's EXPR_CONSTANT. */ - has_ts = (expr->ts.cl && expr->ts.cl->length_from_typespec); + has_ts = (expr->ts.u.cl && expr->ts.u.cl->length_from_typespec); if (! cl || (current_length != -1 && current_length < found_length)) |