Make CANT_HAPPEN() more obvious for static analysis
authorMarkus Armbruster <armbru@pond.sub.org>
Fri, 15 Jan 2010 19:02:11 +0000 (20:02 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 19 Jan 2010 07:40:18 +0000 (08:40 +0100)
Local analysis can now easily find out what's up.  Before,
whole-program analysis was required.  The Clang Static Analyzer
complained about code that is actually fine.

include/misc.h
src/lib/gen/log.c

index 32817f825fa9866d85fdd49a425c13a6c9c6aad4..8c4095b558c0dd64d1e3b37c6a0120adfa46858e 100644 (file)
  * Return EXPR != 0.
  * Usage: if (CANT_HAPPEN(...)) <recovery code>;
  */
-#define CANT_HAPPEN(expr) ((expr) ? oops(#expr, __FILE__, __LINE__) : 0)
+#define CANT_HAPPEN(expr) ((expr) ? oops(#expr, __FILE__, __LINE__), 1 : 0)
 
 /*
  * Report internal error.
  * Usage: CANT_REACH(); <recovery code>;
  */
-#define CANT_REACH() (void)oops(NULL, __FILE__, __LINE__)
+#define CANT_REACH() oops(NULL, __FILE__, __LINE__)
 
-extern int oops(char *, char *, int);
+extern void oops(char *, char *, int);
 extern void (*oops_handler)(void);
 
 void exit_nomem(void) ATTRIBUTE((noreturn));
index a76b857e385213872cf7d8a67efcb19bd7e48b85..8b205a77c5b742c9bb204c4dd6f8e3179623d260 100644 (file)
@@ -126,16 +126,13 @@ logerror(char *format, ...)
 }
 
 /*
- * Log internal error MSG occured in FILE:LINE.
- * Call oops handler, and if it returns, return 1.
- * Oops handler defaults to abort().
+ * Log internal error MSG occured in FILE:LINE, call oops handler.
  */
-int
+void
 oops(char *msg, char *file, int line)
 {
     logerror("Oops: %s in %s:%d", msg ? msg : "bug", file, line);
     oops_handler();
-    return 1;
 }
 
 /*