diff --git a/ghc/runtime/main/Signals.lc b/ghc/runtime/main/Signals.lc
index 858b40703f3b710b31bd104976962af1c389d10c..97fb56b34d94acd935238a1beb8b51c18c57a540 100644
--- a/ghc/runtime/main/Signals.lc
+++ b/ghc/runtime/main/Signals.lc
@@ -163,7 +163,9 @@ install_segv_handler(void)
     /* FreeBSD seems to generate SIGBUS for stack overflows */
     if (signal(SIGBUS, segv_handler) == SIG_ERR)
 	return -1;
-    return ((int) signal(SIGSEGV, segv_handler));
+    if (signal(SIGSEGV, segv_handler) == SIG_ERR)
+	return -1;
+    return 0;
 #else
     return ((int) signal(SIGSEGV, segv_handler) == SIG_ERR);
     /* I think the "== SIG_ERR" is saying "there was no