diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-02-10 16:10:53 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-02-10 16:10:53 +0100 |
commit | 45406a12e9b888ad287fd56f279591718ac2ac2b (patch) | |
tree | 788968a7abefcd803a6440b4971fa24d31ee8749 /gcc | |
parent | 92e8e53a31939ed5c4697c5e0a0b16af4a357bc3 (diff) | |
download | gcc-45406a12e9b888ad287fd56f279591718ac2ac2b.zip gcc-45406a12e9b888ad287fd56f279591718ac2ac2b.tar.gz gcc-45406a12e9b888ad287fd56f279591718ac2ac2b.tar.bz2 |
re PR fortran/42309 (Problem with a pointer array passed to a subroutine)
PR fortran/42309
* trans-expr.c (gfc_conv_subref_array_arg): Avoid accessing
info->dimen after info has been freed.
From-SVN: r156659
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a2a3c8b..0e562a8 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2010-02-10 Jakub Jelinek <jakub@redhat.com> + + PR fortran/42309 + * trans-expr.c (gfc_conv_subref_array_arg): Avoid accessing + info->dimen after info has been freed. + 2010-02-09 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/42999 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 4a70e73..5c3aa85 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2311,6 +2311,7 @@ gfc_conv_subref_array_arg (gfc_se * parmse, gfc_expr * expr, int g77, tree size; stmtblock_t body; int n; + int dimen; gcc_assert (expr->expr_type == EXPR_VARIABLE); @@ -2439,9 +2440,10 @@ gfc_conv_subref_array_arg (gfc_se * parmse, gfc_expr * expr, int g77, outside the innermost loop, so the overall transfer could be optimized further. */ info = &rse.ss->data.info; + dimen = info->dimen; tmp_index = gfc_index_zero_node; - for (n = info->dimen - 1; n > 0; n--) + for (n = dimen - 1; n > 0; n--) { tree tmp_str; tmp = rse.loop->loopvar[n]; @@ -2508,7 +2510,7 @@ gfc_conv_subref_array_arg (gfc_se * parmse, gfc_expr * expr, int g77, { size = gfc_index_one_node; offset = gfc_index_zero_node; - for (n = 0; n < info->dimen; n++) + for (n = 0; n < dimen; n++) { tmp = gfc_conv_descriptor_ubound_get (parmse->expr, gfc_rank_cst[n]); |