diff options
author | Harald Anlauf <anlauf@gmx.de> | 2023-10-06 22:21:56 +0200 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2023-10-13 18:54:53 +0200 |
commit | 458c253ccdae9df439b9a452d04e325101e5756e (patch) | |
tree | a721aa9b8acf1858213b9d021a969be23ee28e81 /gcc | |
parent | 8be20f3b0bded7f9b690b27cbee58b283dbe827b (diff) | |
download | gcc-458c253ccdae9df439b9a452d04e325101e5756e.zip gcc-458c253ccdae9df439b9a452d04e325101e5756e.tar.gz gcc-458c253ccdae9df439b9a452d04e325101e5756e.tar.bz2 |
fortran: fix handling of options -ffpe-trap and -ffpe-summary [PR110957]
gcc/fortran/ChangeLog:
PR fortran/110957
* invoke.texi: Update documentation to reflect '-ffpe-trap=none'.
* options.cc (gfc_handle_fpe_option): Fix mixup up of error messages
for options -ffpe-trap and -ffpe-summary. Accept '-ffpe-trap=none'
to clear FPU traps previously set on command line.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/invoke.texi | 6 | ||||
-rw-r--r-- | gcc/fortran/options.cc | 9 |
2 files changed, 10 insertions, 5 deletions
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 38150b1..10387e3 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -1294,7 +1294,8 @@ Specify a list of floating point exception traps to enable. On most systems, if a floating point exception occurs and the trap for that exception is enabled, a SIGFPE signal will be sent and the program being aborted, producing a core file useful for debugging. @var{list} -is a (possibly empty) comma-separated list of the following +is a (possibly empty) comma-separated list of either @samp{none} (to +clear the set of exceptions to be trapped), or of the following exceptions: @samp{invalid} (invalid floating point operation, such as @code{SQRT(-1.0)}), @samp{zero} (division by zero), @samp{overflow} (overflow in a floating point operation), @samp{underflow} (underflow @@ -1314,7 +1315,8 @@ If the option is used more than once in the command line, the lists will be joined: '@code{ffpe-trap=}@var{list1} @code{ffpe-trap=}@var{list2}' is equivalent to @code{ffpe-trap=}@var{list1},@var{list2}. -Note that once enabled an exception cannot be disabled (no negative form). +Note that once enabled an exception cannot be disabled (no negative form), +except by clearing all traps by specifying @samp{none}. Many, if not most, floating point operations incur loss of precision due to rounding, and hence the @code{ffpe-trap=inexact} is likely to diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc index 27311961..2ad2247 100644 --- a/gcc/fortran/options.cc +++ b/gcc/fortran/options.cc @@ -555,9 +555,12 @@ gfc_handle_fpe_option (const char *arg, bool trap) pos++; result = 0; - if (!trap && strncmp ("none", arg, pos) == 0) + if (strncmp ("none", arg, pos) == 0) { - gfc_option.fpe_summary = 0; + if (trap) + gfc_option.fpe = 0; + else + gfc_option.fpe_summary = 0; arg += pos; pos = 0; continue; @@ -586,7 +589,7 @@ gfc_handle_fpe_option (const char *arg, bool trap) break; } } - if (!result && !trap) + if (!result && trap) gfc_fatal_error ("Argument to %<-ffpe-trap%> is not valid: %s", arg); else if (!result) gfc_fatal_error ("Argument to %<-ffpe-summary%> is not valid: %s", arg); |