https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90036
--- Comment #8 from Jeffrey A. Law <law at redhat dot com> ---
extern int sprintf (char *__restrict __s,
const char *__restrict __format, ...)
__attribute__ ((__nothrow__));
typedef int bfd_boolean;
struct stab_type_stack
{
long index;
bfd_boolean definition;
};
struct stab_write_handle
{
struct stab_type_stack *type_stack;
};
extern char *stab_pop_type (struct stab_write_handle *);
bfd_boolean stab_start_struct_type (void *, const char *, unsigned int,
bfd_boolean, unsigned int);
bfd_boolean
stab_start_class_type (void *p, const char *tag, unsigned int id,
bfd_boolean structp, unsigned int size,
bfd_boolean vptr, bfd_boolean ownvptr)
{
struct stab_write_handle *info = (struct stab_write_handle *) p;
bfd_boolean definition;
char *vstring;
if (!vptr || ownvptr)
{
definition = 0;
vstring = ((void *) 0);
}
else
{
definition = info->type_stack->definition;
vstring = stab_pop_type (info);
}
if (vptr)
{
if (ownvptr)
{
sprintf (p, "~%%%ld", info->type_stack->index);
}
else
{
sprintf (p, "~%%%s", vstring);
}
}
if (definition)
info->type_stack->definition = 1;
return 1;
}