stage4/generate_c/generate_c_typedecl.cc
changeset 958 7474d2cd1d6e
parent 950 935c8b6ba3c5
child 1041 56ebe2a31b5b
--- 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<identifier_c *>(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;