\f
+/* GCC can be told that a function doesn't return; this helps it do
+ better error checking (for uninitialized variable use, for
+ example), and some optimization. */
+#ifdef __GNUC__
+#define SCM_NORETURN __attribute__ ((noreturn))
+#else
+#define SCM_NORETURN
+#endif
+
+
extern SCM scm_errno SCM_P ((SCM arg));
extern SCM scm_perror SCM_P ((SCM arg));
extern void scm_error SCM_P ((SCM key, char *subr, char *message,
- SCM args, SCM rest));
+ SCM args, SCM rest)) SCM_NORETURN;
extern void (*scm_error_callback) SCM_P ((SCM key, char *subr,
char *message, SCM args, SCM rest));
-extern void scm_syserror SCM_P ((char *subr));
-extern void scm_syserror_msg SCM_P ((char *subr, char *message, SCM args));
-extern void scm_sysmissing SCM_P ((char *subr));
-extern void scm_num_overflow SCM_P ((char *subr));
-extern void scm_out_of_range SCM_P ((char *subr, SCM bad_value));
-extern void scm_wrong_num_args SCM_P ((SCM proc));
-extern void scm_wrong_type_arg SCM_P ((char *subr, int pos, SCM bad_value));
-extern void scm_memory_error SCM_P ((char *subr));
-extern void scm_misc_error SCM_P ((char *subr, char *message, SCM args));
+extern void scm_syserror SCM_P ((char *subr)) SCM_NORETURN;
+extern void scm_syserror_msg SCM_P ((char *subr, char *message, SCM args))
+ SCM_NORETURN;
+extern void scm_sysmissing SCM_P ((char *subr)) SCM_NORETURN;
+extern void scm_num_overflow SCM_P ((char *subr)) SCM_NORETURN;
+extern void scm_out_of_range SCM_P ((char *subr, SCM bad_value)) SCM_NORETURN;
+extern void scm_wrong_num_args SCM_P ((SCM proc)) SCM_NORETURN;
+extern void scm_wrong_type_arg SCM_P ((char *subr, int pos, SCM bad_value))
+ SCM_NORETURN;
+extern void scm_memory_error SCM_P ((char *subr)) SCM_NORETURN;
+extern void scm_misc_error SCM_P ((char *subr, char *message, SCM args))
+ SCM_NORETURN;
extern SCM scm_wta SCM_P ((SCM arg, char *pos, char *s_subr));
extern void scm_init_error SCM_P ((void));
dframe = (scm_debug_frame *) ((SCM_STACKITEM *) SCM_DFRAME (obj)
+ offset);
}
- else scm_wta (obj, (char *) SCM_ARG1, s_make_stack);
+ else
+ {
+ scm_wta (obj, (char *) SCM_ARG1, s_make_stack);
+ abort ();
+ }
}
/* Count number of frames. Also get stack id tag and check whether
#endif
dframe = (scm_debug_frame *) ((SCM_STACKITEM *) SCM_DFRAME (obj) + offset);
}
- else scm_wta (obj, (char *) SCM_ARG1, s_last_stack_frame);
+ else
+ {
+ scm_wta (obj, (char *) SCM_ARG1, s_last_stack_frame);
+ abort ();
+ }
if (!dframe || SCM_VOIDFRAMEP (*dframe))
return SCM_BOOL_F;