Re: [patch] fortran/intrinsic.texi: Add 'passed by value' to signal handler
Hi, On Mon, Oct 16, 2023 at 07:11:46PM +0200, Tobias Burnus wrote: > Yesterday, someone was confused because the signal handler did not work. > > It turned out that the created Fortran procedure used as handler used > pass by reference - and 'signal' passed the it by value. Many thanks! Indeed, it was not clear that the argument is passed by value (although, I could guess that as signal() is modeled on a C function of the same name...) -- Stanislav Maslovski
[patch] fortran/intrinsic.texi: Improve SIGNAL intrinsic entry (was: [patch] fortran/intrinsic.texi: Add 'passed by value' to signal handler)
Hi Harald, On 16.10.23 20:31, Harald Anlauf wrote: Hi Tobias, Am 16.10.23 um 19:11 schrieb Tobias Burnus: OK for mainline? I think the patch qualifies as obvious. While at it, you might consider removing the comment a few lines below the place you are changing, @c TODO: What should the interface of the handler be? Does it take arguments? and enhance the given example by e.g.: Updated version attached – I will commit it later today, unless anyone has follow-up suggestions before. Thanks for the suggestions, Tobias - Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 fortran/intrinsic.texi: Improve SIGNAL intrinsic entry gcc/fortran/ChangeLog: * intrinsic.texi (signal): Mention that the argument passed to the signal handler procedure is passed by reference. Extend example. diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index 6c7ad03a02c..fe446fc8a9d 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -13168,10 +13168,10 @@ end program test_sign @table @asis @item @emph{Description}: @code{SIGNAL(NUMBER, HANDLER [, STATUS])} causes external subroutine -@var{HANDLER} to be executed with a single integer argument when signal -@var{NUMBER} occurs. If @var{HANDLER} is an integer, it can be used to -turn off handling of signal @var{NUMBER} or revert to its default -action. See @code{signal(2)}. +@var{HANDLER} to be executed with a single integer argument passed by +value when signal @var{NUMBER} occurs. If @var{HANDLER} is an integer, +it can be used to turn off handling of signal @var{NUMBER} or revert to +its default action. See @code{signal(2)}. If @code{SIGNAL} is called as a subroutine and the @var{STATUS} argument is supplied, it is set to the value returned by @code{signal(2)}. @@ -13197,19 +13197,25 @@ Subroutine, function @item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar integer. It has @code{INTENT(OUT)}. @end multitable -@c TODO: What should the interface of the handler be? Does it take arguments? @item @emph{Return value}: The @code{SIGNAL} function returns the value returned by @code{signal(2)}. @item @emph{Example}: @smallexample +module m_handler +contains + ! POSIX.1-2017: void (*func)(int) + subroutine handler_print(signum) bind(C) +use iso_c_binding, only: c_int +integer(c_int), value :: signum +print *, 'handler_print invoked with signum =', signum + end subroutine +end module program test_signal - intrinsic signal - external handler_print - - call signal (12, handler_print) - call signal (10, 1) + use m_handler + call signal (12, handler_print) ! 12 = SIGUSR3 (on some systems) + call signal (10, 1) ! 10 = SIGUSR1 and 1 = SIG_IGN (on some systems) call sleep (30) end program test_signal
Re: [patch] fortran/intrinsic.texi: Add 'passed by value' to signal handler
On Mon, Oct 16, 2023 at 08:31:20PM +0200, Harald Anlauf wrote: > > Am 16.10.23 um 19:11 schrieb Tobias Burnus: > > Yesterday, someone was confused because the signal handler did not work. > > > > It turned out that the created Fortran procedure used as handler used > > pass by reference - and 'signal' passed the it by value. > > > > This patch adds the 'passed by value' to the wording: > > > > "@var{HANDLER} to be executed with a single integer argument passed by > > value" > > > > OK for mainline? > > I think the patch qualifies as obvious. > > While at it, you might consider removing the comment a few lines below > the place you are changing, > > @c TODO: What should the interface of the handler be? Does it take > arguments? > > and enhance the given example by e.g.: > > subroutine handler_print (signal_number) > integer, value :: signal_number > print *, "In handler_print: received signal number", signal_number > end subroutine handler_print > Good suggestion, Harald. I was composing a similar email when I saw yours pop into by inbox. -- Steve
Re: [patch] fortran/intrinsic.texi: Add 'passed by value' to signal handler
Hi Tobias, Am 16.10.23 um 19:11 schrieb Tobias Burnus: Yesterday, someone was confused because the signal handler did not work. It turned out that the created Fortran procedure used as handler used pass by reference - and 'signal' passed the it by value. This patch adds the 'passed by value' to the wording: "@var{HANDLER} to be executed with a single integer argument passed by value" OK for mainline? I think the patch qualifies as obvious. While at it, you might consider removing the comment a few lines below the place you are changing, @c TODO: What should the interface of the handler be? Does it take arguments? and enhance the given example by e.g.: subroutine handler_print (signal_number) integer, value :: signal_number print *, "In handler_print: received signal number", signal_number end subroutine handler_print Thanks, Harald Tobias - Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
[patch] fortran/intrinsic.texi: Add 'passed by value' to signal handler
Yesterday, someone was confused because the signal handler did not work. It turned out that the created Fortran procedure used as handler used pass by reference - and 'signal' passed the it by value. This patch adds the 'passed by value' to the wording: "@var{HANDLER} to be executed with a single integer argument passed by value" OK for mainline? Tobias - Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 fortran/intrinsic.texi: Add 'passed by value' to signal handler gcc/fortran/ChangeLog: * intrinsic.texi (signal): Mention that the argument passed to the signal handler procedure is passed by reference. diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index 6c7ad03a02c..3620209e00a 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -13168,10 +13168,10 @@ end program test_sign @table @asis @item @emph{Description}: @code{SIGNAL(NUMBER, HANDLER [, STATUS])} causes external subroutine -@var{HANDLER} to be executed with a single integer argument when signal -@var{NUMBER} occurs. If @var{HANDLER} is an integer, it can be used to -turn off handling of signal @var{NUMBER} or revert to its default -action. See @code{signal(2)}. +@var{HANDLER} to be executed with a single integer argument passed by +value when signal @var{NUMBER} occurs. If @var{HANDLER} is an integer, +it can be used to turn off handling of signal @var{NUMBER} or revert to +its default action. See @code{signal(2)}. If @code{SIGNAL} is called as a subroutine and the @var{STATUS} argument is supplied, it is set to the value returned by @code{signal(2)}.