Message ID | 54A680CA.90509@net-b.de |
---|---|
State | New |
Headers | show |
> As found by Alessandro: Statically allocated coarrays in declared in the specification part of a module didn't work (link-time failure). The reason was that the associated coarray token was wrongly mangled and not a public tree. > > I additionally propagated the dg-compile-aux-modules support to caf.dg (currently unused). OK. It’s probably best to commit the two parts as separate commits, though. FX
On Jan 2, 2015, at 3:28 AM, Tobias Burnus <burnus@net-b.de> wrote: > As found by Alessandro: Statically allocated coarrays in declared in the specification part of a module didn't work (link-time failure). The reason was that the associated coarray token was wrongly mangled and not a public tree. > > I additionally propagated the dg-compile-aux-modules support to caf.dg (currently unused). > OK for the trunk? So, I usually let the fortran people review and comment on things like this. They do a great job and seems pretty straight forward. I looked at it and didn’t see anything that was objectionable to me. Seems usual and customary.
Hi! On Fri, 02 Jan 2015 12:28:10 +0100, Tobias Burnus <burnus@net-b.de> wrote: > [...] > > I additionally propagated the dg-compile-aux-modules support to caf.dg That got committed in r219143: > --- a/gcc/testsuite/gfortran.dg/coarray/caf.exp > +++ b/gcc/testsuite/gfortran.dg/coarray/caf.exp > @@ -43,6 +43,21 @@ global DG_TORTURE_OPTIONS torture_with_loops > torture-init > set-torture-options $DG_TORTURE_OPTIONS > > +global gfortran_test_path > +global gfortran_aux_module_flags > +set gfortran_test_path $srcdir/$subdir > +set gfortran_aux_module_flags $DEFAULT_FFLAGS > +proc dg-compile-aux-modules { args } { > + global gfortran_test_path > + global gfortran_aux_module_flags > + if { [llength $args] != 2 } { > + error "dg-set-target-env-var: needs one argument" > + return > + } > + dg-test $gfortran_test_path/[lindex $args 1] "" $gfortran_aux_module_flags > + # cleanup-modules isn't intentionally invoked here. > +} I just noticed that this copy is missing Jakub's r215293 changes that he had applied a few months *earlier* to the master copy of 'dg-compile-aux-modules', in 'gcc/testsuite/gfortran.dg/dg.exp', see attached, and/or <http://mid.mail-archive.com/20140916093700.GW17454@tucnak.redhat.com>. I can't easily test it with the affected DejaGnu version 1.4.4 (which is still the minimum version required now), but it tests fine with DejaGnu 1.5, and seems straight-forward, so I propose I commit "as obvious" these changes to the 'gcc/testsuite/gfortran.dg/coarray/caf.exp' copy, too? (It's exactly these changes missing to make the two copies identical.) The other copy, created later, in 'gcc/testsuite/gcc.target/powerpc/ppc-fortran/ppc-fortran.exp' already does exactly match the master copy. And then, of course, we really should unify all 'dg-compile-aux-modules' copies into one shared file. (But it's not completely straight-forward, because of the handling of 'gfortran_test_path', and 'gfortran_aux_module_flags'.) Grüße Thomas From 6278a9a2afb7d4d730c585f93d2bd435ed63f963 Mon Sep 17 00:00:00 2001 From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Tue, 16 Sep 2014 09:35:00 +0000 Subject: [PATCH] PR fortran/56408 * gfortran.dg/dg.exp (dg-compile-aux-modules): Workaround missing nexted dg-test call support in dejaGNU 1.4.4. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@215293 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gfortran.dg/dg.exp | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fdb706a8d8dd..4d3c96beee2c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-09-16 Jakub Jelinek <jakub@redhat.com> + + PR fortran/56408 + * gfortran.dg/dg.exp (dg-compile-aux-modules): Workaround + missing nexted dg-test call support in dejaGNU 1.4.4. + 2014-09-15 Andi Kleen <ak@linux.intel.com> * gcc.dg/pg-override.c: New test. diff --git a/gcc/testsuite/gfortran.dg/dg.exp b/gcc/testsuite/gfortran.dg/dg.exp index e8c39231db00..6bd69e6c88d0 100644 --- a/gcc/testsuite/gfortran.dg/dg.exp +++ b/gcc/testsuite/gfortran.dg/dg.exp @@ -39,8 +39,18 @@ proc dg-compile-aux-modules { args } { error "dg-set-target-env-var: needs one argument" return } + + set level [info level] + if { [info procs dg-save-unknown] != [list] } { + rename dg-save-unknown dg-save-unknown-level-$level + } + dg-test $gfortran_test_path/[lindex $args 1] "" $gfortran_aux_module_flags - # cleanup-modules isn't intentionally invoked here. + # cleanup-modules is intentionally not invoked here. + + if { [info procs dg-save-unknown-level-$level] != [list] } { + rename dg-save-unknown-level-$level dg-save-unknown + } } # Main loop.
Hi! On Thu, 28 Feb 2019 18:02:32 +0100, Thomas Schwinge <thomas@codesourcery.com> wrote: > On Fri, 02 Jan 2015 12:28:10 +0100, Tobias Burnus <burnus@net-b.de> wrote: > > [...] > > > > I additionally propagated the dg-compile-aux-modules support to caf.dg > > That got committed in r219143: > > > --- a/gcc/testsuite/gfortran.dg/coarray/caf.exp > > +++ b/gcc/testsuite/gfortran.dg/coarray/caf.exp > > @@ -43,6 +43,21 @@ global DG_TORTURE_OPTIONS torture_with_loops > > torture-init > > set-torture-options $DG_TORTURE_OPTIONS > > > > +global gfortran_test_path > > +global gfortran_aux_module_flags > > +set gfortran_test_path $srcdir/$subdir > > +set gfortran_aux_module_flags $DEFAULT_FFLAGS > > +proc dg-compile-aux-modules { args } { > > + global gfortran_test_path > > + global gfortran_aux_module_flags > > + if { [llength $args] != 2 } { > > + error "dg-set-target-env-var: needs one argument" > > + return > > + } > > + dg-test $gfortran_test_path/[lindex $args 1] "" $gfortran_aux_module_flags > > + # cleanup-modules isn't intentionally invoked here. > > +} > > I just noticed that this copy is missing Jakub's r215293 changes that he > had applied a few months *earlier* to the master copy of > 'dg-compile-aux-modules', in 'gcc/testsuite/gfortran.dg/dg.exp', see > attached, and/or > <http://mid.mail-archive.com/20140916093700.GW17454@tucnak.redhat.com>. > I can't easily test it with the affected DejaGnu version 1.4.4 (which is > still the minimum version required now), but it tests fine with DejaGnu > 1.5, and seems straight-forward, so I propose I commit "as obvious" these > changes to the 'gcc/testsuite/gfortran.dg/coarray/caf.exp' copy, too? > (It's exactly these changes missing to make the two copies identical.) For testing GCC with a custom DejaGnu installation, you apparently just have to put its installation directory into 'PATH'. Testing with DejaGnu 1.4.4 (specifically, the 'dejagnu-1.4.4-release' Git tag), one runs into: cannot trap SIGSEGV while executing "trap "send_error \"got a \[trap -name\] signal, $str \\n\"; log_and_exit;" $signal" ("foreach" body line 4) invoked from within "foreach sig "{SIGTERM {terminated}} {SIGINT {interrupted by user}} {SIGQUIT {interrupted by user}} {SIGSEGV {segmentation violation}}" { set sign..." invoked from within "if ![exp_debug] { foreach sig "{SIGTERM {terminated}} \ {SIGINT {interrupted by user}} \ {SIGQUIT {interrupted by user}..." (file "[...]/share/dejagnu/runtest.exp" line 1503) This is an incompatibility with "recent" versions of 'expect'; see <https://bugs.debian.org/301557>, for example, and this is resolved by DejaGnu commit 504776814fa56295c4cff40d78a1be446f851a7c. With that resolved, no problems found -- that is, confirming that 15 years old DejaGnu version 1.4.4 still works fine for GCC testing (in my configuration). I convinced myself that my proposed changes are the right thing to do, and committed "[testsuite, Fortran] Apply DejaGnu 1.4.4 work-around also to 'gfortran.dg/coarray/caf.exp:dg-compile-aux-modules'" to trunk in r269848, to gcc-8-branch in r269849, and to gcc-7-branch in r269850, see attached. > The other copy, created later, in > 'gcc/testsuite/gcc.target/powerpc/ppc-fortran/ppc-fortran.exp' already > does exactly match the master copy. > > > And then, of course, we really should unify all 'dg-compile-aux-modules' > copies into one shared file. (But it's not completely straight-forward, > because of the handling of 'gfortran_test_path', and > 'gfortran_aux_module_flags'.) Grüße Thomas From e78648a61e4e5fc60d400c2d2c89254aee4c0715 Mon Sep 17 00:00:00 2001 From: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Thu, 21 Mar 2019 19:16:29 +0000 Subject: [PATCH] [testsuite, Fortran] Apply DejaGnu 1.4.4 work-around also to 'gfortran.dg/coarray/caf.exp:dg-compile-aux-modules' See trunk r215293. This unifies all 'dg-compile-aux-modules' instances. gcc/testsuite/ PR fortran/56408 * gfortran.dg/coarray/caf.exp (dg-compile-aux-modules): Workaround missing nexted dg-test call support in dejaGNU 1.4.4. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@269848 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gfortran.dg/coarray/caf.exp | 12 +++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 914ba7237033..40446965212e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2019-03-21 Thomas Schwinge <thomas@codesourcery.com> + PR fortran/56408 + * gfortran.dg/coarray/caf.exp (dg-compile-aux-modules): Workaround + missing nexted dg-test call support in dejaGNU 1.4.4. + PR fortran/29383 * gfortran.dg/ieee/ieee.exp (DEFAULT_FFLAGS): Set the same as in other '*.exp' files. diff --git a/gcc/testsuite/gfortran.dg/coarray/caf.exp b/gcc/testsuite/gfortran.dg/coarray/caf.exp index 4c6dba1dc22b..e3204c34779b 100644 --- a/gcc/testsuite/gfortran.dg/coarray/caf.exp +++ b/gcc/testsuite/gfortran.dg/coarray/caf.exp @@ -54,8 +54,18 @@ proc dg-compile-aux-modules { args } { error "dg-set-target-env-var: needs one argument" return } + + set level [info level] + if { [info procs dg-save-unknown] != [list] } { + rename dg-save-unknown dg-save-unknown-level-$level + } + dg-test $gfortran_test_path/[lindex $args 1] "" $gfortran_aux_module_flags - # cleanup-modules isn't intentionally invoked here. + # cleanup-modules is intentionally not invoked here. + + if { [info procs dg-save-unknown-level-$level] != [list] } { + rename dg-save-unknown-level-$level dg-save-unknown + } } # Add -latomic only where supported. Assume built-in support elsewhere.
2015-01-02 Tobias Burnus <burnus@net-b.de> * trans-decl.c (gfc_build_qualified_array): Fix coarray tokens for module coarrays with -fcoarray=lib. 2015-01-02 Tobias Burnus <burnus@net-b.de> * gfortran.dg/coarray/caf.exp (dg-compile-aux-modules): Add. * gfortran.dg/coarray/codimension_2.f90: New. * gfortran.dg/coarray/codimension_2a.f90: New. * gfortran.dg/coarray_35.f90: New. * gfortran.dg/coarray_35a.f90: New. diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 75b84f1..9ef6bfc 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -819,10 +819,22 @@ gfc_build_qualified_array (tree decl, gfc_symbol * sym) && GFC_TYPE_ARRAY_CAF_TOKEN (type) == NULL_TREE) { tree token; + tree token_type = build_qualified_type (pvoid_type_node, + TYPE_QUAL_RESTRICT); + + if (sym->module && (sym->attr.use_assoc + || sym->ns->proc_name->attr.flavor == FL_MODULE)) + { + tree token_name + = get_identifier (gfc_get_string (GFC_PREFIX ("caf_token%s"), + IDENTIFIER_POINTER (gfc_sym_mangled_identifier (sym)))); + token = build_decl (DECL_SOURCE_LOCATION (decl), VAR_DECL, token_name, + token_type); + TREE_PUBLIC (token) = 1; + } + else + token = gfc_create_var_np (token_type, "caf_token"); - token = gfc_create_var_np (build_qualified_type (pvoid_type_node, - TYPE_QUAL_RESTRICT), - "caf_token"); GFC_TYPE_ARRAY_CAF_TOKEN (type) = token; DECL_ARTIFICIAL (token) = 1; TREE_STATIC (token) = 1; diff --git a/gcc/testsuite/gfortran.dg/coarray/caf.exp b/gcc/testsuite/gfortran.dg/coarray/caf.exp index 011b5c9..e4e3798 100644 --- a/gcc/testsuite/gfortran.dg/coarray/caf.exp +++ b/gcc/testsuite/gfortran.dg/coarray/caf.exp @@ -43,6 +43,21 @@ global DG_TORTURE_OPTIONS torture_with_loops torture-init set-torture-options $DG_TORTURE_OPTIONS +global gfortran_test_path +global gfortran_aux_module_flags +set gfortran_test_path $srcdir/$subdir +set gfortran_aux_module_flags $DEFAULT_FFLAGS +proc dg-compile-aux-modules { args } { + global gfortran_test_path + global gfortran_aux_module_flags + if { [llength $args] != 2 } { + error "dg-set-target-env-var: needs one argument" + return + } + dg-test $gfortran_test_path/[lindex $args 1] "" $gfortran_aux_module_flags + # cleanup-modules isn't intentionally invoked here. +} + # Main loop. foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ]] { # If we're only testing specific files and this isn't one of them, skip it. @@ -65,12 +80,14 @@ foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ]] foreach flags $option_list { verbose "Testing $nshort (single), $flags" 1 + set gfortran_aux_module_flags "-fcoarray=single $flags" dg-test $test "-fcoarray=single $flags" "" cleanup-modules "" } foreach flags $option_list { verbose "Testing $nshort (libcaf_single), $flags" 1 + set gfortran_aux_module_flags "-fcoarray=lib $flags -lcaf_single" dg-test $test "-fcoarray=lib $flags -lcaf_single" "" cleanup-modules "" } diff --git a/gcc/testsuite/gfortran.dg/coarray/codimension_2.f90 b/gcc/testsuite/gfortran.dg/coarray/codimension_2.f90 new file mode 100644 index 0000000..b211f9b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray/codimension_2.f90 @@ -0,0 +1,14 @@ +! { dg-do link } +! { dg-additional-sources codimension_2a.f90 } +! +! To be used with codimension_2a.f90 +! Check that the coarray declared in the module is accessible +! by doing a link test +! +! Contributed by Alessandro Fanfarillo. +! +module global_coarrays + implicit none + integer,parameter :: n=10 + integer :: b(10)[*] +end module global_coarrays diff --git a/gcc/testsuite/gfortran.dg/coarray/codimension_2a.f90 b/gcc/testsuite/gfortran.dg/coarray/codimension_2a.f90 new file mode 100644 index 0000000..8eb472c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray/codimension_2a.f90 @@ -0,0 +1,26 @@ +! { dg-do compile { target { ! *-*-* } } } +! SKIP THIS FILE +! +! Used by codimension_2.f90 +! +! Check that the coarray declared in the module is accessible +! by doing a link test +! +! Contributed by Alessandro Fanfarillo. +! +program testmod + use global_coarrays + implicit none + + integer :: me + + me = this_image() + + b = me + + if(me==1) then + b(:) = b(:)[2] + write(*,*) b + end if + +end program testmod diff --git a/gcc/testsuite/gfortran.dg/coarray/collectives_4.f90 b/gcc/testsuite/gfortran.dg/coarray/collectives_4.f90 new file mode 100644 index 0000000..6e7be46 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray/collectives_4.f90 @@ -0,0 +1,24 @@ +! { dg-do run } +! +! CO_REDUCE +! +implicit none (type, external) +intrinsic :: co_reduce +integer :: stat +integer :: i4, i4_2, i + +i4 = 21 * this_image() +i4_2 = 21 +do i = 2, num_images() + i4_2 = i4_2 * 21 * i +end do +call co_reduce(i4, op_i4, stat=stat) +if (stat /= 0) call abort() +if (i4_2 /= i4) call abort() + +contains + pure integer function op_i4(a,b) + integer, value :: a, b + op_i4 = a * b + end function op_i4 +end diff --git a/gcc/testsuite/gfortran.dg/coarray_35.f90 b/gcc/testsuite/gfortran.dg/coarray_35.f90 new file mode 100644 index 0000000..e65f8fe --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_35.f90 @@ -0,0 +1,17 @@ +! { dg-do compile } +! { dg-options "-fcoarray=lib" } +! +! To be used with coarray_35a.f90 +! Check that the coarray declared in the module is accessible +! by checking the assembler name +! +! Contributed by Alessandro Fanfarillo. +! +module global_coarrays + implicit none + integer,parameter :: n=10 + integer :: b(10)[*] +end module global_coarrays + +! Check for the symbol of the coarray token (w/o system-dependend prefix) +! { dg-final { scan-assembler "caf_token__global_coarrays_MOD_b" } } diff --git a/gcc/testsuite/gfortran.dg/coarray_35a.f90 b/gcc/testsuite/gfortran.dg/coarray_35a.f90 new file mode 100644 index 0000000..eeeb289 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_35a.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! { dg-options "-fcoarray=lib" } +! { dg-compile-aux-modules "coarray_35.f90" } +! +! Check that the coarray declared in the module is accessible +! by checking the assembler name +! +! Contributed by Alessandro Fanfarillo. +! +program testmod + use global_coarrays + implicit none + + integer :: me + + me = this_image() + + b = me + + if(me==1) then + b(:) = b(:)[2] + write(*,*) b + end if + +end program testmod + +! Check for the symbol of the coarray token (w/o system-dependend prefix) +! { dg-final { scan-assembler "caf_token__global_coarrays_MOD_b" } }