From 959d87966a28c5f67a33db114e4d342fe7072f0c Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sun, 3 May 1998 02:30:57 +0000 Subject: [PATCH] call.c (build_over_call): Do evaluate arg even if it has empty class type. * call.c (build_over_call): Do evaluate arg even if it has empty class type. * decl.c (start_function): Don't push a member function. From-SVN: r19525 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/call.c | 9 ++++++--- gcc/cp/decl.c | 5 +++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8596137cd8d..a1bf5c9abe9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +Sun May 3 01:32:14 1998 Jason Merrill + + * call.c (build_over_call): Do evaluate arg even if it has empty + class type. + * decl.c (start_function): Don't push a member function. + Thu Apr 30 18:59:23 1998 Jim Wilson * Makefile.in (g++FAQ.info): Put -o option before input file. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 5fd81f511bd..0c4326c81d1 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -3363,7 +3363,8 @@ build_over_call (cand, args, flags) /* Don't copy the padding byte; it might not have been allocated if to is a base subobject. */ if (is_empty_class (DECL_CLASS_CONTEXT (fn))) - return to; + return build (COMPOUND_EXPR, TREE_TYPE (to), + cp_convert (void_type_node, arg), to); val = build (INIT_EXPR, DECL_CONTEXT (fn), to, arg); TREE_SIDE_EFFECTS (val) = 1; @@ -3377,12 +3378,14 @@ build_over_call (cand, args, flags) tree to = stabilize_reference (build_indirect_ref (TREE_VALUE (converted_args), 0)); + arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0); + /* Don't copy the padding byte; it might not have been allocated if to is a base subobject. */ if (is_empty_class (DECL_CLASS_CONTEXT (fn))) - return to; + return build (COMPOUND_EXPR, TREE_TYPE (to), + cp_convert (void_type_node, arg), to); - arg = build_indirect_ref (TREE_VALUE (TREE_CHAIN (converted_args)), 0); val = build (MODIFY_EXPR, TREE_TYPE (to), to, arg); TREE_SIDE_EFFECTS (val) = 1; return val; diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 56129f201e0..ede5d3cc14e 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -11620,8 +11620,9 @@ start_function (declspecs, declarator, attrs, pre_parsed_p) else if (pre_parsed_p == 0) { /* A specialization is not used to guide overload resolution. */ - if (flag_guiding_decls - || !DECL_TEMPLATE_SPECIALIZATION (decl1)) + if ((flag_guiding_decls + || !DECL_TEMPLATE_SPECIALIZATION (decl1)) + && ! DECL_FUNCTION_MEMBER_P (decl1)) decl1 = pushdecl (decl1); DECL_MAIN_VARIANT (decl1) = decl1; fntype = TREE_TYPE (decl1); -- 2.30.2