From 09191b7e58bac3c38e7e69ff235d15df4561bef7 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Mon, 23 Apr 2007 12:10:20 +0200 Subject: [PATCH] decl2.c (finish_objects): Do not call target constructor/destructor bits dirrectly. * cp/decl2.c (finish_objects): Do not call target constructor/destructor bits dirrectly. From-SVN: r124062 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl2.c | 24 ++++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 326ed7025eb..1b19ffca397 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2007-04-23 Jan Hubicka + + * cp/decl2.c (finish_objects): Do not call target constructor/destructor + bits dirrectly. + 2007-04-21 Andrew Pinski * cp-tree.h (lang_tree_node): Use GENERIC_NEXT diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 54d5aa22939..41778283236 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2363,23 +2363,19 @@ finish_objects (int method_type, int initp, tree body) /* Finish up. */ finish_compound_stmt (body); fn = finish_function (0); - expand_or_defer_fn (fn); - /* When only doing semantic analysis, and no RTL generation, we - can't call functions that directly emit assembly code; there is - no assembly file in which to put the code. */ - if (flag_syntax_only) - return; - - if (targetm.have_ctors_dtors) + if (method_type == 'I') { - rtx fnsym = XEXP (DECL_RTL (fn), 0); - cgraph_mark_needed_node (cgraph_node (fn)); - if (method_type == 'I') - (* targetm.asm_out.constructor) (fnsym, initp); - else - (* targetm.asm_out.destructor) (fnsym, initp); + DECL_STATIC_CONSTRUCTOR (fn) = 1; + decl_init_priority_insert (fn, initp); } + else + { + DECL_STATIC_DESTRUCTOR (fn) = 1; + decl_fini_priority_insert (fn, initp); + } + + expand_or_defer_fn (fn); } /* The names of the parameters to the function created to handle