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

Reply via email to