re PR c++/21210 (Trouble with __complex__ types default construction)
authorRoger Sayle <roger@eyesopen.com>
Mon, 12 Jun 2006 18:50:22 +0000 (18:50 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Mon, 12 Jun 2006 18:50:22 +0000 (18:50 +0000)
PR c++/21210
* typeck2.c (build_functional_cast): Use cp_convert to construct
non-aggregate initializers instead of the user-level build_c_cast.

* g++.dg/init/complex1.C: New test case.

From-SVN: r114573

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

index d401f88d79f4a8492beb0ca14284637f32f68590..3dc8225acefd1dee915aaad83a6d698d69d5b4a5 100644 (file)
@@ -1,3 +1,9 @@
+2006-06-12  Roger Sayle  <roger@eyesopen.com>
+
+       PR c++/21210
+       * typeck2.c (build_functional_cast): Use cp_convert to construct
+       non-aggregate initializers instead of the user-level build_c_cast.
+
 2006-06-07  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
        PR c++/27601
index 97d5eaa37be9f754e9cd132921404167781183d7..f4de802c17d6f4e01b38d00c973172c99d9f92af 100644 (file)
@@ -1299,12 +1299,11 @@ build_functional_cast (tree exp, tree parms)
 
   if (! IS_AGGR_TYPE (type))
     {
-      /* This must build a C cast.  */
       if (parms == NULL_TREE)
-       parms = integer_zero_node;
-      else
-       parms = build_x_compound_expr_from_list (parms, "functional cast");
+       return cp_convert (type, integer_zero_node);
 
+      /* This must build a C cast.  */
+      parms = build_x_compound_expr_from_list (parms, "functional cast");
       return build_c_cast (type, parms);
     }
 
index a4fbcd4a7de5410611cbf3589e80e98e500ec719..8e5d2c0be09968885337b3c80563f9b6e472d9f5 100644 (file)
@@ -1,3 +1,8 @@
+2006-06-12  Roger Sayle  <roger@eyesopen.com>
+
+       PR c++/21210
+       * g++.dg/init/complex1.C: New test case.
+
 2006-06-11  Eric Christopher  <echristo@apple.com>
 
        PR middle-end/27948
diff --git a/gcc/testsuite/g++.dg/init/complex1.C b/gcc/testsuite/g++.dg/init/complex1.C
new file mode 100644 (file)
index 0000000..3f88fd9
--- /dev/null
@@ -0,0 +1,7 @@
+/* PR c++/21210 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+typedef float __complex__ fcomplex;
+fcomplex cplx = fcomplex();
+