From bfa091eeca8305aee66359c5333e854ad3f2ddc1 Mon Sep 17 00:00:00 2001 From: glisse Date: Fri, 3 Aug 2012 12:00:43 +0000 Subject: [PATCH] gcc/cp/ChangeLog 2012-08-03 Marc Glisse * pt.c (tsubst_copy_and_build): Handle VECTOR_TYPE like scalars. * cp-tree.h (scalarish_type_p): Declare. * tree.c (scalarish_type_p): Make non-static. gcc/testsuite/ChangeLog 2012-08-03 Marc Glisse * g++.dg/ext/vector17.C: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190123 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/cp-tree.h | 1 + gcc/cp/pt.c | 2 +- gcc/cp/tree.c | 2 +- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/ext/vector17.C | 12 ++++++++++++ 6 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/vector17.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 92c9db1..f57769d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-08-03 Marc Glisse + + * pt.c (tsubst_copy_and_build): Handle VECTOR_TYPE like scalars. + * cp-tree.h (scalarish_type_p): Declare. + * tree.c (scalarish_type_p): Make non-static. + 2012-08-02 Jason Merrill Paolo Carlini diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index e40f114..44f3ac1 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -5697,6 +5697,7 @@ extern bool layout_pod_type_p (const_tree); extern bool std_layout_type_p (const_tree); extern bool trivial_type_p (const_tree); extern bool trivially_copyable_p (const_tree); +extern bool scalarish_type_p (const_tree); extern bool type_has_nontrivial_default_init (const_tree); extern bool type_has_nontrivial_copy_init (const_tree); extern bool class_tmpl_impl_spec_p (const_tree); diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 2ae576d..ad81bab 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -13851,7 +13851,7 @@ tsubst_copy_and_build (tree t, /* We can't do much here. */; else if (!CLASS_TYPE_P (object_type)) { - if (SCALAR_TYPE_P (object_type)) + if (scalarish_type_p (object_type)) { tree s = NULL_TREE; tree dtor = member; diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 26e7fce..bfbde04 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2818,7 +2818,7 @@ is_dummy_object (const_tree ob) /* Returns 1 iff type T is something we want to treat as a scalar type for the purpose of deciding whether it is trivial/POD/standard-layout. */ -static bool +bool scalarish_type_p (const_tree t) { if (t == error_mark_node) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 78a829a..cde4e40 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-08-03 Marc Glisse + + * g++.dg/ext/vector17.C: New testcase. + 2012-08-02 Richard Sandiford PR target/51931 diff --git a/gcc/testsuite/g++.dg/ext/vector17.C b/gcc/testsuite/g++.dg/ext/vector17.C new file mode 100644 index 0000000..eb389be --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/vector17.C @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +typedef double __attribute__((vector_size(1024) )) vec; + +template +void f (T *p) +{ + p->~T(); +} +void g (vec *p) +{ + f(p); +} -- 2.7.4