diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2017-12-01 07:35:50 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2017-12-01 07:35:50 +0000 |
commit | 852f7e6f4aa2b27986de5a522cd6638f0f1a74e7 (patch) | |
tree | cd17650e8248d6394a7af37dfe980793a34205ad /gcc/fortran | |
parent | 663c725aa25da254c55873810c801526ae1af836 (diff) | |
download | gcc-852f7e6f4aa2b27986de5a522cd6638f0f1a74e7.zip gcc-852f7e6f4aa2b27986de5a522cd6638f0f1a74e7.tar.gz gcc-852f7e6f4aa2b27986de5a522cd6638f0f1a74e7.tar.bz2 |
re PR fortran/83224 (creating character array from elements shorter than declared does not pad with whitespace properly and aborts)
2017-12-01 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/83224
* frontend-passes.c (realloc_string_callback): Handle
case for which the RHS is an array expression.
2017-12-01 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/83224
* gfortran.dg/dependency_50.f90: New test.
From-SVN: r255294
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/frontend-passes.c | 7 |
2 files changed, 10 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fc97158..e6c0480 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2017-12-01 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/83224 + * frontend-passes.c (realloc_string_callback): Handle + case for which the RHS is an array expression. + 2017-11-28 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/53796 diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c index b3db18a..80d8767 100644 --- a/gcc/fortran/frontend-passes.c +++ b/gcc/fortran/frontend-passes.c @@ -249,7 +249,7 @@ realloc_string_callback (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, return 0; expr1 = co->expr1; - if (expr1->ts.type != BT_CHARACTER || expr1->rank != 0 + if (expr1->ts.type != BT_CHARACTER || !gfc_expr_attr(expr1).allocatable || !expr1->ts.deferred) return 0; @@ -270,8 +270,9 @@ realloc_string_callback (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, if (!found_substr) return 0; } - else if (expr2->expr_type != EXPR_OP - || expr2->value.op.op != INTRINSIC_CONCAT) + else if (expr2->expr_type != EXPR_ARRAY + && (expr2->expr_type != EXPR_OP + || expr2->value.op.op != INTRINSIC_CONCAT)) return 0; if (!gfc_check_dependency (expr1, expr2, true)) |