summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2012-12-07 04:53:46 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2012-12-07 04:53:46 +0000
commit7b82ab7f6bfdd7699732f5c1fc0d9873f6f625f7 (patch)
treeff9846a31edd88ec6b391200581f81d67e77189d
parenta0f9a401114dd35a26cb1db70b9b2f0f9a288565 (diff)
downloadppe42-gcc-7b82ab7f6bfdd7699732f5c1fc0d9873f6f625f7.tar.gz
ppe42-gcc-7b82ab7f6bfdd7699732f5c1fc0d9873f6f625f7.zip
PR c++/55249
* tree.c (build_vec_init_elt): Use the type of the initializer. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194281 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/tree.c3
-rw-r--r--gcc/testsuite/g++.dg/template/array25.C18
3 files changed, 23 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index bcad0c24636..22bdb505942 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2012-12-06 Jason Merrill <jason@redhat.com>
+ PR c++/55249
+ * tree.c (build_vec_init_elt): Use the type of the initializer.
+
PR c++/54744
* pt.c (resolve_typename_type): Check TYPENAME_IS_RESOLVING_P on scope.
* init.c (expand_member_init): Check for being in a template first.
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 58725f3bd58..28ff0f20eb1 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -524,7 +524,8 @@ build_vec_init_elt (tree type, tree init, tsubst_flags_t complain)
argvec = make_tree_vector ();
if (init)
{
- tree dummy = build_dummy_object (inner_type);
+ tree init_type = strip_array_types (TREE_TYPE (init));
+ tree dummy = build_dummy_object (init_type);
if (!real_lvalue_p (init))
dummy = move (dummy);
argvec->quick_push (dummy);
diff --git a/gcc/testsuite/g++.dg/template/array25.C b/gcc/testsuite/g++.dg/template/array25.C
new file mode 100644
index 00000000000..4f3ccbf702d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/array25.C
@@ -0,0 +1,18 @@
+// PR c++/55249
+
+template <typename _Tp> struct A
+{
+ _Tp _M_instance[1];
+};
+template <class> struct inner_type
+{
+ inner_type () {}
+ inner_type (inner_type &);
+ inner_type (const inner_type &) {}
+};
+
+int
+main ()
+{
+ A <inner_type <int> > a, b = a;
+}
OpenPOWER on IntegriCloud