re PR c++/44045 (initialization of array of shared_ptr's with initializer list causes compiler segfault)

PR c++/44045
	* typeck.c (cp_build_modify_expr): Complain about assignment to
	array from init list.

From-SVN: r159243
This commit is contained in:
Jason Merrill 2010-05-10 14:37:56 -04:00 committed by Jason Merrill
parent 34655c9e68
commit eaa9d009d8
6 changed files with 34 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2010-05-10 Jason Merrill <jason@redhat.com>
PR c++/44045
* typeck.c (cp_build_modify_expr): Complain about assignment to
array from init list.
2010-05-10 Fabien Chêne <fabien.chene@gmail.com>
PR c++/43719

View File

@ -6634,6 +6634,12 @@ cp_build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs,
if (BRACE_ENCLOSED_INITIALIZER_P (newrhs))
{
if (modifycode != INIT_EXPR)
{
if (complain & tf_error)
error ("assigning to an array from an initializer list");
return error_mark_node;
}
if (check_array_initializer (lhs, lhstype, newrhs))
return error_mark_node;
newrhs = digest_init (lhstype, newrhs);

View File

@ -1,3 +1,10 @@
2010-05-10 Jason Merrill <jason@redhat.com>
PR c++/44045
* g++.dg/cpp0x/initlist33.C: New.
* g++.dg/cpp0x/initlist26.C: Adjust.
* g++.dg/cpp0x/initlist28.C: Adjust.
2010-05-10 Fabien Chêne <fabien.chene@gmail.com>
PR c++/43719

View File

@ -6,5 +6,5 @@ void
foo (int i)
{
int a[i];
a = { }; // { dg-error "may not be initialized" }
a = { }; // { dg-error "assign" }
}

View File

@ -4,5 +4,5 @@
void foo()
{
int a[1];
throw a = {}; // { dg-error "invalid use of non-lvalue array" }
throw a = {}; // { dg-error "assign" }
}

View File

@ -0,0 +1,13 @@
// PR c++/44045
// { dg-options "-std=c++0x" }
struct base
{
virtual ~base() { }
};
int main()
{
base ptr_array[1];
ptr_array = { base() }; // { dg-error "assign" }
}