aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-11-17 08:01:18 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2009-11-17 08:01:18 +0100
commitd22f0231e60287574538fc60f743f9464a0977f4 (patch)
treec23fa36246542f05175ad1153f62b100fbd33868 /gcc/cp
parent84526801f6392b100892c7d4276176174114421f (diff)
downloadgcc-d22f0231e60287574538fc60f743f9464a0977f4.zip
gcc-d22f0231e60287574538fc60f743f9464a0977f4.tar.gz
gcc-d22f0231e60287574538fc60f743f9464a0977f4.tar.bz2
re PR c++/42061 ([c++0x] ICE with invalid initializer list for reference)
PR c++/42061 * call.c (reference_binding): Return NULL for initializer list with error operand inside of it. * g++.dg/cpp0x/initlist27.C: New test. From-SVN: r154238
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/call.c2
2 files changed, 6 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d1db746..4f5f9b5 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2009-11-17 Jakub Jelinek <jakub@redhat.com>
+ PR c++/42061
+ * call.c (reference_binding): Return NULL for initializer list with
+ error operand inside of it.
+
PR c++/42059
* typeck.c (cp_build_modify_expr): For initializer list call
check_array_initializer to make sure lhs isn't a VLA.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index e4a6bca3..e051e90 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -1235,6 +1235,8 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
&& CONSTRUCTOR_NELTS (expr) == 1)
{
expr = CONSTRUCTOR_ELT (expr, 0)->value;
+ if (error_operand_p (expr))
+ return NULL;
from = TREE_TYPE (expr);
}
}