aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@gcc.gnu.org>2012-12-06 19:54:25 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2012-12-06 19:54:25 +0100
commit947f720f7d7ca03f642e8682a97cb667bd343569 (patch)
tree55e78ab15a9de9403f54bc9912e06c048c093bfa /gcc
parent3157880f5368588bfadae12c4ba1b52c4fdee75a (diff)
downloadgcc-947f720f7d7ca03f642e8682a97cb667bd343569.zip
gcc-947f720f7d7ca03f642e8682a97cb667bd343569.tar.gz
gcc-947f720f7d7ca03f642e8682a97cb667bd343569.tar.bz2
re PR c++/55573 (ICE in adjust_temp_type, at cp/semantics.c:6454)
PR c++/55573 * semantics.c (adjust_temp_type): Handle VECTOR_CST. * g++.dg/cpp0x/constexpr-55573.C: New test. From-SVN: r194262
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/semantics.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-55573.C22
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 96a88b9..23a0a92 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 53e849a..2483267 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 ce14c92..1912926 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 0000000..1988253
--- /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});