Index: src/main.cc
===================================================================
--- src/main.cc	(revision 3e274ab398b76521d38b9bbfb1ffa9fba7f35a79)
+++ src/main.cc	(revision 686cb635b121f6f110922fdcb68fbf96df312238)
@@ -10,6 +10,6 @@
 // Created On       : Fri May 15 23:12:02 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Dec 16 17:55:53 2019
-// Update Count     : 627
+// Last Modified On : Sat Feb  8 08:33:50 2020
+// Update Count     : 633
 //
 
@@ -105,7 +105,7 @@
 
 static void backtrace( int start ) {					// skip first N stack frames
-	enum { Frames = 50 };
+	enum { Frames = 50, };								// maximum number of stack frames
 	void * array[Frames];
-	int size = ::backtrace( array, Frames );
+	size_t size = ::backtrace( array, Frames );
 	char ** messages = ::backtrace_symbols( array, size ); // does not demangle names
 
@@ -114,5 +114,5 @@
 
 	// skip last 2 stack frames after main
-	for ( int i = start; i < size - 2 && messages != nullptr; i += 1 ) {
+	for ( unsigned int i = start; i < size - 2 && messages != nullptr; i += 1 ) {
 		char * mangled_name = nullptr, * offset_begin = nullptr, * offset_end = nullptr;
 
@@ -180,4 +180,21 @@
 } // sigSegvBusHandler
 
+static void sigFpeHandler( SIGPARMS ) {
+	const char * msg;
+
+	switch ( sfp->si_code ) {
+	  case FPE_INTDIV: case FPE_FLTDIV: msg = "divide by zero"; break;
+	  case FPE_FLTOVF: msg = "overflow"; break;
+	  case FPE_FLTUND: msg = "underflow"; break;
+	  case FPE_FLTRES: msg = "inexact result"; break;
+	  case FPE_FLTINV: msg = "invalid operation"; break;
+	  default: msg = "unknown";
+	} // choose
+	cerr << "Computation error " << msg << " at location " << sfp->si_addr << endl
+		 << "Possible cause is constant-expression evaluation invalid." << endl;
+	backtrace( 2 );										// skip first 2 stack frames
+	abort();											// cause core dump for debugging
+} // sigFpeHandler
+
 static void sigAbortHandler( SIGPARMS ) {
 	backtrace( 6 );										// skip first 6 stack frames
@@ -193,4 +210,5 @@
 	Signal( SIGSEGV, sigSegvBusHandler, SA_SIGINFO );
 	Signal( SIGBUS, sigSegvBusHandler, SA_SIGINFO );
+	Signal( SIGFPE, sigFpeHandler, SA_SIGINFO );
 	Signal( SIGABRT, sigAbortHandler, SA_SIGINFO );
 
