Hi all, unfortunately triggered this patch a regression in the opencoarray's testsuite, which also occurs outside of opencoarray, when a caf-function is used in a block in the main-program. This patch fixes the error and adds a testcase.
Bootstrapped and regtested ok on x86_64-linux/f25. Ok for trunk? Regards, Andre On Wed, 18 Jan 2017 19:35:59 +0100 Andre Vehreschild <ve...@gmx.de> wrote: > Hi Jerry, > > thanks for the fast review. Committed as r244587. > > Regards, > Andre > > On Wed, 18 Jan 2017 09:38:40 -0800 > Jerry DeLisle <jvdeli...@charter.net> wrote: > > > On 01/18/2017 04:26 AM, Andre Vehreschild wrote: > > > Hi all, > > > > > > the patch I proposed for this pr unfortunately did not catch all errors. > > > Dominique figured, that the original testcase was not resolved (thanks for > > > that). > > > > > > This patch resolves the linker problem by putting the static token into > > > the parent function's decl list. Furthermore does the patch beautify the > > > retrieval of the symbol in gfc_get_tree_for_caf_expr () and remove the > > > following assert which is unnecessary then, because the symbol is either > > > already present or created. And gfc_get_symbol_decl () can not return > > > NULL. > > > > > > Bootstrapped and regtested ok on x86_64-linux/f25 and x86-linux/f25 for > > > trunk. Bootstrapped and regtested ok on x86_64-linux/f25 for gcc-6 > > > (x86-linux has not been tested, because the VM is not that fast). > > > > > > Ok for trunk and gcc-6? > > > > > > Regards, > > > Andre > > > > > > > This one is OK, thanks. > > > > Jerry > > -- Andre Vehreschild * Email: vehre ad gmx dot de
gcc/fortran/ChangeLog: 2017-01-19 Andre Vehreschild <ve...@gcc.gnu.org> PR fortran/70696 * trans-decl.c (gfc_build_qualified_array): Add static decl to parent function only, when the decl-context is not the translation unit. gcc/testsuite/ChangeLog: 2017-01-19 Andre Vehreschild <ve...@gcc.gnu.org> * gfortran.dg/coarray_43.f90: New test.
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 51c23e8..5d246cd 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -971,7 +971,9 @@ gfc_build_qualified_array (tree decl, gfc_symbol * sym) DECL_CONTEXT (token) = sym->ns->proc_name->backend_decl; gfc_module_add_decl (cur_module, token); } - else if (sym->attr.host_assoc) + else if (sym->attr.host_assoc + && TREE_CODE (DECL_CONTEXT (current_function_decl)) + != TRANSLATION_UNIT_DECL) gfc_add_decl_to_parent_function (token); else gfc_add_decl_to_function (token); diff --git a/gcc/testsuite/gfortran.dg/coarray_43.f90 b/gcc/testsuite/gfortran.dg/coarray_43.f90 new file mode 100644 index 0000000..d5ee4e1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_43.f90 @@ -0,0 +1,13 @@ +! { dg-do link } +! { dg-options "-fcoarray=lib -lcaf_single" } + +program coarray_43 + implicit none + integer, parameter :: STR_LEN = 50 + character(len=STR_LEN) :: str[*] + integer :: pos + write(str,"(2(a,i2))") "Greetings from image ",this_image()," of ",num_images() + block + pos = scan(str[5], set="123456789") + end block +end program