re PR c++/29039 (implicitly defined constructor for class with reference member)
PR c++/29039 * typeck2.c (build_functional_cast): Don't zero-initialize non-PODs; instead, call their constructors. * method.c (synthesize_method): Always build mem-initializers, if we're synthesizing the default constructor. PR c++/29039 * g++.dg/init/ctor8.C: New test. From-SVN: r117834
This commit is contained in:
parent
05b22df961
commit
c7b0e0273e
@ -1,3 +1,11 @@
|
|||||||
|
2006-10-17 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
PR c++/29039
|
||||||
|
* typeck2.c (build_functional_cast): Don't zero-initialize
|
||||||
|
non-PODs; instead, call their constructors.
|
||||||
|
* method.c (synthesize_method): Always build mem-initializers, if
|
||||||
|
we're synthesizing the default constructor.
|
||||||
|
|
||||||
2006-10-17 Mark Mitchell <mark@codesourcery.com>
|
2006-10-17 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
PR c++/27270
|
PR c++/27270
|
||||||
|
@ -784,7 +784,7 @@ synthesize_method (tree fndecl)
|
|||||||
tree arg_chain = FUNCTION_FIRST_USER_PARMTYPE (fndecl);
|
tree arg_chain = FUNCTION_FIRST_USER_PARMTYPE (fndecl);
|
||||||
if (arg_chain != void_list_node)
|
if (arg_chain != void_list_node)
|
||||||
do_build_copy_constructor (fndecl);
|
do_build_copy_constructor (fndecl);
|
||||||
else if (TYPE_NEEDS_CONSTRUCTING (current_class_type))
|
else
|
||||||
finish_mem_initializers (NULL_TREE);
|
finish_mem_initializers (NULL_TREE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1333,9 +1333,9 @@ build_functional_cast (tree exp, tree parms)
|
|||||||
if (parms && TREE_CHAIN (parms) == NULL_TREE)
|
if (parms && TREE_CHAIN (parms) == NULL_TREE)
|
||||||
return build_c_cast (type, TREE_VALUE (parms));
|
return build_c_cast (type, TREE_VALUE (parms));
|
||||||
|
|
||||||
/* We need to zero-initialize POD types. Let's do that for everything
|
/* We need to zero-initialize POD types. */
|
||||||
that doesn't need a constructor. */
|
if (parms == NULL_TREE
|
||||||
if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
|
&& !CLASSTYPE_NON_POD_P (type)
|
||||||
&& TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
|
&& TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
|
||||||
{
|
{
|
||||||
exp = build_constructor (type, NULL);
|
exp = build_constructor (type, NULL);
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2006-10-17 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
PR c++/29039
|
||||||
|
* g++.dg/init/ctor8.C: New test.
|
||||||
|
|
||||||
2006-10-17 Mark Mitchell <mark@codesourcery.com>
|
2006-10-17 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
PR c++/27270
|
PR c++/27270
|
||||||
|
11
gcc/testsuite/g++.dg/init/ctor8.C
Normal file
11
gcc/testsuite/g++.dg/init/ctor8.C
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// PR c++/29039
|
||||||
|
|
||||||
|
typedef struct S { // { dg-error "reference" }
|
||||||
|
int &r;
|
||||||
|
};
|
||||||
|
|
||||||
|
S f () {
|
||||||
|
return S (); // { dg-error "synthesized" }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user