Add conditional support for noreturn functions.

This adds support for tagging functions with the noreturn attribute.
If DO_CRASH is enabled then ast_do_crash never returns.  If AST_DEVMODE
and DO_CRASH are enabled then failed assertions never return.  This can
resolve a large number of false positives with static analyzers.

ASTERISK-26220 #close

Change-Id: Icfb61e5fe54574eced4c3e88b317244f467ec753
This commit is contained in:
Corey Farrell
2016-07-18 23:46:19 -04:00
parent 5f24874ebb
commit 7fdf7c3d4c
6 changed files with 92 additions and 9 deletions

View File

@@ -2425,7 +2425,7 @@ char *ast_utils_which(const char *binary, char *fullpath, size_t fullpath_size)
return NULL;
}
void ast_do_crash(void)
void DO_CRASH_NORETURN ast_do_crash(void)
{
#if defined(DO_CRASH)
abort();
@@ -2438,7 +2438,7 @@ void ast_do_crash(void)
}
#if defined(AST_DEVMODE)
void __ast_assert_failed(int condition, const char *condition_str, const char *file, int line, const char *function)
void DO_CRASH_NORETURN __ast_assert_failed(int condition, const char *condition_str, const char *file, int line, const char *function)
{
/*
* Attempt to put it into the logger, but hope that at least