From db54cc2cede9c1bfe24f15ec07e88299fb7792f6 Mon Sep 17 00:00:00 2001 From: Daniel Franke Date: Thu, 8 Mar 2007 16:49:59 -0500 Subject: [PATCH] backport: re PR fortran/30947 (intrinsic: ALARM) 2007-03-08 Daniel Franke Backport from trunk: PR fortran/30947 * check.c (gfc_check_alarm_sub): Added check for default integer kind of status argument. * iresolve.c (gfc_resolve_alarm_sub): Removed conversion of status argument. * intrinsic.texi (ALARM): Extended documentation. From-SVN: r122717 --- gcc/fortran/ChangeLog | 10 ++++++++++ gcc/fortran/check.c | 3 +++ gcc/fortran/intrinsic.texi | 9 +++++---- gcc/fortran/iresolve.c | 2 -- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f7a6357bc570..75d40dcfddfd 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,13 @@ +2007-03-08 Daniel Franke + + Backport from trunk: + PR fortran/30947 + * check.c (gfc_check_alarm_sub): Added check for default integer + kind of status argument. + * iresolve.c (gfc_resolve_alarm_sub): Removed conversion of + status argument. + * intrinsic.texi (ALARM): Extended documentation. + 2007-03-08 Daniel Franke Backport from trunk: diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index e51fd8218011..1c72d0ee3502 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -2994,6 +2994,9 @@ gfc_check_alarm_sub (gfc_expr * seconds, gfc_expr * handler, gfc_expr * status) if (type_check (status, 2, BT_INTEGER) == FAILURE) return FAILURE; + if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE) + return FAILURE; + return SUCCESS; } diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index b1aa67753978..2375e0098ee0 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -785,7 +785,7 @@ end program test_aint @table @asis @item @emph{Description}: @code{ALARM(SECONDS, HANDLER [, STATUS])} causes external subroutine @var{HANDLER} -to be executed after a delay of @var{SECONDS} by using @code{alarm(1)} to +to be executed after a delay of @var{SECONDS} by using @code{alarm(2)} to set up a signal and @code{signal(2)} to catch it. If @var{STATUS} is supplied, it will be returned with the number of seconds remaining until any previously scheduled alarm was due to be delivered, or zero if there @@ -805,10 +805,11 @@ Subroutine @item @var{SECONDS} @tab The type of the argument shall be a scalar @code{INTEGER}. It is @code{INTENT(IN)}. @item @var{HANDLER} @tab Signal handler (@code{INTEGER FUNCTION} or -@code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar. -@code{INTEGER}. It is @code{INTENT(IN)}. +@code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar. The scalar +values may be either @code{SIG_IGN=1} to ignore the alarm generated +or @code{SIG_DFL=0} to set the default action. It is @code{INTENT(IN)}. @item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar -@code{INTEGER} variable. It is @code{INTENT(OUT)}. +variable of the default @code{INTEGER} kind. It is @code{INTENT(OUT)}. @end multitable @item @emph{Example}: diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index c702294fc820..8557a863f77a 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -2414,8 +2414,6 @@ gfc_resolve_alarm_sub (gfc_code * c) if (seconds->ts.kind != gfc_c_int_kind) gfc_convert_type (seconds, &ts, 2); - if (status != NULL && status->ts.kind != gfc_c_int_kind) - gfc_convert_type (status, &ts, 2); c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); }