re PR c++/60367 (Default argument object is not getting constructed)

PR c++/60367
	* call.c (convert_default_arg): Remove special handling for
	CONSTRUCTOR.

From-SVN: r208465
This commit is contained in:
Jason Merrill 2014-03-10 17:06:59 -04:00 committed by Jason Merrill
parent e5dddc50ba
commit 4a4e80cb6e
3 changed files with 30 additions and 14 deletions

View File

@ -1,5 +1,9 @@
2014-03-10 Jason Merrill <jason@redhat.com>
PR c++/60367
* call.c (convert_default_arg): Remove special handling for
CONSTRUCTOR.
PR c++/53492
* parser.c (cp_parser_class_head): Also check PRIMARY_TEMPLATE_P
when deciding whether to call push_template_decl for a member class.

View File

@ -6531,20 +6531,10 @@ convert_default_arg (tree type, tree arg, tree fn, int parmnum,
/* We must make a copy of ARG, in case subsequent processing
alters any part of it. */
arg = break_out_target_exprs (arg);
if (TREE_CODE (arg) == CONSTRUCTOR)
{
arg = digest_init (type, arg, complain);
arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
ICR_DEFAULT_ARGUMENT, fn, parmnum,
complain);
}
else
{
arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
ICR_DEFAULT_ARGUMENT, fn, parmnum,
complain);
arg = convert_for_arg_passing (type, arg, complain);
}
arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
ICR_DEFAULT_ARGUMENT, fn, parmnum,
complain);
arg = convert_for_arg_passing (type, arg, complain);
pop_deferring_access_checks();
pop_defarg_context ();

View File

@ -0,0 +1,22 @@
// PR c++/60367
// { dg-do run { target c++11 } }
extern "C" int printf (const char *, ...);
extern "C" void abort();
void *p;
struct foo {
foo() { p = this; }
foo (const foo &) { abort(); }
~foo() { if (p != this) abort(); }
};
void do_something( foo f = {} )
{
if (&f != p) abort();
}
int main()
{
do_something();
}