]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/21210 (Trouble with __complex__ types default construction)
authorRoger Sayle <roger@eyesopen.com>
Wed, 14 Jun 2006 04:35:29 +0000 (04:35 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Wed, 14 Jun 2006 04:35:29 +0000 (04:35 +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: r114634

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

index e31cec2f923b840100293299ee7098b9b042b097..e6604f7ff05b3b6337ea24d0b977da4a43d70a6d 100644 (file)
@@ -1,3 +1,9 @@
+2006-06-13  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-12  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
        PR c++/27601
index e6c35edcdcfc20985227aa6b3b059cf84de741b6..c0610171a8e24b967dd346fb1dc874dffc41a4a5 100644 (file)
@@ -1386,12 +1386,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 2c0dec4dd20203a72e02806483c69736aa21e1fa..d9f9b79a6fcc9809e335c66b7698273ff285db0e 100644 (file)
@@ -1,3 +1,8 @@
+2006-06-13  Roger Sayle  <roger@eyesopen.com>
+
+       PR c++/21210
+       * g++.dg/init/complex1.C: New test case.
+
 2006-06-12  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
        PR c++/27601
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();
+