public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/110548] New: Segfault with optional argument and OpenMP tasks
@ 2023-07-04 15:21 abensonca at gcc dot gnu.org
0 siblings, 0 replies; only message in thread
From: abensonca at gcc dot gnu.org @ 2023-07-04 15:21 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110548
Bug ID: 110548
Summary: Segfault with optional argument and OpenMP tasks
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: abensonca at gcc dot gnu.org
Target Milestone: ---
The following shows a segfault at run time resulting from use of an optional
argument in a function with OpenMP tasks:
module taskerMod
type :: helper
end type helper
type :: tasker
integer :: depth=-1
contains
final :: taskerDestruct
procedure :: compute => taskerCompute
end type tasker
contains
subroutine taskerDestruct(self)
!$ use :: OMP_Lib
implicit none
type(tasker), intent(inout) :: self
write (0,*) "DESTRUCT FROM DEPTH ",self%depth !$ ," :
",omp_get_thread_num()
return
end subroutine taskerDestruct
recursive subroutine taskerCompute(self,helper_)
!$ use :: OMP_Lib
implicit none
class(tasker), intent(inout) :: self
class(helper), intent(inout), optional :: helper_
!$omp atomic
self%depth=self%depth+1
write (0,*) "DEPTH ",self%depth !$ ," : ",omp_get_thread_num()
if (self%depth < 3) then
!$omp task untied
call self%compute(helper_)
!$omp end task
end if
return
end subroutine taskerCompute
end module taskerMod
program testTasks
use :: taskerMod
implicit none
type(tasker) :: tasker_
type(helper) :: helper_
tasker_=tasker(0)
!$omp parallel
!$omp single
!$omp taskgroup
!$omp task untied
call tasker_%compute()
!$omp end task
!$omp end taskgroup
!$omp end single
!$omp end parallel
end program testTasks
$ gfortran test1.F90 -fopenmp
$ ./a.out
DESTRUCT FROM DEPTH -1
DEPTH 1
Program received signal SIGSEGV: Segmentation fault - invalid memory
reference.
Backtrace for this error:
#0 0x2ac99289a1ef in ???
#1 0x401840 in ???
#2 0x2ac9925a9606 in GOMP_task
at ../../../gcc-git/libgomp/task.c:644
#3 0x401588 in ???
#4 0x40197b in ???
#5 0x2ac9925a77a4 in gomp_barrier_handle_tasks
at ../../../gcc-git/libgomp/task.c:1650
#6 0x2ac9925b058f in gomp_team_barrier_wait_end
at ../../../gcc-git/libgomp/config/linux/bar.c:116
#7 0x2ac9925aeffc in gomp_team_end
at ../../../gcc-git/libgomp/team.c:956
#8 0x401692 in ???
#9 0x4016cd in ???
#10 0x2ac992886d0c in ???
#11 0x401128 in ???
Segmentation fault
This appears to be due to the optional argument, helper_. If it is present in
the initial call, i.e.:
call tasker_%compute(helper_)
then this runs without a segfault.
This happens with versions 12.0.0, 13.0.1, and the current HEAD of the GCC git
repo.
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-07-04 15:21 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-04 15:21 [Bug fortran/110548] New: Segfault with optional argument and OpenMP tasks abensonca at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).