1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-16 08:40:19 +02:00

Give GCC more control flow information, so it can be sure that

variables aren't used uninitialized.
* error.h (scm_error, scm_syserror, scm_syserror_msg,
scm_sysmissing, scm_num_overflow, scm_out_of_range,
scm_wrong_num_args, scm_wrong_type_arg, scm_memory_error,
scm_misc_error): Tell GCC that these functions never return.
* struct.c (scm_struct_ref, scm_struct_set_x): If we can't figure
out the field type, call abort if SCM_ASSERT returns, to placate
the optimizer.
* stacks.c (scm_make_stack, scm_last_stack_frame): abort if
scm_wta ever returns.  We can't handle this case anyway, and this
gives the optimizer more information.
* unif.c (scm_uniform_vector_ref, scm_array_set_x): Abort if
scm_wta ever returns.

In some cases, the code is fine, but GCC isn't smart enough to
figure that out; this usually happens when one variable is only
initialized and used when a particular condition holds true, and
we know that condition will never change within a given invocation
of the function.  In this case, we simply initialize the variables
to placate the compiler, hopefully to a value which will cause a
crash if it is ever actually used.
* print.c (scm_iprin1): Initialize mw_pos.
* read.c (scm_lreadrecparen): Initialize tl2, ans2.
* throw.c (scm_ithrow): Initialize dynpair.
* unif.c (scm_uniform_vector_ref): Initialize cra.
* struct.c (init_struct): Initialize prot.
* mbstrings.c (scm_print_mb_symbol): Initialize mw_pos and inc.
This commit is contained in:
Jim Blandy 1996-12-18 21:41:44 +00:00
parent 407775cb81
commit 35de7ebe4a
2 changed files with 25 additions and 16 deletions

View file

@ -142,7 +142,7 @@ init_struct (handle, tail_elts, inits)
SCM layout;
SCM * data;
unsigned char * fields_desc;
unsigned char prot;
unsigned char prot = 0;
int n_fields;
SCM * mem;
int tailp = 0;
@ -456,6 +456,7 @@ scm_struct_ref (handle, pos)
else
{
SCM_ASSERT (0, pos, "ref denied", s_struct_ref);
abort ();
}
switch (field_type)
@ -532,6 +533,7 @@ scm_struct_set_x (handle, pos, val)
else
{
SCM_ASSERT (0, pos, "set_x denied", s_struct_ref);
abort ();
}
switch (field_type)