Package: gcc-4.0 Version: 4.0.2-5 Severity: important Recent versions of make fail with an error reproducible as follows.
$ gcc -O2 -c -o buggy.o buggy.c buggy.c: In function 'pop_variable_scope': buggy.c:62: fatal error: internal consistency failure compilation terminated. Workaround: change -O2 to -O1. Hopefully, I've reduced this enough. Thanks, Stephen -- Stephen R. Marenka If life's not fun, you're not doing it right! <[EMAIL PROTECTED]>
/* based on variable.c from make_3.80+3.81.b4-1 */ #define NULL 0 #include <assert.h> struct variable_set { void * table; /* Hash table of variables. */ }; struct variable_set_list { struct variable_set_list *next; /* Link in the chain. */ struct variable_set *set; /* Variable set. */ }; extern struct variable_set_list *current_variable_set_list; static struct variable_set global_variable_set; static struct variable_set_list global_setlist = { 0, &global_variable_set }; static void free_variable_name_and_value (const void *item) { } void pop_variable_scope (void) { struct variable_set_list *setlist; struct variable_set *set; /* Can't call this if there's no scope to pop! */ assert(current_variable_set_list->next != NULL); if (current_variable_set_list != &global_setlist) { /* We're not pointing to the global setlist, so pop this one. */ setlist = current_variable_set_list; set = setlist->set; current_variable_set_list = setlist->next; } else { /* This set is the one in the global_setlist, but there is another global set beyond that. We want to copy that set to global_setlist, then delete what used to be in global_setlist. */ setlist = global_setlist.next; set = global_setlist.set; global_setlist.set = setlist->set; global_setlist.next = setlist->next; } /* Free the one we no longer need. */ free ((char *) setlist); hash_map (&set->table, free_variable_name_and_value); hash_free (&set->table, 1); free ((char *) set); }
signature.asc
Description: Digital signature