diff options
author | Anthony Ramine <[email protected]> | 2013-10-14 23:38:27 +0200 |
---|---|---|
committer | Henrik Nord <[email protected]> | 2013-12-02 15:20:49 +0100 |
commit | 2567dfefa9426c61cdbea3c984e6c7e7d6dad1ea (patch) | |
tree | d89823826f2b9953f4b59d0edd541e84147a942a /erts/emulator | |
parent | ce785835f3fcbab8b6c07e2415b5f636d181c28d (diff) | |
download | otp-2567dfefa9426c61cdbea3c984e6c7e7d6dad1ea.tar.gz otp-2567dfefa9426c61cdbea3c984e6c7e7d6dad1ea.tar.bz2 otp-2567dfefa9426c61cdbea3c984e6c7e7d6dad1ea.zip |
Properly mark erl_assert_error as non-returning
Diffstat (limited to 'erts/emulator')
-rw-r--r-- | erts/emulator/beam/sys.h | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h index d22f125945..31252ed78f 100644 --- a/erts/emulator/beam/sys.h +++ b/erts/emulator/beam/sys.h @@ -149,9 +149,28 @@ typedef ERTS_SYS_FD_TYPE ErtsSysFdType; # define ERTS_EXIT_AFTER_DUMP exit #endif +/* In VC++, noreturn is a declspec that has to be before the types, + * but in GNUC it is an att ribute to be placed between return type + * and function name, hence __decl_noreturn <types> __noreturn <function name> + */ +#if __GNUC__ +# define __decl_noreturn +# define __noreturn __attribute__((noreturn)) +#else +# if defined(__WIN32__) && defined(_MSC_VER) +# define __noreturn +# define __decl_noreturn __declspec(noreturn) +# else +# define __noreturn +# define __decl_noreturn +# endif +#endif + #define ERTS_ASSERT(e) \ ((void) ((e) ? 1 : (erl_assert_error(#e, __func__, __FILE__, __LINE__), 0))) -void erl_assert_error(const char* expr, const char *func, const char* file, int line); + +__decl_noreturn void __noreturn erl_assert_error(const char* expr, const char *func, + const char* file, int line); #ifdef DEBUG # define ASSERT(e) ERTS_ASSERT(e) @@ -192,23 +211,6 @@ void erl_assert_error(const char* expr, const char *func, const char* file, int # define erts_align_attribute(SZ) #endif -/* In VC++, noreturn is a declspec that has to be before the types, - * but in GNUC it is an att ribute to be placed between return type - * and function name, hence __decl_noreturn <types> __noreturn <function name> - */ -#if __GNUC__ -# define __decl_noreturn -# define __noreturn __attribute__((noreturn)) -#else -# if defined(__WIN32__) && defined(_MSC_VER) -# define __noreturn -# define __decl_noreturn __declspec(noreturn) -# else -# define __noreturn -# define __decl_noreturn -# endif -#endif - /* ** Data types: ** |