aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2012-06-24 10:39:14 -0700
committerPaul Eggert2012-06-24 10:39:14 -0700
commit845ca893904e4664063cb5c121b34925386849f7 (patch)
tree6d9798a0d167f9e6bb5a2a6dae21c83ad9eb9a74 /src
parent696056c280e0e4a03e12d8d53f692c015ff19217 (diff)
downloademacs-845ca893904e4664063cb5c121b34925386849f7.tar.gz
emacs-845ca893904e4664063cb5c121b34925386849f7.zip
Switch from NO_RETURN to C11's _Noreturn.
Fixes: debbugs:11750
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog32
-rw-r--r--src/buffer.h2
-rw-r--r--src/data.c3
-rw-r--r--src/eval.c5
-rw-r--r--src/image.c6
-rw-r--r--src/keyboard.c10
-rw-r--r--src/lisp.h60
-rw-r--r--src/lread.c8
-rw-r--r--src/process.c2
-rw-r--r--src/puresize.h2
-rw-r--r--src/search.c3
-rw-r--r--src/sound.c11
-rw-r--r--src/sysdep.c2
-rw-r--r--src/syssignal.h2
-rw-r--r--src/term.c10
-rw-r--r--src/textprop.c3
-rw-r--r--src/undo.c4
-rw-r--r--src/unexmacosx.c4
-rw-r--r--src/xterm.c6
19 files changed, 94 insertions, 81 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 3f799b9d377..9b383b5243c 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -10,6 +10,38 @@
10 10
112012-06-24 Paul Eggert <eggert@cs.ucla.edu> 112012-06-24 Paul Eggert <eggert@cs.ucla.edu>
12 12
13 Switch from NO_RETURN to C11's _Noreturn (Bug#11750).
14 * buffer.h (buffer_slot_type_mismatch):
15 * data.c (arith_error) [!FORWARD_SIGNAL_TO_MAIN_THREAD]:
16 * eval.c (unwind_to_catch):
17 * image.c (my_png_error, my_error_exit):
18 * keyboard.c (quit_throw_to_read_char, user_error)
19 (Fexit_recursive_edit, Fabort_recursive_edit):
20 * lisp.h (die, args_out_of_range, args_out_of_range_3)
21 (wrong_type_argument, buffer_overflow, __executable_start)
22 (memory_full, buffer_memory_full, string_overflow, Fthrow)
23 (xsignal, xsignal0, xsignal1, xsignal2, xsignal3, signal_error)
24 (error, verror, nsberror, report_file_error, Ftop_level, Fkill_emacs)
25 (fatal):
26 (child_setup) [!DOS_NT]:
27 * lread.c (end_of_file_error, invalid_syntax):
28 * process.c (send_process_trap) [!FORWARD_SIGNAL_TO_MAIN_THREAD]:
29 * puresize.h (pure_write_error):
30 * search.c (matcher_overflow):
31 * sound.c (sound_perror, alsa_sound_perror):
32 * sysdep.c, syssignal.h (croak):
33 * term.c (maybe_fatal, vfatal):
34 * textprop.c (text_read_only):
35 * undo.c (user_error):
36 * unexmacosx.c (unexec_error):
37 * xterm.c (x_ins_del_lines, x_delete_glyphs):
38 Use _Noreturn rather than NO_RETURN.
39 No need for separate decl merely because of _Noreturn.
40 * sound.c (sound_warning, parse_sound):
41 Remove unnecessary forward decls.
42
432012-06-24 Paul Eggert <eggert@cs.ucla.edu>
44
13 Fix bug when time_t is unsigned and as wide as intmax_t (Bug#9000). 45 Fix bug when time_t is unsigned and as wide as intmax_t (Bug#9000).
14 * lisp.h (WAIT_READING_MAX): New macro. 46 * lisp.h (WAIT_READING_MAX): New macro.
15 * dispnew.c (Fsleep_for, sit_for): 47 * dispnew.c (Fsleep_for, sit_for):
diff --git a/src/buffer.h b/src/buffer.h
index 97b45e15387..b1ace4663cf 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -886,7 +886,7 @@ extern void set_buffer_internal_1 (struct buffer *);
886extern void set_buffer_temp (struct buffer *); 886extern void set_buffer_temp (struct buffer *);
887extern Lisp_Object buffer_local_value_1 (Lisp_Object, Lisp_Object); 887extern Lisp_Object buffer_local_value_1 (Lisp_Object, Lisp_Object);
888extern void record_buffer (Lisp_Object); 888extern void record_buffer (Lisp_Object);
889extern void buffer_slot_type_mismatch (Lisp_Object, int) NO_RETURN; 889extern _Noreturn void buffer_slot_type_mismatch (Lisp_Object, int);
890extern void fix_overlays_before (struct buffer *, ptrdiff_t, ptrdiff_t); 890extern void fix_overlays_before (struct buffer *, ptrdiff_t, ptrdiff_t);
891extern void mmap_set_vars (int); 891extern void mmap_set_vars (int);
892 892
diff --git a/src/data.c b/src/data.c
index ee43b98e6ed..cd4b14a9f9d 100644
--- a/src/data.c
+++ b/src/data.c
@@ -3213,9 +3213,8 @@ syms_of_data (void)
3213} 3213}
3214 3214
3215#ifndef FORWARD_SIGNAL_TO_MAIN_THREAD 3215#ifndef FORWARD_SIGNAL_TO_MAIN_THREAD
3216static void arith_error (int) NO_RETURN; 3216_Noreturn
3217#endif 3217#endif
3218
3219static void 3218static void
3220arith_error (int signo) 3219arith_error (int signo)
3221{ 3220{
diff --git a/src/eval.c b/src/eval.c
index 5a9327a99d8..3360a6b9a56 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -131,7 +131,6 @@ int handling_signal;
131Lisp_Object inhibit_lisp_code; 131Lisp_Object inhibit_lisp_code;
132 132
133static Lisp_Object funcall_lambda (Lisp_Object, ptrdiff_t, Lisp_Object *); 133static Lisp_Object funcall_lambda (Lisp_Object, ptrdiff_t, Lisp_Object *);
134static void unwind_to_catch (struct catchtag *, Lisp_Object) NO_RETURN;
135static int interactive_p (int); 134static int interactive_p (int);
136static Lisp_Object apply_lambda (Lisp_Object fun, Lisp_Object args); 135static Lisp_Object apply_lambda (Lisp_Object fun, Lisp_Object args);
137static Lisp_Object Ffetch_bytecode (Lisp_Object); 136static Lisp_Object Ffetch_bytecode (Lisp_Object);
@@ -1111,10 +1110,10 @@ internal_catch (Lisp_Object tag, Lisp_Object (*func) (Lisp_Object), Lisp_Object
1111 1110
1112 This is used for correct unwinding in Fthrow and Fsignal. */ 1111 This is used for correct unwinding in Fthrow and Fsignal. */
1113 1112
1114static void 1113static _Noreturn void
1115unwind_to_catch (struct catchtag *catch, Lisp_Object value) 1114unwind_to_catch (struct catchtag *catch, Lisp_Object value)
1116{ 1115{
1117 register int last_time; 1116 int last_time;
1118 1117
1119 /* Save the value in the tag. */ 1118 /* Save the value in the tag. */
1120 catch->val = value; 1119 catch->val = value;
diff --git a/src/image.c b/src/image.c
index 47b14a333e9..c5f7be3e750 100644
--- a/src/image.c
+++ b/src/image.c
@@ -5548,8 +5548,7 @@ init_png_functions (Lisp_Object libraries)
5548/* Error and warning handlers installed when the PNG library 5548/* Error and warning handlers installed when the PNG library
5549 is initialized. */ 5549 is initialized. */
5550 5550
5551static void my_png_error (png_struct *, const char *) NO_RETURN; 5551static _Noreturn void
5552static void
5553my_png_error (png_struct *png_ptr, const char *msg) 5552my_png_error (png_struct *png_ptr, const char *msg)
5554{ 5553{
5555 xassert (png_ptr != NULL); 5554 xassert (png_ptr != NULL);
@@ -6130,8 +6129,7 @@ struct my_jpeg_error_mgr
6130}; 6129};
6131 6130
6132 6131
6133static void my_error_exit (j_common_ptr) NO_RETURN; 6132static _Noreturn void
6134static void
6135my_error_exit (j_common_ptr cinfo) 6133my_error_exit (j_common_ptr cinfo)
6136{ 6134{
6137 struct my_jpeg_error_mgr *mgr = (struct my_jpeg_error_mgr *) cinfo->err; 6135 struct my_jpeg_error_mgr *mgr = (struct my_jpeg_error_mgr *) cinfo->err;
diff --git a/src/keyboard.c b/src/keyboard.c
index a39be2b859c..ae27920b181 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -462,7 +462,7 @@ static void input_available_signal (int signo);
462static Lisp_Object (Fcommand_execute) (Lisp_Object, Lisp_Object, Lisp_Object, 462static Lisp_Object (Fcommand_execute) (Lisp_Object, Lisp_Object, Lisp_Object,
463 Lisp_Object); 463 Lisp_Object);
464static void handle_interrupt (void); 464static void handle_interrupt (void);
465static void quit_throw_to_read_char (int) NO_RETURN; 465static _Noreturn void quit_throw_to_read_char (int);
466static void process_special_events (void); 466static void process_special_events (void);
467static void timer_start_idle (void); 467static void timer_start_idle (void);
468static void timer_stop_idle (void); 468static void timer_stop_idle (void);
@@ -1195,13 +1195,13 @@ This also exits all active minibuffers. */)
1195 Fthrow (Qtop_level, Qnil); 1195 Fthrow (Qtop_level, Qnil);
1196} 1196}
1197 1197
1198static void user_error (const char*) NO_RETURN; 1198static _Noreturn void
1199static void user_error (const char *msg) 1199user_error (const char *msg)
1200{ 1200{
1201 xsignal1 (Quser_error, build_string (msg)); 1201 xsignal1 (Quser_error, build_string (msg));
1202} 1202}
1203 1203
1204static Lisp_Object Fexit_recursive_edit (void) NO_RETURN; 1204_Noreturn
1205DEFUN ("exit-recursive-edit", Fexit_recursive_edit, Sexit_recursive_edit, 0, 0, "", 1205DEFUN ("exit-recursive-edit", Fexit_recursive_edit, Sexit_recursive_edit, 0, 0, "",
1206 doc: /* Exit from the innermost recursive edit or minibuffer. */) 1206 doc: /* Exit from the innermost recursive edit or minibuffer. */)
1207 (void) 1207 (void)
@@ -1212,7 +1212,7 @@ DEFUN ("exit-recursive-edit", Fexit_recursive_edit, Sexit_recursive_edit, 0, 0,
1212 user_error ("No recursive edit is in progress"); 1212 user_error ("No recursive edit is in progress");
1213} 1213}
1214 1214
1215static Lisp_Object Fabort_recursive_edit (void) NO_RETURN; 1215_Noreturn
1216DEFUN ("abort-recursive-edit", Fabort_recursive_edit, Sabort_recursive_edit, 0, 0, "", 1216DEFUN ("abort-recursive-edit", Fabort_recursive_edit, Sabort_recursive_edit, 0, 0, "",
1217 doc: /* Abort the command that requested this recursive edit or minibuffer input. */) 1217 doc: /* Abort the command that requested this recursive edit or minibuffer input. */)
1218 (void) 1218 (void)
diff --git a/src/lisp.h b/src/lisp.h
index 275761b0e94..f7ec612ac5e 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -113,7 +113,7 @@ typedef EMACS_UINT uprintmax_t;
113# define eassert(X) ((void) (0 && (X))) /* Check that X compiles. */ 113# define eassert(X) ((void) (0 && (X))) /* Check that X compiles. */
114#else /* ENABLE_CHECKING */ 114#else /* ENABLE_CHECKING */
115 115
116extern void die (const char *, const char *, int) NO_RETURN; 116extern _Noreturn void die (const char *, const char *, int);
117 117
118/* The suppress_checking variable is initialized to 0 in alloc.c. Set 118/* The suppress_checking variable is initialized to 0 in alloc.c. Set
119 it to 1 using a debugger to temporarily disable aborting on 119 it to 1 using a debugger to temporarily disable aborting on
@@ -2388,10 +2388,10 @@ extern intmax_t cons_to_signed (Lisp_Object, intmax_t, intmax_t);
2388extern uintmax_t cons_to_unsigned (Lisp_Object, uintmax_t); 2388extern uintmax_t cons_to_unsigned (Lisp_Object, uintmax_t);
2389 2389
2390extern struct Lisp_Symbol *indirect_variable (struct Lisp_Symbol *); 2390extern struct Lisp_Symbol *indirect_variable (struct Lisp_Symbol *);
2391extern void args_out_of_range (Lisp_Object, Lisp_Object) NO_RETURN; 2391extern _Noreturn void args_out_of_range (Lisp_Object, Lisp_Object);
2392extern void args_out_of_range_3 (Lisp_Object, Lisp_Object, 2392extern _Noreturn void args_out_of_range_3 (Lisp_Object, Lisp_Object,
2393 Lisp_Object) NO_RETURN; 2393 Lisp_Object);
2394extern Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object) NO_RETURN; 2394extern _Noreturn Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
2395extern Lisp_Object do_symval_forwarding (union Lisp_Fwd *); 2395extern Lisp_Object do_symval_forwarding (union Lisp_Fwd *);
2396extern void set_internal (Lisp_Object, Lisp_Object, Lisp_Object, int); 2396extern void set_internal (Lisp_Object, Lisp_Object, Lisp_Object, int);
2397extern void syms_of_data (void); 2397extern void syms_of_data (void);
@@ -2554,7 +2554,7 @@ extern void init_image (void);
2554extern Lisp_Object Qinhibit_modification_hooks; 2554extern Lisp_Object Qinhibit_modification_hooks;
2555extern void move_gap (ptrdiff_t); 2555extern void move_gap (ptrdiff_t);
2556extern void move_gap_both (ptrdiff_t, ptrdiff_t); 2556extern void move_gap_both (ptrdiff_t, ptrdiff_t);
2557extern void buffer_overflow (void) NO_RETURN; 2557extern _Noreturn void buffer_overflow (void);
2558extern void make_gap (ptrdiff_t); 2558extern void make_gap (ptrdiff_t);
2559extern ptrdiff_t copy_text (const unsigned char *, unsigned char *, 2559extern ptrdiff_t copy_text (const unsigned char *, unsigned char *,
2560 ptrdiff_t, int, int); 2560 ptrdiff_t, int, int);
@@ -2599,7 +2599,7 @@ extern void syms_of_insdel (void);
2599/* Defined in dispnew.c */ 2599/* Defined in dispnew.c */
2600#if (defined PROFILING \ 2600#if (defined PROFILING \
2601 && (defined __FreeBSD__ || defined GNU_LINUX || defined __MINGW32__)) 2601 && (defined __FreeBSD__ || defined GNU_LINUX || defined __MINGW32__))
2602void __executable_start (void) NO_RETURN; 2602_Noreturn void __executable_start (void);
2603#endif 2603#endif
2604extern Lisp_Object selected_frame; 2604extern Lisp_Object selected_frame;
2605extern Lisp_Object Vwindow_system; 2605extern Lisp_Object Vwindow_system;
@@ -2675,8 +2675,8 @@ extern void allocate_string_data (struct Lisp_String *, EMACS_INT, EMACS_INT);
2675extern void reset_malloc_hooks (void); 2675extern void reset_malloc_hooks (void);
2676extern void uninterrupt_malloc (void); 2676extern void uninterrupt_malloc (void);
2677extern void malloc_warning (const char *); 2677extern void malloc_warning (const char *);
2678extern void memory_full (size_t) NO_RETURN; 2678extern _Noreturn void memory_full (size_t);
2679extern void buffer_memory_full (ptrdiff_t) NO_RETURN; 2679extern _Noreturn void buffer_memory_full (ptrdiff_t);
2680extern int survives_gc_p (Lisp_Object); 2680extern int survives_gc_p (Lisp_Object);
2681extern void mark_object (Lisp_Object); 2681extern void mark_object (Lisp_Object);
2682#if defined REL_ALLOC && !defined SYSTEM_MALLOC 2682#if defined REL_ALLOC && !defined SYSTEM_MALLOC
@@ -2698,7 +2698,7 @@ EXFUN (Fmake_vector, 2);
2698EXFUN (Fvector, MANY); 2698EXFUN (Fvector, MANY);
2699EXFUN (Fmake_symbol, 1); 2699EXFUN (Fmake_symbol, 1);
2700EXFUN (Fmake_marker, 0); 2700EXFUN (Fmake_marker, 0);
2701extern void string_overflow (void) NO_RETURN; 2701extern _Noreturn void string_overflow (void);
2702EXFUN (Fmake_string, 2); 2702EXFUN (Fmake_string, 2);
2703extern Lisp_Object build_string (const char *); 2703extern Lisp_Object build_string (const char *);
2704extern Lisp_Object make_string (const char *, ptrdiff_t); 2704extern Lisp_Object make_string (const char *, ptrdiff_t);
@@ -2872,14 +2872,15 @@ extern Lisp_Object run_hook_with_args (ptrdiff_t nargs, Lisp_Object *args,
2872 (ptrdiff_t nargs, Lisp_Object *args)); 2872 (ptrdiff_t nargs, Lisp_Object *args));
2873EXFUN (Fprogn, UNEVALLED); 2873EXFUN (Fprogn, UNEVALLED);
2874EXFUN (Finteractive_p, 0); 2874EXFUN (Finteractive_p, 0);
2875EXFUN (Fthrow, 2) NO_RETURN; 2875_Noreturn EXFUN (Fthrow, 2);
2876EXFUN (Fsignal, 2); 2876EXFUN (Fsignal, 2);
2877extern void xsignal (Lisp_Object, Lisp_Object) NO_RETURN; 2877extern _Noreturn void xsignal (Lisp_Object, Lisp_Object);
2878extern void xsignal0 (Lisp_Object) NO_RETURN; 2878extern _Noreturn void xsignal0 (Lisp_Object);
2879extern void xsignal1 (Lisp_Object, Lisp_Object) NO_RETURN; 2879extern _Noreturn void xsignal1 (Lisp_Object, Lisp_Object);
2880extern void xsignal2 (Lisp_Object, Lisp_Object, Lisp_Object) NO_RETURN; 2880extern _Noreturn void xsignal2 (Lisp_Object, Lisp_Object, Lisp_Object);
2881extern void xsignal3 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object) NO_RETURN; 2881extern _Noreturn void xsignal3 (Lisp_Object, Lisp_Object, Lisp_Object,
2882extern void signal_error (const char *, Lisp_Object) NO_RETURN; 2882 Lisp_Object);
2883extern _Noreturn void signal_error (const char *, Lisp_Object);
2883EXFUN (Fcommandp, 2); 2884EXFUN (Fcommandp, 2);
2884EXFUN (Ffunctionp, 1); 2885EXFUN (Ffunctionp, 1);
2885EXFUN (Feval, 2); 2886EXFUN (Feval, 2);
@@ -2905,9 +2906,9 @@ extern Lisp_Object internal_condition_case_n (Lisp_Object (*) (ptrdiff_t, Lisp_O
2905extern void specbind (Lisp_Object, Lisp_Object); 2906extern void specbind (Lisp_Object, Lisp_Object);
2906extern void record_unwind_protect (Lisp_Object (*) (Lisp_Object), Lisp_Object); 2907extern void record_unwind_protect (Lisp_Object (*) (Lisp_Object), Lisp_Object);
2907extern Lisp_Object unbind_to (ptrdiff_t, Lisp_Object); 2908extern Lisp_Object unbind_to (ptrdiff_t, Lisp_Object);
2908extern void error (const char *, ...) NO_RETURN ATTRIBUTE_FORMAT_PRINTF (1, 2); 2909extern _Noreturn void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
2909extern void verror (const char *, va_list) 2910extern _Noreturn void verror (const char *, va_list)
2910 NO_RETURN ATTRIBUTE_FORMAT_PRINTF (1, 0); 2911 ATTRIBUTE_FORMAT_PRINTF (1, 0);
2911extern void do_autoload (Lisp_Object, Lisp_Object); 2912extern void do_autoload (Lisp_Object, Lisp_Object);
2912extern Lisp_Object un_autoload (Lisp_Object); 2913extern Lisp_Object un_autoload (Lisp_Object);
2913extern void init_eval_once (void); 2914extern void init_eval_once (void);
@@ -2954,7 +2955,7 @@ EXFUN (Fnarrow_to_region, 2);
2954EXFUN (Fwiden, 0); 2955EXFUN (Fwiden, 0);
2955EXFUN (Fuser_login_name, 1); 2956EXFUN (Fuser_login_name, 1);
2956EXFUN (Fsystem_name, 0); 2957EXFUN (Fsystem_name, 0);
2957extern void time_overflow (void) NO_RETURN; 2958extern _Noreturn void time_overflow (void);
2958EXFUN (Fcurrent_time, 0); 2959EXFUN (Fcurrent_time, 0);
2959EXFUN (Fget_internal_run_time, 0); 2960EXFUN (Fget_internal_run_time, 0);
2960extern Lisp_Object make_buffer_string (ptrdiff_t, ptrdiff_t, int); 2961extern Lisp_Object make_buffer_string (ptrdiff_t, ptrdiff_t, int);
@@ -2969,7 +2970,7 @@ extern void set_time_zone_rule (const char *);
2969 2970
2970/* Defined in buffer.c */ 2971/* Defined in buffer.c */
2971extern int mouse_face_overlay_overlaps (Lisp_Object); 2972extern int mouse_face_overlay_overlaps (Lisp_Object);
2972extern void nsberror (Lisp_Object) NO_RETURN; 2973extern _Noreturn void nsberror (Lisp_Object);
2973EXFUN (Fset_buffer_multibyte, 1); 2974EXFUN (Fset_buffer_multibyte, 1);
2974EXFUN (Foverlay_start, 1); 2975EXFUN (Foverlay_start, 1);
2975EXFUN (Foverlay_end, 1); 2976EXFUN (Foverlay_end, 1);
@@ -3052,7 +3053,7 @@ EXFUN (Ffile_readable_p, 1);
3052EXFUN (Fread_file_name, 6); 3053EXFUN (Fread_file_name, 6);
3053extern Lisp_Object close_file_unwind (Lisp_Object); 3054extern Lisp_Object close_file_unwind (Lisp_Object);
3054extern Lisp_Object restore_point_unwind (Lisp_Object); 3055extern Lisp_Object restore_point_unwind (Lisp_Object);
3055extern void report_file_error (const char *, Lisp_Object) NO_RETURN; 3056extern _Noreturn void report_file_error (const char *, Lisp_Object);
3056extern int internal_delete_file (Lisp_Object); 3057extern int internal_delete_file (Lisp_Object);
3057extern void syms_of_fileio (void); 3058extern void syms_of_fileio (void);
3058extern Lisp_Object make_temp_name (Lisp_Object, int); 3059extern Lisp_Object make_temp_name (Lisp_Object, int);
@@ -3140,7 +3141,7 @@ extern Lisp_Object Qtop;
3140extern int input_pending; 3141extern int input_pending;
3141EXFUN (Fdiscard_input, 0); 3142EXFUN (Fdiscard_input, 0);
3142EXFUN (Frecursive_edit, 0); 3143EXFUN (Frecursive_edit, 0);
3143EXFUN (Ftop_level, 0) NO_RETURN; 3144_Noreturn EXFUN (Ftop_level, 0);
3144extern Lisp_Object menu_bar_items (Lisp_Object); 3145extern Lisp_Object menu_bar_items (Lisp_Object);
3145extern Lisp_Object tool_bar_items (Lisp_Object, int *); 3146extern Lisp_Object tool_bar_items (Lisp_Object, int *);
3146extern void discard_mouse_events (void); 3147extern void discard_mouse_events (void);
@@ -3209,7 +3210,7 @@ extern Lisp_Object Qfile_name_handler_alist;
3209extern void fatal_error_signal (int); 3210extern void fatal_error_signal (int);
3210#endif 3211#endif
3211extern Lisp_Object Qkill_emacs; 3212extern Lisp_Object Qkill_emacs;
3212EXFUN (Fkill_emacs, 1) NO_RETURN; 3213_Noreturn EXFUN (Fkill_emacs, 1);
3213#if HAVE_SETLOCALE 3214#if HAVE_SETLOCALE
3214void fixup_locale (void); 3215void fixup_locale (void);
3215void synchronize_system_messages_locale (void); 3216void synchronize_system_messages_locale (void);
@@ -3269,11 +3270,10 @@ extern void syms_of_process (void);
3269extern void setup_process_coding_systems (Lisp_Object); 3270extern void setup_process_coding_systems (Lisp_Object);
3270 3271
3271EXFUN (Fcall_process, MANY); 3272EXFUN (Fcall_process, MANY);
3272extern int child_setup (int, int, int, char **, int, Lisp_Object)
3273#ifndef DOS_NT 3273#ifndef DOS_NT
3274 NO_RETURN 3274 _Noreturn
3275#endif 3275#endif
3276 ; 3276extern int child_setup (int, int, int, char **, int, Lisp_Object);
3277extern void init_callproc_1 (void); 3277extern void init_callproc_1 (void);
3278extern void init_callproc (void); 3278extern void init_callproc (void);
3279extern void set_initial_environment (void); 3279extern void set_initial_environment (void);
@@ -3406,8 +3406,8 @@ extern Lisp_Object directory_files_internal (Lisp_Object, Lisp_Object,
3406extern int *char_ins_del_vector; 3406extern int *char_ins_del_vector;
3407extern void mark_ttys (void); 3407extern void mark_ttys (void);
3408extern void syms_of_term (void); 3408extern void syms_of_term (void);
3409extern void fatal (const char *msgid, ...) 3409extern _Noreturn void fatal (const char *msgid, ...)
3410 NO_RETURN ATTRIBUTE_FORMAT_PRINTF (1, 2); 3410 ATTRIBUTE_FORMAT_PRINTF (1, 2);
3411 3411
3412/* Defined in terminal.c */ 3412/* Defined in terminal.c */
3413EXFUN (Fframe_terminal, 1); 3413EXFUN (Fframe_terminal, 1);
diff --git a/src/lread.c b/src/lread.c
index fee97044a73..2cd203da5b9 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -154,10 +154,6 @@ static void readevalloop (Lisp_Object, FILE*, Lisp_Object, int,
154 Lisp_Object, Lisp_Object); 154 Lisp_Object, Lisp_Object);
155static Lisp_Object load_unwind (Lisp_Object); 155static Lisp_Object load_unwind (Lisp_Object);
156static Lisp_Object load_descriptor_unwind (Lisp_Object); 156static Lisp_Object load_descriptor_unwind (Lisp_Object);
157
158static void invalid_syntax (const char *) NO_RETURN;
159static void end_of_file_error (void) NO_RETURN;
160
161 157
162/* Functions that read one byte from the current source READCHARFUN 158/* Functions that read one byte from the current source READCHARFUN
163 or unreads one byte. If the integer argument C is -1, it returns 159 or unreads one byte. If the integer argument C is -1, it returns
@@ -1656,7 +1652,7 @@ readevalloop_1 (Lisp_Object old)
1656/* Signal an `end-of-file' error, if possible with file name 1652/* Signal an `end-of-file' error, if possible with file name
1657 information. */ 1653 information. */
1658 1654
1659static void 1655static _Noreturn void
1660end_of_file_error (void) 1656end_of_file_error (void)
1661{ 1657{
1662 if (STRINGP (Vload_file_name)) 1658 if (STRINGP (Vload_file_name))
@@ -2024,7 +2020,7 @@ read_internal_start (Lisp_Object stream, Lisp_Object start, Lisp_Object end)
2024/* Signal Qinvalid_read_syntax error. 2020/* Signal Qinvalid_read_syntax error.
2025 S is error string of length N (if > 0) */ 2021 S is error string of length N (if > 0) */
2026 2022
2027static void 2023static _Noreturn void
2028invalid_syntax (const char *s) 2024invalid_syntax (const char *s)
2029{ 2025{
2030 xsignal1 (Qinvalid_read_syntax, build_string (s)); 2026 xsignal1 (Qinvalid_read_syntax, build_string (s));
diff --git a/src/process.c b/src/process.c
index 457a1a9c7ea..aaf8693a62c 100644
--- a/src/process.c
+++ b/src/process.c
@@ -5372,7 +5372,7 @@ static jmp_buf send_process_frame;
5372static Lisp_Object process_sent_to; 5372static Lisp_Object process_sent_to;
5373 5373
5374#ifndef FORWARD_SIGNAL_TO_MAIN_THREAD 5374#ifndef FORWARD_SIGNAL_TO_MAIN_THREAD
5375static void send_process_trap (int) NO_RETURN; 5375static _Noreturn void send_process_trap (int);
5376#endif 5376#endif
5377 5377
5378static void 5378static void
diff --git a/src/puresize.h b/src/puresize.h
index bee82d1e783..7f8f279f568 100644
--- a/src/puresize.h
+++ b/src/puresize.h
@@ -75,7 +75,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
75 { if (PURE_P (obj)) \ 75 { if (PURE_P (obj)) \
76 pure_write_error (); } 76 pure_write_error (); }
77 77
78extern void pure_write_error (void) NO_RETURN; 78extern _Noreturn void pure_write_error (void);
79 79
80/* Define PURE_P. */ 80/* Define PURE_P. */
81 81
diff --git a/src/search.c b/src/search.c
index 71ab60d9f85..4912c0f23ec 100644
--- a/src/search.c
+++ b/src/search.c
@@ -101,9 +101,8 @@ static EMACS_INT boyer_moore (EMACS_INT, unsigned char *, ptrdiff_t,
101static EMACS_INT search_buffer (Lisp_Object, ptrdiff_t, ptrdiff_t, 101static EMACS_INT search_buffer (Lisp_Object, ptrdiff_t, ptrdiff_t,
102 ptrdiff_t, ptrdiff_t, EMACS_INT, int, 102 ptrdiff_t, ptrdiff_t, EMACS_INT, int,
103 Lisp_Object, Lisp_Object, int); 103 Lisp_Object, Lisp_Object, int);
104static void matcher_overflow (void) NO_RETURN;
105 104
106static void 105static _Noreturn void
107matcher_overflow (void) 106matcher_overflow (void)
108{ 107{
109 error ("Stack overflow in regexp matcher"); 108 error ("Stack overflow in regexp matcher");
diff --git a/src/sound.c b/src/sound.c
index 143653e48e4..65e7af70c5d 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -109,13 +109,6 @@ enum sound_attr
109 SOUND_ATTR_SENTINEL 109 SOUND_ATTR_SENTINEL
110}; 110};
111 111
112#ifdef HAVE_ALSA
113static void alsa_sound_perror (const char *, int) NO_RETURN;
114#endif
115static void sound_perror (const char *) NO_RETURN;
116static void sound_warning (const char *);
117static int parse_sound (Lisp_Object, Lisp_Object *);
118
119/* END: Common Definitions */ 112/* END: Common Definitions */
120 113
121/* BEGIN: Non Windows Definitions */ 114/* BEGIN: Non Windows Definitions */
@@ -320,7 +313,7 @@ static int do_play_sound (const char *, unsigned long);
320 313
321/* Like perror, but signals an error. */ 314/* Like perror, but signals an error. */
322 315
323static void 316static _Noreturn void
324sound_perror (const char *msg) 317sound_perror (const char *msg)
325{ 318{
326 int saved_errno = errno; 319 int saved_errno = errno;
@@ -909,7 +902,7 @@ vox_write (struct sound_device *sd, const char *buffer, ptrdiff_t nbytes)
909#define DEFAULT_ALSA_SOUND_DEVICE "default" 902#define DEFAULT_ALSA_SOUND_DEVICE "default"
910#endif 903#endif
911 904
912static void 905static _Noreturn void
913alsa_sound_perror (const char *msg, int err) 906alsa_sound_perror (const char *msg, int err)
914{ 907{
915 error ("%s: %s", msg, snd_strerror (err)); 908 error ("%s: %s", msg, snd_strerror (err));
diff --git a/src/sysdep.c b/src/sysdep.c
index 42f53a75e9d..9994f312f45 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -114,7 +114,7 @@ extern char *getwd (char *);
114static int emacs_get_tty (int, struct emacs_tty *); 114static int emacs_get_tty (int, struct emacs_tty *);
115static int emacs_set_tty (int, struct emacs_tty *, int); 115static int emacs_set_tty (int, struct emacs_tty *, int);
116#if defined TIOCNOTTY || defined USG5 || defined CYGWIN 116#if defined TIOCNOTTY || defined USG5 || defined CYGWIN
117static void croak (char *) NO_RETURN; 117static _Noreturn void croak (char *);
118#endif 118#endif
119 119
120/* Declare here, including term.h is problematic on some systems. */ 120/* Declare here, including term.h is problematic on some systems. */
diff --git a/src/syssignal.h b/src/syssignal.h
index a2522f24429..5c3683423be 100644
--- a/src/syssignal.h
+++ b/src/syssignal.h
@@ -76,7 +76,7 @@ sigset_t sys_sigblock (sigset_t new_mask);
76sigset_t sys_sigunblock (sigset_t new_mask); 76sigset_t sys_sigunblock (sigset_t new_mask);
77sigset_t sys_sigsetmask (sigset_t new_mask); 77sigset_t sys_sigsetmask (sigset_t new_mask);
78#if ! (defined TIOCNOTTY || defined USG5 || defined CYGWIN) 78#if ! (defined TIOCNOTTY || defined USG5 || defined CYGWIN)
79void croak (char *) NO_RETURN; 79_Noreturn void croak (char *);
80#endif 80#endif
81 81
82#define sys_sigdel(MASK,SIG) sigdelset (&MASK,SIG) 82#define sys_sigdel(MASK,SIG) sigdelset (&MASK,SIG)
diff --git a/src/term.c b/src/term.c
index 1a2524fd297..d58dc2ba878 100644
--- a/src/term.c
+++ b/src/term.c
@@ -86,11 +86,11 @@ static void clear_tty_hooks (struct terminal *terminal);
86static void set_tty_hooks (struct terminal *terminal); 86static void set_tty_hooks (struct terminal *terminal);
87static void dissociate_if_controlling_tty (int fd); 87static void dissociate_if_controlling_tty (int fd);
88static void delete_tty (struct terminal *); 88static void delete_tty (struct terminal *);
89static void maybe_fatal (int must_succeed, struct terminal *terminal, 89static _Noreturn void maybe_fatal (int must_succeed, struct terminal *terminal,
90 const char *str1, const char *str2, ...) 90 const char *str1, const char *str2, ...)
91 NO_RETURN ATTRIBUTE_FORMAT_PRINTF (3, 5) ATTRIBUTE_FORMAT_PRINTF (4, 5); 91 ATTRIBUTE_FORMAT_PRINTF (3, 5) ATTRIBUTE_FORMAT_PRINTF (4, 5);
92static void vfatal (const char *str, va_list ap) 92static _Noreturn void vfatal (const char *str, va_list ap)
93 NO_RETURN ATTRIBUTE_FORMAT_PRINTF (1, 0); 93 ATTRIBUTE_FORMAT_PRINTF (1, 0);
94 94
95 95
96#define OUTPUT(tty, a) \ 96#define OUTPUT(tty, a) \
diff --git a/src/textprop.c b/src/textprop.c
index afeb0339d5c..fb58f8e0808 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -72,7 +72,6 @@ Lisp_Object Qfront_sticky, Qrear_nonsticky;
72static Lisp_Object interval_insert_behind_hooks; 72static Lisp_Object interval_insert_behind_hooks;
73static Lisp_Object interval_insert_in_front_hooks; 73static Lisp_Object interval_insert_in_front_hooks;
74 74
75static void text_read_only (Lisp_Object) NO_RETURN;
76static Lisp_Object Fprevious_property_change (Lisp_Object, Lisp_Object, 75static Lisp_Object Fprevious_property_change (Lisp_Object, Lisp_Object,
77 Lisp_Object); 76 Lisp_Object);
78 77
@@ -80,7 +79,7 @@ static Lisp_Object Fprevious_property_change (Lisp_Object, Lisp_Object,
80/* Signal a `text-read-only' error. This function makes it easier 79/* Signal a `text-read-only' error. This function makes it easier
81 to capture that error in GDB by putting a breakpoint on it. */ 80 to capture that error in GDB by putting a breakpoint on it. */
82 81
83static void 82static _Noreturn void
84text_read_only (Lisp_Object propval) 83text_read_only (Lisp_Object propval)
85{ 84{
86 if (STRINGP (propval)) 85 if (STRINGP (propval))
diff --git a/src/undo.c b/src/undo.c
index ae9025c298e..c4ef557a221 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -438,8 +438,8 @@ truncate_undo_list (struct buffer *b)
438 unbind_to (count, Qnil); 438 unbind_to (count, Qnil);
439} 439}
440 440
441static void user_error (const char*) NO_RETURN; 441static _Noreturn void
442static void user_error (const char *msg) 442user_error (const char *msg)
443{ 443{
444 xsignal1 (Quser_error, build_string (msg)); 444 xsignal1 (Quser_error, build_string (msg));
445} 445}
diff --git a/src/unexmacosx.c b/src/unexmacosx.c
index a61bbd8eb86..47efe41fdd9 100644
--- a/src/unexmacosx.c
+++ b/src/unexmacosx.c
@@ -197,8 +197,6 @@ static off_t data_segment_old_fileoff = 0;
197 197
198static struct segment_command *data_segment_scp; 198static struct segment_command *data_segment_scp;
199 199
200static void unexec_error (const char *format, ...) NO_RETURN;
201
202/* Read N bytes from infd into memory starting at address DEST. 200/* Read N bytes from infd into memory starting at address DEST.
203 Return true if successful, false otherwise. */ 201 Return true if successful, false otherwise. */
204static int 202static int
@@ -275,7 +273,7 @@ unexec_copy (off_t dest, off_t src, ssize_t count)
275 273
276/* Debugging and informational messages routines. */ 274/* Debugging and informational messages routines. */
277 275
278static void 276static _Noreturn void
279unexec_error (const char *format, ...) 277unexec_error (const char *format, ...)
280{ 278{
281 va_list ap; 279 va_list ap;
diff --git a/src/xterm.c b/src/xterm.c
index cb7aac2838c..9587a47f9bb 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -316,7 +316,7 @@ static void XTframe_up_to_date (struct frame *);
316static void XTset_terminal_modes (struct terminal *); 316static void XTset_terminal_modes (struct terminal *);
317static void XTreset_terminal_modes (struct terminal *); 317static void XTreset_terminal_modes (struct terminal *);
318static void x_clear_frame (struct frame *); 318static void x_clear_frame (struct frame *);
319static void x_ins_del_lines (struct frame *, int, int) NO_RETURN; 319static _Noreturn void x_ins_del_lines (struct frame *, int, int);
320static void frame_highlight (struct frame *); 320static void frame_highlight (struct frame *);
321static void frame_unhighlight (struct frame *); 321static void frame_unhighlight (struct frame *);
322static void x_new_focus_frame (struct x_display_info *, struct frame *); 322static void x_new_focus_frame (struct x_display_info *, struct frame *);
@@ -349,7 +349,7 @@ static int handle_one_xevent (struct x_display_info *, XEvent *,
349#ifdef USE_GTK 349#ifdef USE_GTK
350static int x_dispatch_event (XEvent *, Display *); 350static int x_dispatch_event (XEvent *, Display *);
351#endif 351#endif
352/* Don't declare this NO_RETURN because we want no 352/* Don't declare this _Noreturn because we want no
353 interference with debugging failing X calls. */ 353 interference with debugging failing X calls. */
354static void x_connection_closed (Display *, const char *); 354static void x_connection_closed (Display *, const char *);
355static void x_wm_set_window_state (struct frame *, int); 355static void x_wm_set_window_state (struct frame *, int);
@@ -908,7 +908,7 @@ static void x_draw_glyph_string_foreground (struct glyph_string *);
908static void x_draw_composite_glyph_string_foreground (struct glyph_string *); 908static void x_draw_composite_glyph_string_foreground (struct glyph_string *);
909static void x_draw_glyph_string_box (struct glyph_string *); 909static void x_draw_glyph_string_box (struct glyph_string *);
910static void x_draw_glyph_string (struct glyph_string *); 910static void x_draw_glyph_string (struct glyph_string *);
911static void x_delete_glyphs (struct frame *, int) NO_RETURN; 911static _Noreturn void x_delete_glyphs (struct frame *, int);
912static void x_compute_glyph_string_overhangs (struct glyph_string *); 912static void x_compute_glyph_string_overhangs (struct glyph_string *);
913static void x_set_cursor_gc (struct glyph_string *); 913static void x_set_cursor_gc (struct glyph_string *);
914static void x_set_mode_line_face_gc (struct glyph_string *); 914static void x_set_mode_line_face_gc (struct glyph_string *);