# HG changeset patch # User lbessard # Date 1245410791 -7200 # Node ID 66d501d7b67df47784ac87d3ea4949b6a42bf0d8 # Parent e18690830555d4e3abb400e8c59303400cbc5bab Fix segmentation fault when define global with location but no name (reported by brendan) diff -r e18690830555 -r 66d501d7b67d stage4/generate_c/generate_c_vardecl.cc --- a/stage4/generate_c/generate_c_vardecl.cc Thu Jun 18 19:18:54 2009 +0200 +++ b/stage4/generate_c/generate_c_vardecl.cc Fri Jun 19 13:26:31 2009 +0200 @@ -1703,17 +1703,16 @@ // SYM_REF2(global_var_spec_c, global_var_name, location) void *visit(global_var_spec_c *symbol) { TRACE("global_var_spec_c"); - /* now to produce the c equivalent... */ switch(wanted_varformat) { case local_vf: - s4o.print(s4o.indent_spaces); + s4o.print("extern "); + this->current_var_type_symbol->accept(*this); + s4o.print("* "); + symbol->location->accept(*this); + s4o.print(";\n"); if (symbol->global_var_name != NULL) { - s4o.print("extern "); - this->current_var_type_symbol->accept(*this); - s4o.print("* "); - symbol->location->accept(*this); - s4o.print(";\n"); + s4o.print(s4o.indent_spaces); this->current_var_type_symbol->accept(*this); s4o.print(" *"); if (this->resource_name != NULL) { @@ -1723,6 +1722,7 @@ symbol->global_var_name->accept(*this); s4o.print(";\n"); if (this->resource_name != NULL) { + s4o.print(s4o.indent_spaces); s4o.print("#define "); symbol->global_var_name->accept(*this); s4o.print(" "); diff -r e18690830555 -r 66d501d7b67d stage4/generate_c/generate_var_list.cc --- a/stage4/generate_c/generate_var_list.cc Thu Jun 18 19:18:54 2009 +0200 +++ b/stage4/generate_c/generate_var_list.cc Fri Jun 19 13:26:31 2009 +0200 @@ -402,9 +402,10 @@ /*| global_var_name location */ // SYM_REF2(global_var_spec_c, global_var_name, location) void *visit(global_var_spec_c *symbol) { - if (symbol->global_var_name != NULL) + if (symbol->global_var_name != NULL) { this->current_var_type_category = pointer_vtc; declare_variable(symbol->global_var_name); + } return NULL; }