diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2012-10-26 14:03:32 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2012-10-26 14:03:32 +0000 |
commit | a4bbf9102beb453e35cbe49e644129a7e111da2f (patch) | |
tree | a0937b5651dc906415dc19437170d0a1133103de /gcc | |
parent | 39aada703b3852c373ad5b7c9f8d9bf9e73f40ad (diff) | |
download | gcc-a4bbf9102beb453e35cbe49e644129a7e111da2f.zip gcc-a4bbf9102beb453e35cbe49e644129a7e111da2f.tar.gz gcc-a4bbf9102beb453e35cbe49e644129a7e111da2f.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/init.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/new11.C | 28 |
4 files changed, 41 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3cd3b27..1a94fb3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 0446038..013b01e 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c3badec..75cbf7b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/g++.dg/template/new11.C b/gcc/testsuite/g++.dg/template/new11.C new file mode 100644 index 0000000..76f6c66 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/new11.C @@ -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; +} |