aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2012-10-26 14:03:32 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2012-10-26 14:03:32 +0000
commita4bbf9102beb453e35cbe49e644129a7e111da2f (patch)
treea0937b5651dc906415dc19437170d0a1133103de /gcc
parent39aada703b3852c373ad5b7c9f8d9bf9e73f40ad (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/init.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/new11.C28
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;
+}