Hi!
On 2025-01-10T13:33:25+0100, Tobias Burnus <[email protected]> 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 <[email protected]>
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