aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-04-18 19:54:47 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-04-18 19:54:47 -0400
commite5dda97187022d04613b9976398cf4996ddbec79 (patch)
tree457de55616d0a5b36da8fc9245663dc3388d31e8
parent09262fffd58c8bb1f474aa64c4120967f38d3d00 (diff)
downloadgcc-e5dda97187022d04613b9976398cf4996ddbec79.zip
gcc-e5dda97187022d04613b9976398cf4996ddbec79.tar.gz
gcc-e5dda97187022d04613b9976398cf4996ddbec79.tar.bz2
re PR c++/48569 (internal compiler error: in build_zero_init_1, at cp/init.c:278)
PR c++/48569 * typeck2.c (build_functional_cast): Handle VOID_TYPE. From-SVN: r172680
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/typeck2.c6
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/init/void1.C6
4 files changed, 16 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index cf21fd6..ec683a2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2011-04-18 Jason Merrill <jason@redhat.com>
+ PR c++/48569
+ * typeck2.c (build_functional_cast): Handle VOID_TYPE.
+
PR c++/48537
* init.c (build_value_init): Handle UNION_TYPE the same.
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index f0b67f7..49f4e7e 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -1566,7 +1566,11 @@ build_functional_cast (tree exp, tree parms, tsubst_flags_t complain)
if (! MAYBE_CLASS_TYPE_P (type))
{
if (parms == NULL_TREE)
- return build_value_init (type, complain);
+ {
+ if (VOID_TYPE_P (type))
+ return void_zero_node;
+ return build_value_init (type, complain);
+ }
/* This must build a C cast. */
parms = build_x_compound_expr_from_list (parms, ELK_FUNC_CAST, complain);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b8e8909..497fd4d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,7 @@
2011-04-18 Jason Merrill <jason@redhat.com>
+ * g++.dg/init/void1.C: New.
+
* g++.dg/cpp0x/union4.C: New.
2011-04-18 Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/testsuite/g++.dg/init/void1.C b/gcc/testsuite/g++.dg/init/void1.C
new file mode 100644
index 0000000..ed41a90
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/void1.C
@@ -0,0 +1,6 @@
+// PR c++/48569
+
+int main()
+{
+ void();
+}