From a3f325bbeaebbd646075724c84e8c119abe162f3 Mon Sep 17 00:00:00 2001 From: Paulo Matos Date: Fri, 21 Jun 2019 14:24:22 -0600 Subject: [PATCH] mark functions that never return as `NORETURN` original commit: 6377313ecb063273b573139c9e91de263e191e60 --- c/externs.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/c/externs.h b/c/externs.h index 10c0442cef..42ef835c3b 100644 --- a/c/externs.h +++ b/c/externs.h @@ -45,6 +45,16 @@ off64_t lseek64(int,off64_t,int); #include #endif +#if !defined(NORETURN) +# if defined(__GNUC__) || defined(__clang__) +# define NORETURN __attribute__((noreturn)) +# elif defined(_MSC_VER) +# define NORETURN __declspec(noreturn) +# else +# define NORETURN +# endif /* defined(__GNUC__) || defined(__clang__) */ +#endif /* !defined(NORETURN) */ + /* external procedure declarations */ /* prototypes gen. by ProtoGen Version 0.31 (Haydn Huntley) 1/18/93 */ @@ -305,13 +315,13 @@ extern void S_handle_overflood PROTO((void)); extern void S_handle_apply_overflood PROTO((void)); extern void S_overflow PROTO((ptr tc, iptr frame_request)); extern void S_error_reset PROTO((const char *s)); -extern void S_error_abort PROTO((const char *s)); -extern void S_abnormal_exit PROTO((void)); +extern NORETURN void S_error_abort PROTO((const char *s)); +extern NORETURN void S_abnormal_exit PROTO((void)); extern void S_error PROTO((const char *who, const char *s)); extern void S_error1 PROTO((const char *who, const char *s, ptr x)); extern void S_error2 PROTO((const char *who, const char *s, ptr x, ptr y)); extern void S_error3 PROTO((const char *who, const char *s, ptr x, ptr y, ptr z)); -extern void S_boot_error PROTO((const ptr who, ptr s, ptr args)); +extern NORETURN void S_boot_error PROTO((const ptr who, ptr s, ptr args)); extern void S_handle_docall_error PROTO((void)); extern void S_handle_arg_error PROTO((void)); extern void S_handle_nonprocedure_symbol PROTO((void));