Cache cleared exceptions to prevent SIGFPE loop on trap.
authorTaylor R Campbell <campbell@mumble.net>
Mon, 26 Aug 2019 02:59:12 +0000 (02:59 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Mon, 26 Aug 2019 03:22:44 +0000 (03:22 +0000)
fesetenv, as used by fixup_float_environment at the top of Interpret,
will trap any trapped and raised exceptions in the floating-point
environment it is restoring, which is bad news during a trap.

Not really sure how this managed to work in the past...

src/microcode/floenv.c

index 2672996d3c10b8c890baf3d23a497327524b9c04..59e6198235b526de8d3a2d63e8af5384b3cceecf 100644 (file)
@@ -90,6 +90,7 @@ clear_float_exceptions (void)
 {
 #ifdef HAVE_FECLEAREXCEPT
   (void) feclearexcept (FE_ALL_EXCEPT);
+  cache_float_environment ();
 #endif
 }