Make CANT_HAPPEN() more obvious for static analysis
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.
This commit is contained in:
parent
ad80846283
commit
9061ae7b9d
2 changed files with 5 additions and 8 deletions
|
@ -70,15 +70,15 @@
|
|||
* 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));
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue