Hi! On 2025-01-10T13:33:25+0100, Tobias Burnus <tbur...@baylibre.com> wrote: > The first change is a simple, generic Fortran change. > > Without it, external declarations have odd locations > (namely their input_location): > > gcc/testsuite/gfortran.dg/gomp/dispatch-11.f90:67:46: > > 67 | !$omp dispatch interop(obj2, obj1) device(3) > | ^ > note: ‘declare variant’ candidate ‘repl2’ declared here > > > While with the change, i.e. gfc_get_location (&sym->declared_at), > we get: > > gcc/testsuite/gfortran.dg/gomp/dispatch-11.f90:25:5: > > 25 | subroutine base2 (x, y) > | ^~~~~~~~~~~~~~~~ > note: ‘base2’ declared here
> Additionally, this patch adds the 'interop' clause to OpenMP's > 'dispatch' clause. Separate commit? ;-| > Fortran: Fix location_t in gfc_get_extern_function_decl; [...] > > The declaration created by gfc_get_extern_function_decl used input_location > as DECL_SOURCE_LOCATION, which gave rather odd results with 'declared here' > diagnostic. - It is much more useful to use the gfc_symbol's declated_at, > which this commit now dows. > --- a/gcc/fortran/trans-decl.cc > +++ b/gcc/fortran/trans-decl.cc > @@ -2412,7 +2412,7 @@ module_sym: > > type = gfc_get_function_type (sym, actual_args, fnspec); > > - fndecl = build_decl (input_location, > + fndecl = build_decl (gfc_get_location (&sym->declared_at), > FUNCTION_DECL, name, type); > > /* Initialize DECL_EXTERNAL and TREE_PUBLIC before calling decl_attributes; Nice, thanks! > --- > a/gcc/testsuite/gfortran.dg/goacc/routine-external-level-of-parallelism-2.f > +++ > b/gcc/testsuite/gfortran.dg/goacc/routine-external-level-of-parallelism-2.f > @@ -7,6 +7,13 @@ > integer, parameter :: n = 100 > integer :: a(n), i, j > external :: gangr, workerr, vectorr, seqr > +! { dg-bogus "note: routine 'gangr' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-1 } > +! { dg-bogus "note: routine 'gangr_' declared here" "TODO2" { xfail > offloading_enabled } .-2 } > +! { dg-bogus "note: routine 'workerr' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-3 } > +! { dg-bogus "note: routine 'workerr_' declared here" "TODO2" { xfail > offloading_enabled } .-4 } > +! { dg-bogus "note: routine 'vectorr' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-5 } > +! { dg-bogus "note: routine 'vectorr_' declared here" "TODO2" { xfail > offloading_enabled } .-6 } > + > !$acc routine (gangr) gang > !$acc routine (workerr) worker > !$acc routine (vectorr) vector > @@ -22,8 +29,6 @@ > ! { dg-warning "insufficient partitioning available to parallelize loop" "" > { target *-*-* } .-1 } > do j = 1, n > call workerr (a, n) ! { dg-message "optimized: assigned OpenACC > worker vector loop parallelism" } > -! { dg-bogus "note: routine 'workerr' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-1 } > -! { dg-bogus "note: routine 'workerr_' declared here" "TODO2" { xfail > offloading_enabled } .-2 } > end do > end do > !$acc end parallel loop > @@ -36,8 +41,6 @@ > do j = 1, n > call gangr (a, n) ! { dg-message "optimized: assigned OpenACC > worker vector loop parallelism" } > ! { dg-error "routine call uses same OpenACC parallelism as containing loop" > "" { target *-*-* } .-1 } > -! { dg-bogus "note: routine 'gangr' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-2 } > -! { dg-bogus "note: routine 'gangr_' declared here" "TODO2" { xfail > offloading_enabled } .-3 } > end do > end do > !$acc end parallel loop > @@ -162,8 +165,6 @@ > !$acc parallel loop ! { dg-message "optimized: assigned OpenACC gang worker > loop parallelism" } > do i = 1, n > call vectorr (a, n) ! { dg-message "optimized: assigned OpenACC > vector loop parallelism" } > -! { dg-bogus "note: routine 'vectorr' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-1 } > -! { dg-bogus "note: routine 'vectorr_' declared here" "TODO2" { xfail > offloading_enabled } .-2 } > end do > !$acc end parallel loop > > @@ -199,6 +200,13 @@ > integer, parameter :: n = 100 > integer :: a(n), i, j > integer, external :: gangf, workerf, vectorf, seqf > +! { dg-bogus "note: routine 'gangf' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-1 } > +! { dg-bogus "note: routine 'gangf_' declared here" "TODO2" { xfail > offloading_enabled } .-2 } > +! { dg-bogus "note: routine 'workerf' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-3 } > +! { dg-bogus "note: routine 'workerf_' declared here" "TODO2" { xfail > offloading_enabled } .-4 } > +! { dg-bogus "note: routine 'vectorf' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-5 } > +! { dg-bogus "note: routine 'vectorf_' declared here" "TODO2" { xfail > offloading_enabled } .-6 } > + > !$acc routine (gangf) gang > !$acc routine (workerf) worker > !$acc routine (vectorf) vector > @@ -214,8 +222,6 @@ > ! { dg-warning "insufficient partitioning available to parallelize loop" "" > { target *-*-* } .-1 } > do j = 1, n > a(i) = workerf (a, n) ! { dg-message "optimized: assigned > OpenACC worker vector loop parallelism" } > -! { dg-bogus "note: routine 'workerf' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-1 } > -! { dg-bogus "note: routine 'workerf_' declared here" "TODO2" { xfail > offloading_enabled } .-2 } > end do > end do > !$acc end parallel loop > @@ -228,9 +234,7 @@ > do j = 1, n > a(i) = gangf (a, n) ! { dg-message "optimized: assigned OpenACC > worker vector loop parallelism" } > ! { dg-error "routine call uses same OpenACC parallelism as containing loop" > "" { target *-*-* } .-1 } > -! { dg-bogus "note: routine 'gangf' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-2 } > -! { dg-bogus "note: routine 'gangf_' declared here" "TODO2" { xfail > offloading_enabled } .-3 } > - end do > + end do > end do > !$acc end parallel loop > > @@ -354,8 +358,6 @@ > !$acc parallel loop ! { dg-message "optimized: assigned OpenACC gang worker > loop parallelism" } > do i = 1, n > a(i) = vectorf (a, n) ! { dg-message "optimized: assigned OpenACC > vector loop parallelism" } > -! { dg-bogus "note: routine 'vectorf' declared here" "TODO1" { xfail { ! > offloading_enabled } } .-1 } > -! { dg-bogus "note: routine 'vectorf_' declared here" "TODO2" { xfail > offloading_enabled } .-2 } > end do > !$acc end parallel loop Pushed to trunk branch commit c0c47fc89ddcc3b1fbb0e5f3040fc52d93ca0be0 "Un-XFAIL 'dg-note's in 'gfortran.dg/goacc/routine-external-level-of-parallelism-2.f'", see attached. Grüße Thomas
>From c0c47fc89ddcc3b1fbb0e5f3040fc52d93ca0be0 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwi...@baylibre.com> Date: Mon, 13 Jan 2025 09:11:19 +0100 Subject: [PATCH] Un-XFAIL 'dg-note's in 'gfortran.dg/goacc/routine-external-level-of-parallelism-2.f' As of the recent commit 65286465b94cba6ee3d59edbc771bef0088ac46e "Fortran: Fix location_t in gfc_get_extern_function_decl; [...]" change: The declaration created by gfc_get_extern_function_decl used input_location as DECL_SOURCE_LOCATION, which gave rather odd results with 'declared here' diagnostic. - It is much more useful to use the gfc_symbol's declated_at, which this commit now does. ..., we're no longer using the 'dg-bogus' location informations, as pointed out for one class of additional notes of 'gfortran.dg/goacc/routine-external-level-of-parallelism-2.f', once added in commit 03eb779141a29f96600cd46904b88a33c4b49a66 "Add 'dg-note', 'dg-lto-note'". Therefore, un-XFAILed 'dg-note's rather than XFAILed 'dg-bogus'es. gcc/testsuite/ * gfortran.dg/goacc/routine-external-level-of-parallelism-2.f: Un-XFAIL 'dg-note's. --- .../routine-external-level-of-parallelism-2.f | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-external-level-of-parallelism-2.f b/gcc/testsuite/gfortran.dg/goacc/routine-external-level-of-parallelism-2.f index 91898b11be5..35f67cbd0b8 100644 --- a/gcc/testsuite/gfortran.dg/goacc/routine-external-level-of-parallelism-2.f +++ b/gcc/testsuite/gfortran.dg/goacc/routine-external-level-of-parallelism-2.f @@ -7,12 +7,13 @@ integer, parameter :: n = 100 integer :: a(n), i, j external :: gangr, workerr, vectorr, seqr -! { dg-bogus "note: routine 'gangr' declared here" "TODO1" { xfail { ! offloading_enabled } } .-1 } -! { dg-bogus "note: routine 'gangr_' declared here" "TODO2" { xfail offloading_enabled } .-2 } -! { dg-bogus "note: routine 'workerr' declared here" "TODO1" { xfail { ! offloading_enabled } } .-3 } -! { dg-bogus "note: routine 'workerr_' declared here" "TODO2" { xfail offloading_enabled } .-4 } -! { dg-bogus "note: routine 'vectorr' declared here" "TODO1" { xfail { ! offloading_enabled } } .-5 } -! { dg-bogus "note: routine 'vectorr_' declared here" "TODO2" { xfail offloading_enabled } .-6 } +! { dg-note "routine 'gangr' declared here" "" { target { ! offloading_enabled } } .-1 } +! { dg-note "routine 'gangr_' declared here" "" { target offloading_enabled } .-2 } +! { dg-note "routine 'workerr' declared here" "" { target { ! offloading_enabled } } .-3 } +! { dg-note "routine 'workerr_' declared here" "" { target offloading_enabled } .-4 } +! { dg-note "routine 'vectorr' declared here" "" { target { ! offloading_enabled } } .-5 } +! { dg-note "routine 'vectorr_' declared here" "" { target offloading_enabled } .-6 } +!TODO See PR101551 for 'offloading_enabled' differences. !$acc routine (gangr) gang !$acc routine (workerr) worker @@ -200,12 +201,13 @@ integer, parameter :: n = 100 integer :: a(n), i, j integer, external :: gangf, workerf, vectorf, seqf -! { dg-bogus "note: routine 'gangf' declared here" "TODO1" { xfail { ! offloading_enabled } } .-1 } -! { dg-bogus "note: routine 'gangf_' declared here" "TODO2" { xfail offloading_enabled } .-2 } -! { dg-bogus "note: routine 'workerf' declared here" "TODO1" { xfail { ! offloading_enabled } } .-3 } -! { dg-bogus "note: routine 'workerf_' declared here" "TODO2" { xfail offloading_enabled } .-4 } -! { dg-bogus "note: routine 'vectorf' declared here" "TODO1" { xfail { ! offloading_enabled } } .-5 } -! { dg-bogus "note: routine 'vectorf_' declared here" "TODO2" { xfail offloading_enabled } .-6 } +! { dg-note "routine 'gangf' declared here" "" { target { ! offloading_enabled } } .-1 } +! { dg-note "routine 'gangf_' declared here" "" { target offloading_enabled } .-2 } +! { dg-note "routine 'workerf' declared here" "" { target { ! offloading_enabled } } .-3 } +! { dg-note "routine 'workerf_' declared here" "" { target offloading_enabled } .-4 } +! { dg-note "routine 'vectorf' declared here" "" { target { ! offloading_enabled } } .-5 } +! { dg-note "routine 'vectorf_' declared here" "" { target offloading_enabled } .-6 } +!TODO See PR101551 for 'offloading_enabled' differences. !$acc routine (gangf) gang !$acc routine (workerf) worker -- 2.34.1