aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/method.c
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>1998-06-04 00:34:57 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>1998-06-04 00:34:57 +0000
commita1d45d09a65ffb9c2cf241de759f4847ee05449e (patch)
tree648ed2cc158463ce2d26af0b903bdc3b87f2baf2 /gcc/cp/method.c
parent67e40adc76ee3ce1789d0ef889b093c4f5626c6a (diff)
* method.c (make_thunk): Use overload machinery to make name.
* search.c (covariant_return_p): New fn. (get_matching_virtual): Use it. * init.c (build_new_1): Fix check for void. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@20215 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/method.c')
-rw-r--r--gcc/cp/method.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index effaf333d83..cc01371a5c6 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1917,23 +1917,30 @@ make_thunk (function, delta)
tree function;
int delta;
{
- char *buffer;
tree thunk_id;
tree thunk;
- char *func_name;
tree func_decl;
+
if (TREE_CODE (function) != ADDR_EXPR)
abort ();
func_decl = TREE_OPERAND (function, 0);
if (TREE_CODE (func_decl) != FUNCTION_DECL)
abort ();
- func_name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (func_decl));
- buffer = (char *)alloca (strlen (func_name) + 32);
- if (delta<=0)
- sprintf (buffer, "__thunk_%d_%s", -delta, func_name);
+
+ OB_INIT ();
+ OB_PUTS ("__thunk_");
+ if (delta > 0)
+ {
+ OB_PUTC ('n');
+ icat (delta);
+ }
else
- sprintf (buffer, "__thunk_n%d_%s", delta, func_name);
- thunk_id = get_identifier (buffer);
+ icat (-delta);
+ OB_PUTC ('_');
+ OB_PUTID (DECL_ASSEMBLER_NAME (func_decl));
+ OB_FINISH ();
+ thunk_id = get_identifier (obstack_base (&scratch_obstack));
+
thunk = IDENTIFIER_GLOBAL_VALUE (thunk_id);
if (thunk && TREE_CODE (thunk) != THUNK_DECL)
{