diff options
| author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-12-06 18:54:25 +0000 |
|---|---|---|
| committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-12-06 18:54:25 +0000 |
| commit | 02e4455f8abc65d3bed025ea768cbd1c6cd24ad6 (patch) | |
| tree | 55e78ab15a9de9403f54bc9912e06c048c093bfa | |
| parent | 679cd4969558a48e9853b818b34df696d6445a64 (diff) | |
| download | ppe42-gcc-02e4455f8abc65d3bed025ea768cbd1c6cd24ad6.tar.gz ppe42-gcc-02e4455f8abc65d3bed025ea768cbd1c6cd24ad6.zip | |
PR c++/55573
* semantics.c (adjust_temp_type): Handle VECTOR_CST.
* g++.dg/cpp0x/constexpr-55573.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194262 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/cp/semantics.c | 2 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-55573.C | 22 |
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 96a88b92b19..23a0a9267dd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2012-12-06 Marc Glisse <marc.glisse@inria.fr> + + PR c++/55573 + * semantics.c (adjust_temp_type): Handle VECTOR_CST. + 2012-12-06 Jason Merrill <jason@redhat.com> PR c++/54947 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 53e849afbef..24832673386 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -6451,7 +6451,7 @@ adjust_temp_type (tree type, tree temp) /* Avoid wrapping an aggregate value in a NOP_EXPR. */ if (TREE_CODE (temp) == CONSTRUCTOR) return build_constructor (type, CONSTRUCTOR_ELTS (temp)); - gcc_assert (SCALAR_TYPE_P (type)); + gcc_assert (scalarish_type_p (type)); return cp_fold_convert (type, temp); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ce14c922f04..1912926e386 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2012-12-06 Jakub Jelinek <jakub@redhat.com> + PR c++/55573 + * g++.dg/cpp0x/constexpr-55573.C: New test. + +2012-12-06 Jakub Jelinek <jakub@redhat.com> + PR c++/55137 * g++.dg/opt/pr55137.C: New test. * gcc.c-torture/execute/pr55137.c: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-55573.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-55573.C new file mode 100644 index 00000000000..1988253008e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-55573.C @@ -0,0 +1,22 @@ +// PR c++/55573 +// { dg-do compile } +// { dg-options "-std=gnu++11" } + +template <typename T, int N> +struct ExtVecTraits { + typedef T __attribute__((vector_size (N * sizeof (T)))) type; +}; + +template <typename T> +using Vec4 = typename ExtVecTraits<T,4>::type; + +template <typename T> +struct Rot3 +{ + typedef Vec4<T> Vec; + Vec axis[3]; + constexpr Rot3 (Vec4<T> ix, Vec4<T> iy, Vec4<T> iz) : axis {ix, iy, iz} {} +}; + +typedef Vec4<float> Vec; +Rot3<float> r2 ((Vec) {0, 1, 0, 0}, (Vec){0, 0, 1, 0}, (Vec){1, 0, 0, 0}); |

