diff options
author | Tobias Schlüter <tobias.schlueter@physik.uni-muenchen.de> | 2005-02-08 14:41:08 +0100 |
---|---|---|
committer | Tobias Schlüter <tobi@gcc.gnu.org> | 2005-02-08 14:41:08 +0100 |
commit | eac33acc64dff662c59c194ebb19d67ca6790272 (patch) | |
tree | 88335b706b5071f059bdce822601ba05626dffcf /gcc/fortran/expr.c | |
parent | 81122c446d94ea3f12fae0f28d6b436c577633d2 (diff) | |
download | gcc-eac33acc64dff662c59c194ebb19d67ca6790272.zip gcc-eac33acc64dff662c59c194ebb19d67ca6790272.tar.gz gcc-eac33acc64dff662c59c194ebb19d67ca6790272.tar.bz2 |
expr.c (gfc_copy_expr): Don't copy 'op1' and 'op2' for EXPR_SUBSTRING.
fortran/
* expr.c (gfc_copy_expr): Don't copy 'op1' and 'op2' for
EXPR_SUBSTRING.
(gfc_is_constant_expr): Check 'ref' to determine if substring
reference is constant.
(gfc_simplify_expr): Simplify 'ref' instead of 'op1' and 'op2'.
(check_init_expr, check_restricted): Check 'ref' instead of 'op1'
and 'op2'.
* module.c (mio_expr): Read / write 'ref' instead of 'op1' and 'op2'.
testsuite/
* gfortran.dg/substr_1.f90: New test.
From-SVN: r94735
Diffstat (limited to 'gcc/fortran/expr.c')
-rw-r--r-- | gcc/fortran/expr.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 87ce3e5..3898f7a 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -393,9 +393,6 @@ gfc_copy_expr (gfc_expr * p) q->value.character.string = s; memcpy (s, p->value.character.string, p->value.character.length + 1); - - q->op1 = gfc_copy_expr (p->op1); - q->op2 = gfc_copy_expr (p->op2); break; case EXPR_CONSTANT: @@ -699,7 +696,8 @@ gfc_is_constant_expr (gfc_expr * e) break; case EXPR_SUBSTRING: - rv = gfc_is_constant_expr (e->op1) && gfc_is_constant_expr (e->op2); + rv = (gfc_is_constant_expr (e->ref->u.ss.start) + && gfc_is_constant_expr (e->ref->u.ss.end)); break; case EXPR_STRUCTURE: @@ -1115,12 +1113,10 @@ gfc_simplify_expr (gfc_expr * p, int type) break; case EXPR_SUBSTRING: - if (gfc_simplify_expr (p->op1, type) == FAILURE - || gfc_simplify_expr (p->op2, type) == FAILURE) + if (simplify_ref_chain (p->ref, type) == FAILURE) return FAILURE; /* TODO: evaluate constant substrings. */ - break; case EXPR_OP: @@ -1439,11 +1435,11 @@ check_init_expr (gfc_expr * e) break; case EXPR_SUBSTRING: - t = check_init_expr (e->op1); + t = check_init_expr (e->ref->u.ss.start); if (t == FAILURE) break; - t = check_init_expr (e->op2); + t = check_init_expr (e->ref->u.ss.end); if (t == SUCCESS) t = gfc_simplify_expr (e, 0); @@ -1662,11 +1658,11 @@ check_restricted (gfc_expr * e) break; case EXPR_SUBSTRING: - t = gfc_specification_expr (e->op1); + t = gfc_specification_expr (e->ref->u.ss.start); if (t == FAILURE) break; - t = gfc_specification_expr (e->op2); + t = gfc_specification_expr (e->ref->u.ss.end); if (t == SUCCESS) t = gfc_simplify_expr (e, 0); |