From aa36e378c679c1c67deab3b68088882b02fbc510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sat, 13 Jun 2015 10:38:28 +0200 Subject: [PATCH] Add cases for unhandled error codes to `barf`. Signed-off-by: Peter Bex --- NEWS | 2 ++ runtime.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/NEWS b/NEWS index ab0a95d..bf07519 100644 --- a/NEWS +++ b/NEWS @@ -45,6 +45,8 @@ - Removed several deprecated and undocumented internal procedures: ##sys#zap-strings, ##sys#round, ##sys#foreign-number-vector-argument, ##sys#check-port-mode, ##sys#check-port* + - SIGBUS, SIGILL and SIGFPE will now cause proper exceptions instead + of panicking (thanks to Joerg Wittenberger). - Module system - Allow functor arguments to be optional, with default implementations. diff --git a/runtime.c b/runtime.c index 8267954..75ca654 100644 --- a/runtime.c +++ b/runtime.c @@ -1753,6 +1753,21 @@ void barf(int code, char *loc, ...) c = 0; break; + case C_FLOATING_POINT_EXCEPTION_ERROR: + msg = C_text("floating point exception"); + c = 0; + break; + + case C_ILLEGAL_INSTRUCTION_ERROR: + msg = C_text("illegal instruction"); + c = 0; + break; + + case C_BUS_ERROR: + msg = C_text("bus error"); + c = 0; + break; + default: panic(C_text("illegal internal error code")); } -- 2.1.4