mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-16 06:12:25 -08:00
In the Windows handler for floating point exceptions, exceptions must be cleared up so as to prevent an infinite loop.
This commit is contained in:
parent
2e19301f48
commit
00b5c5cc00
1 changed files with 7 additions and 0 deletions
|
|
@ -1058,25 +1058,32 @@ _ecl_w32_exception_filter(struct _EXCEPTION_POINTERS* ep)
|
|||
}
|
||||
/* Catch all arithmetic exceptions */
|
||||
case EXCEPTION_INT_DIVIDE_BY_ZERO:
|
||||
feclearexcept(FE_ALL_EXCEPT);
|
||||
handle_signal_now(@'division-by-zero', the_env->own_process);
|
||||
return EXCEPTION_CONTINUE_EXECUTION;
|
||||
case EXCEPTION_INT_OVERFLOW:
|
||||
feclearexcept(FE_ALL_EXCEPT);
|
||||
handle_signal_now(@'arithmetic-error', the_env->own_process);
|
||||
return EXCEPTION_CONTINUE_EXECUTION;
|
||||
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
|
||||
feclearexcept(FE_ALL_EXCEPT);
|
||||
handle_signal_now(@'floating-point-overflow', the_env->own_process);
|
||||
return EXCEPTION_CONTINUE_EXECUTION;
|
||||
case EXCEPTION_FLT_OVERFLOW:
|
||||
feclearexcept(FE_ALL_EXCEPT);
|
||||
handle_signal_now(@'floating-point-overflow', the_env->own_process);
|
||||
return EXCEPTION_CONTINUE_EXECUTION;
|
||||
case EXCEPTION_FLT_UNDERFLOW:
|
||||
feclearexcept(FE_ALL_EXCEPT);
|
||||
handle_signal_now(@'floating-point-underflow', the_env->own_process);
|
||||
return EXCEPTION_CONTINUE_EXECUTION;
|
||||
case EXCEPTION_FLT_INEXACT_RESULT:
|
||||
feclearexcept(FE_ALL_EXCEPT);
|
||||
handle_signal_now(@'floating-point-inexact', the_env->own_process);
|
||||
return EXCEPTION_CONTINUE_EXECUTION;
|
||||
case EXCEPTION_FLT_DENORMAL_OPERAND:
|
||||
case EXCEPTION_FLT_INVALID_OPERATION:
|
||||
feclearexcept(FE_ALL_EXCEPT);
|
||||
handle_signal_now(@'floating-point-invalid-operation', the_env->own_process);
|
||||
return EXCEPTION_CONTINUE_EXECUTION;
|
||||
case EXCEPTION_FLT_STACK_CHECK:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue