Message ID | 20151127132022.137034e4@vepi2 |
---|---|
State | New |
Headers | show |
Le 27/11/2015 13:20, Andre Vehreschild a écrit : > Hi all, > > I have backported the patch for 68218 (multiple calls of the same > function, where only one call is expected and reasonable) to > gcc-5-branch and gcc-4_9-branch. > > Bootstrapped and regtested on x86_64-linux-gnu/f21. > > Ok for gcc-5-branch? > > Ok for gcc-4_9-branch? > Yes for both. Richi said in [1] that a 5.3 release candidate was planned for either today or next monday, so before proceeding, please ping one release manager on IRC to check that your commit won't interfere with the release process. Thanks Mikael [1] https://gcc.gnu.org/ml/gcc/2015-11/msg00186.html
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 9c175b1..3c2c640 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -5030,6 +5030,8 @@ gfc_array_init_size (tree descriptor, int rank, int corank, tree * poffset, gcc_assert (ubound); gfc_conv_expr_type (&se, ubound, gfc_array_index_type); gfc_add_block_to_block (pblock, &se.pre); + if (ubound->expr_type == EXPR_FUNCTION) + se.expr = gfc_evaluate_now (se.expr, pblock); gfc_conv_descriptor_ubound_set (descriptor_block, descriptor, gfc_rank_cst[n], se.expr); diff --git a/gcc/testsuite/gfortran.dg/allocate_with_arrayspec_1.f90 b/gcc/testsuite/gfortran.dg/allocate_with_arrayspec_1.f90 new file mode 100644 index 0000000..686b612 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_with_arrayspec_1.f90 @@ -0,0 +1,29 @@ +! { dg-do run } +! { dg-options "-fdump-tree-original" } + +MODULE mo_test + + integer :: n = 0 +CONTAINS + + FUNCTION nquery() + INTEGER :: nquery + WRITE (0,*) "hello!" + n = n + 1 + nquery = n + END FUNCTION nquery + +END MODULE mo_test + + +! ---------------------------------------------------------------------- +! MAIN PROGRAM +! ---------------------------------------------------------------------- +PROGRAM example + USE mo_test + INTEGER, ALLOCATABLE :: query_buf(:) + ALLOCATE(query_buf(nquery())) + if (n /= 1 .or. size(query_buf) /= n) call abort() +END PROGRAM example + +! { dg-final { scan-tree-dump-times "nquery" 5 "original" } }