From 6723181663a87a735bdfdf2e16a6bd41dbc30be1 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 21 Sep 2001 09:58:22 -0700 Subject: tree.def (FDESC_EXPR): New. gcc/ * tree.def (FDESC_EXPR): New. * expr.c (expand_expr): Handle it. * varasm.c (initializer_constant_valid_p): Likewise. (output_constant): Likewise. * defaults.h (TARGET_VTABLE_USES_DESCRIPTORS): New. * config/ia64/ia64.h (TARGET_VTABLE_USES_DESCRIPTORS): New. (ASM_OUTPUT_FDESC): New. * doc/tm.texi: Document the new macros. gcc/cp/ * class.c (set_vindex): Mind TARGET_VTABLE_USES_DESCRIPTORS. (build_vtbl_initializer): Likewise. (build_vfn_ref): New. * cp-tree.h: Declare it. * call.c (build_over_call): Use it. * decl2.c (mark_vtable_entries): Mark FDESC_EXPR. * typeck.c (get_member_function_from_ptrfunc): Mind descriptors. gcc/java/ * class.c (get_dispatch_table): Handle function descriptors. (build_dtable_decl): Likewise. * expr.c (build_invokevirtual): Likewise. gcc/testsuite/ * g++.old-deja/g++.abi/ptrmem.C: Update for ia64 c++ abi. * g++.old-deja/g++.abi/vtable2.C: Likewise. From-SVN: r45733 --- gcc/varasm.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'gcc/varasm.c') diff --git a/gcc/varasm.c b/gcc/varasm.c index f00b596..72ec1a2 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -4277,6 +4277,7 @@ initializer_constant_valid_p (value, endtype) return null_pointer_node; case ADDR_EXPR: + case FDESC_EXPR: return staticp (TREE_OPERAND (value, 0)) ? TREE_OPERAND (value, 0) : 0; case NON_LVALUE_EXPR: @@ -4469,6 +4470,18 @@ output_constant (exp, size, align) return; } + if (TREE_CODE (exp) == FDESC_EXPR) + { + HOST_WIDE_INT part = tree_low_cst (TREE_OPERAND (exp, 1), 0); + tree decl = TREE_OPERAND (exp, 0); +#ifdef ASM_OUTPUT_FDESC + ASM_OUTPUT_FDESC (asm_out_file, decl, part); +#else + abort (); +#endif + return; + } + switch (code) { case CHAR_TYPE: -- cgit v1.1