diff -r 4489afa5b1c5 -r 7474d2cd1d6e stage4/generate_c/generate_c_typedecl.cc --- a/stage4/generate_c/generate_c_typedecl.cc Sun Nov 30 12:49:42 2014 +0000 +++ b/stage4/generate_c/generate_c_typedecl.cc Sat Dec 06 19:11:32 2014 +0000 @@ -539,7 +539,7 @@ void *visit(array_type_declaration_c *symbol) { TRACE("array_type_declaration_c"); - // NOTE: remeber that symbol->array_spec_init may point to an identifier_c, which is why we use symbol->array_spec_init->datatype instead! + // NOTE: remeber that symbol->array_spec_init may point to a derived_datatype_identifier_c, which is why we use symbol->array_spec_init->datatype instead! if (NULL == symbol->array_spec_init->datatype) ERROR; identifier_c *id = generate_datatypes_aliasid_c::create_id(symbol->array_spec_init->datatype); @@ -871,9 +871,12 @@ * we will keep track of the datatypes that have already been declared, and henceforth * only declare the datatypes that have not been previously defined. */ - if (datatypes_already_defined.find(((identifier_c *)(symbol->ref_type_name))->value) != datatypes_already_defined.end()) + identifier_c *tmp_id; + tmp_id = dynamic_cast(symbol->ref_type_name); + if (NULL == tmp_id) ERROR; + if (datatypes_already_defined.find(tmp_id->value) != datatypes_already_defined.end()) return NULL; // already defined. No need to define it again!! - datatypes_already_defined[((identifier_c *)(symbol->ref_type_name))->value] = 1; // insert this datatype into the list of already defined arrays! + datatypes_already_defined[tmp_id->value] = 1; // insert this datatype into the list of already defined arrays! current_type_name = NULL; current_typedefinition = none_td;