re PR c++/54984 (Array allocated with new in a template class is default initialised)

/cp
2012-10-26  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/54984
	* init.c (build_new): Don't turn a null *init into a pointer to
	empty vector orig_init.

/testsuite
2012-10-26  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/54984
	* g++.dg/template/new11.C: New.

From-SVN: r192846
This commit is contained in:
Paolo Carlini 2012-10-26 14:03:32 +00:00 committed by Paolo Carlini
parent 39aada703b
commit a4bbf9102b
4 changed files with 41 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2012-10-26 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/54984
* init.c (build_new): Don't turn a null *init into a pointer to
empty vector orig_init.
2012-10-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/53761

View File

@ -2911,7 +2911,8 @@ build_new (VEC(tree,gc) **placement, tree type, tree nelts,
orig_placement = make_tree_vector_copy (*placement);
orig_nelts = nelts;
orig_init = make_tree_vector_copy (*init);
if (*init)
orig_init = make_tree_vector_copy (*init);
make_args_non_dependent (*placement);
if (nelts)

View File

@ -1,3 +1,8 @@
2012-10-26 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/54984
* g++.dg/template/new11.C: New.
2012-10-26 Richard Biener <rguenther@suse.de>
PR middle-end/54824

View File

@ -0,0 +1,28 @@
// PR c++/54984
// { dg-do run }
int n = 1;
void* operator new(__SIZE_TYPE__)
{
n = -1;
return &n;
}
template <class T>
struct Foo
{
Foo()
: x(new int)
{
if (*x != -1)
__builtin_abort();
}
int* x;
};
int main()
{
Foo<float> foo;
}