char *temp_name = alloca (strlen (previous_prefix) + 2 + strlen(name) + 1); strcpy (temp_name, previous_prefix); strcat (temp_name, "::"); strcat (temp_name, name);
char *temp_name = typename_concat (NULL, previous_prefix, name, cu); make_cleanup (xfree, temp_name);
read_namespace (struct die_info *die, struct dwarf2_cu *cu){  struct objfile *objfile = cu->objfile;  const char *previous_prefix = processing_current_prefix;  const char *name;  int is_anonymous;  struct die_info *current_die;  name = namespace_name (die, &is_anonymous, cu);  /* Now build the name of the current namespace.  */  if (previous_prefix[0] == '\0')    {      processing_current_prefix = name;    }  else    {      /* We need temp_name around because processing_current_prefix	 is a const char *.  */      char *temp_name = alloca (strlen (previous_prefix)				+ 2 + strlen(name) + 1);      strcpy (temp_name, previous_prefix);      strcat (temp_name, "::");      strcat (temp_name, name);      processing_current_prefix = temp_name;    }  /* Add a symbol associated to this if we haven't seen the namespace     before.  Also, add a using directive if it's an anonymous     namespace.  */  if (dwarf2_extension (die, cu) == NULL)    {      struct type *type;      /* FIXME: carlton/2003-06-27: Once GDB is more const-correct,	 this cast will hopefully become unnecessary.  */      type = init_type (TYPE_CODE_NAMESPACE, 0, 0,			(char *) processing_current_prefix,			objfile);      TYPE_TAG_NAME (type) = TYPE_NAME (type);      new_symbol (die, type, cu);      die->type = type;      if (is_anonymous)	cp_add_using_directive (processing_current_prefix,				strlen (previous_prefix),				strlen (processing_current_prefix));    }  if (die->child != NULL)    {      struct die_info *child_die = die->child;            while (child_die && child_die->tag)	{	  process_die (child_die, cu);	  child_die = sibling_die (child_die);	}    }  processing_current_prefix = previous_prefix;}