diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-06-04 00:34:57 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-06-04 00:34:57 +0000 |
commit | a1d45d09a65ffb9c2cf241de759f4847ee05449e (patch) | |
tree | 648ed2cc158463ce2d26af0b903bdc3b87f2baf2 /gcc/cp/method.c | |
parent | 67e40adc76ee3ce1789d0ef889b093c4f5626c6a (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.c | 23 |
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) { |