ieee_error (info, start, "C++ reference not found");
ieee_error (info, start, _("C++ reference not found"));
ieee_read_reference (info, pp)     struct ieee_info *info;     const bfd_byte **pp;{  const bfd_byte *start;  bfd_vma flags;  const char *class, *name;  unsigned long classlen, namlen;  debug_type *pslot;  debug_type target;  start = *pp;  if (! ieee_require_asn (info, pp, &flags))    return false;  /* Giving the class name before the member name is in an addendum to     the spec.  */  if (flags == 3)    {      if (! ieee_require_atn65 (info, pp, &class, &classlen))	return false;    }  if (! ieee_require_atn65 (info, pp, &name, &namlen))    return false;  pslot = NULL;  if (flags != 3)    {      int pass;      /* We search from the last variable indices to the first in	 hopes of finding local variables correctly.  We search the	 local variables on the first pass, and the global variables	 on the second.  FIXME: This probably won't work in all cases.	 On the other hand, I don't know what will.  */      for (pass = 0; pass < 2; pass++)	{	  struct ieee_vars *vars;	  int i;	  struct ieee_var *pv = NULL;	  if (pass == 0)	    vars = &info->vars;	  else	    {	      vars = info->global_vars;	      if (vars == NULL)		break;	    }	  for (i = (int) vars->alloc - 1; i >= 0; i--)	    {	      boolean found;	      pv = vars->vars + i;	      if (pv->pslot == NULL		  || pv->namlen != namlen		  || strncmp (pv->name, name, namlen) != 0)		continue;	      found = false;	      switch (flags)		{		default:		  ieee_error (info, start,			      "unrecognized C++ reference type");		  return false;		case 0:		  /* Global variable or function.  */		  if (pv->kind == IEEE_GLOBAL		      || pv->kind == IEEE_EXTERNAL		      || pv->kind == IEEE_FUNCTION)		    found = true;		  break;		case 1:		  /* Global static variable or function.  */		  if (pv->kind == IEEE_STATIC		      || pv->kind == IEEE_FUNCTION)		    found = true;		  break;		case 2:		  /* Local variable.  */		  if (pv->kind == IEEE_LOCAL)		    found = true;		  break;		}	      if (found)		break;	    }	  if (i >= 0)	    {	      pslot = pv->pslot;	      break;	    }	}    }  else    {      struct ieee_tag *it;      for (it = info->tags; it != NULL; it = it->next)	{	  if (it->name[0] == class[0]	      && strncmp (it->name, class, classlen) == 0	      && strlen (it->name) == classlen)	    {	      if (it->fslots != NULL)		{		  const debug_field *pf;		  unsigned int findx;		  pf = debug_get_fields (info->dhandle, it->type);		  if (pf == NULL)		    {		      ieee_error (info, start,				  "C++ reference in class with no fields");		      return false;		    }		  for (findx = 0; *pf != DEBUG_FIELD_NULL; pf++, findx++)		    {		      const char *fname;		      fname = debug_get_field_name (info->dhandle, *pf);		      if (fname == NULL)			return false;		      if (strncmp (fname, name, namlen) == 0			  && strlen (fname) == namlen)			{			  pslot = it->fslots + findx;			  break;			}		    }		}	      break;	    }	}    }  if (pslot == NULL)    {      ieee_error (info, start, "C++ reference not found");      return false;    }  /* We allocated the type of the object as an indirect type pointing     to *pslot, which we can now update to be a reference type.  */  if (debug_get_type_kind (info->dhandle, *pslot) != DEBUG_KIND_POINTER)    {      ieee_error (info, start, "C++ reference is not pointer");      return false;    }  target = debug_get_target_type (info->dhandle, *pslot);  *pslot = debug_make_reference_type (info->dhandle, target);  if (*pslot == DEBUG_TYPE_NULL)    return false;  return true;}