Raymond Toy pushed to branch master
at cmucl / cmucl
Commits:
-
0fc0061b
by Raymond Toy
at 2015-12-27T10:16:45Z
Disable FP traps when printing arithmetic-error messages
Printing of FP numbers can signal some traps like overflow, underflow,
inexact, or denormalized-operand, so we need to disable these traps
when printing out the error message for arithmetic errors.
1 changed file:
Changes:
src/code/error.lisp
--- a/src/code/error.lisp
+++ b/src/code/error.lisp
@@ -1138,9 +1138,14 @@
(format stream (intl:gettext "Arithmetic error ~S signalled.")
(type-of condition))
(when (arithmetic-error-operation condition)
- (format stream (intl:gettext "~%Operation was ~S, operands ~S.")
- (arithmetic-error-operation condition)
- (arithmetic-error-operands condition))))))
+ ;; Printing the operands can signal these FP traps, so
+ ;; disable them while we're printing out the error
+ ;; message.
+ (with-float-traps-masked (:overflow :underflow :inexact
+ #+x86 :denormalized-operand)
+ (format stream (intl:gettext "~%Operation was ~S, operands ~S.")
+ (arithmetic-error-operation condition)
+ (arithmetic-error-operands condition)))))))
(define-condition division-by-zero (arithmetic-error) ())
(define-condition floating-point-overflow (arithmetic-error) ())