]> gcc.gnu.org Git - gcc.git/commitdiff
re PR c++/29039 (implicitly defined constructor for class with reference member)
authorMark Mitchell <mark@codesourcery.com>
Tue, 17 Oct 2006 22:35:29 +0000 (22:35 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 17 Oct 2006 22:35:29 +0000 (22:35 +0000)
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

gcc/cp/ChangeLog
gcc/cp/method.c
gcc/cp/typeck2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/init/ctor8.C [new file with mode: 0644]

index 47285866dc6608cfe7d42e3cd0e3e6abc7a35be3..b759ba42580f5acb402b4b6b6e848b11ee88fc1f 100644 (file)
@@ -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>
 
        PR c++/27270
index e2106fff55c26d697c06f6d04091339081eb0b92..ded0af04716195968aaefb6040a72b925646f87b 100644 (file)
@@ -784,7 +784,7 @@ synthesize_method (tree fndecl)
       tree arg_chain = FUNCTION_FIRST_USER_PARMTYPE (fndecl);
       if (arg_chain != void_list_node)
        do_build_copy_constructor (fndecl);
-      else if (TYPE_NEEDS_CONSTRUCTING (current_class_type))
+      else
        finish_mem_initializers (NULL_TREE);
     }
 
index 725c85fa59718d328b76c3fc536b4383947c3717..12987cfab1e63422d01c6641118498a88d91a125 100644 (file)
@@ -1333,9 +1333,9 @@ build_functional_cast (tree exp, tree parms)
   if (parms && TREE_CHAIN (parms) == NULL_TREE)
     return build_c_cast (type, TREE_VALUE (parms));
 
-  /* We need to zero-initialize POD types.  Let's do that for everything
-     that doesn't need a constructor.  */
-  if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
+  /* We need to zero-initialize POD types.  */
+  if (parms == NULL_TREE 
+      && !CLASSTYPE_NON_POD_P (type)
       && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
     {
       exp = build_constructor (type, NULL);
index 4fed928d1caddcdee2befeaf65d20953d9e718f4..57ec350bd8500dcec5575b78545db3099ed467a2 100644 (file)
@@ -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>
 
        PR c++/27270
diff --git a/gcc/testsuite/g++.dg/init/ctor8.C b/gcc/testsuite/g++.dg/init/ctor8.C
new file mode 100644 (file)
index 0000000..9723892
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/29039
+
+typedef struct S { // { dg-error "reference" }
+  int &r; 
+};
+
+S f () {
+  return S (); // { dg-error "synthesized" }
+}
+
+
This page took 0.174459 seconds and 5 git commands to generate.