PR c++/78193 - inherited ctor regressions on sparc32.
* call.c (build_over_call): Don't set CALL_FROM_THUNK_P here. (build_call_a): Set it here, and don't insert EMPTY_CLASS_EXPR. (convert_like_real) [ck_rvalue]: Also pass non-addressable types along directly. From-SVN: r242573
This commit is contained in:
parent
e389ba3073
commit
c2f2350e9b
|
@ -1,3 +1,11 @@
|
|||
2016-11-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/78193 - inherited ctor regressions on sparc32.
|
||||
* call.c (build_over_call): Don't set CALL_FROM_THUNK_P here.
|
||||
(build_call_a): Set it here, and don't insert EMPTY_CLASS_EXPR.
|
||||
(convert_like_real) [ck_rvalue]: Also pass non-addressable
|
||||
types along directly.
|
||||
|
||||
2016-11-17 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/55080
|
||||
|
|
|
@ -375,10 +375,18 @@ build_call_a (tree function, int n, tree *argarray)
|
|||
|
||||
TREE_HAS_CONSTRUCTOR (function) = (decl && DECL_CONSTRUCTOR_P (decl));
|
||||
|
||||
if (current_function_decl && decl
|
||||
&& flag_new_inheriting_ctors
|
||||
&& DECL_INHERITED_CTOR (current_function_decl)
|
||||
&& (DECL_INHERITED_CTOR (current_function_decl)
|
||||
== DECL_CLONED_FUNCTION (decl)))
|
||||
/* Pass arguments directly to the inherited constructor. */
|
||||
CALL_FROM_THUNK_P (function) = true;
|
||||
|
||||
/* Don't pass empty class objects by value. This is useful
|
||||
for tags in STL, which are used to control overload resolution.
|
||||
We don't need to handle other cases of copying empty classes. */
|
||||
if (! decl || ! DECL_BUILT_IN (decl))
|
||||
else if (! decl || ! DECL_BUILT_IN (decl))
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
tree arg = CALL_EXPR_ARG (function, i);
|
||||
|
@ -6844,8 +6852,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
|
|||
constructor. */
|
||||
if (current_function_decl
|
||||
&& flag_new_inheriting_ctors
|
||||
&& DECL_INHERITED_CTOR (current_function_decl)
|
||||
&& TREE_ADDRESSABLE (totype))
|
||||
&& DECL_INHERITED_CTOR (current_function_decl))
|
||||
return expr;
|
||||
|
||||
/* Fall through. */
|
||||
|
@ -8094,13 +8101,6 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
|
|||
/* build_new_op_1 will clear this when appropriate. */
|
||||
CALL_EXPR_ORDERED_ARGS (c) = true;
|
||||
}
|
||||
if (current_function_decl
|
||||
&& flag_new_inheriting_ctors
|
||||
&& DECL_INHERITED_CTOR (current_function_decl)
|
||||
&& cand->num_convs)
|
||||
/* Don't introduce copies when passing arguments along to the inherited
|
||||
constructor. */
|
||||
CALL_FROM_THUNK_P (call) = true;
|
||||
return call;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue