From a4bbf9102beb453e35cbe49e644129a7e111da2f Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 26 Oct 2012 14:03:32 +0000 Subject: [PATCH] re PR c++/54984 (Array allocated with new in a template class is default initialised) /cp 2012-10-26 Paolo Carlini 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 PR c++/54984 * g++.dg/template/new11.C: New. From-SVN: r192846 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/init.c | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/new11.C | 28 +++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/new11.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3cd3b27bc17..1a94fb366bd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-10-26 Paolo Carlini + + 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 PR c++/53761 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 044603887e8..013b01eeb87 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 c3badec964f..75cbf7b2dc0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-10-26 Paolo Carlini + + PR c++/54984 + * g++.dg/template/new11.C: New. + 2012-10-26 Richard Biener 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 00000000000..76f6c66997f --- /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 +struct Foo +{ + Foo() + : x(new int) + { + if (*x != -1) + __builtin_abort(); + } + + int* x; +}; + +int main() +{ + Foo foo; +} -- 2.30.2