aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-10-10 22:11:21 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-10-10 22:11:21 +0200
commitc9a0dec5eeba1d8f8cd94506e7e51fe8d3bfc51e (patch)
treea67269dbbcbf0b0f579d9321980d2ad75c572df1 /gcc
parentaaf58ab1739d7d1ca2a6c2e2396d70a2dbfe6f79 (diff)
downloadgcc-c9a0dec5eeba1d8f8cd94506e7e51fe8d3bfc51e.zip
gcc-c9a0dec5eeba1d8f8cd94506e7e51fe8d3bfc51e.tar.gz
gcc-c9a0dec5eeba1d8f8cd94506e7e51fe8d3bfc51e.tar.bz2
re PR middle-end/70887 (internal compiler error in trunc_int_for_mode, at explow.c:78)
2017-10-10 Jakub Jelinek <jakub@redhat.com> PR middle-end/70887 * g++.dg/cpp0x/pr70887.C: New test. From-SVN: r253616
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr70887.C31
2 files changed, 34 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 43fb756..3dcc261 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2017-10-10 Jakub Jelinek <jakub@redhat.com>
+ PR middle-end/70887
+ * g++.dg/cpp0x/pr70887.C: New test.
+
PR c++/70338
* g++.dg/cpp0x/pr70338.C: New test.
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr70887.C b/gcc/testsuite/g++.dg/cpp0x/pr70887.C
new file mode 100644
index 0000000..f5b31b2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr70887.C
@@ -0,0 +1,31 @@
+// PR middle-end/70887
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && c++11 } } }
+// { dg-options "-O2 -msse2" }
+
+#include <x86intrin.h>
+
+enum R { S };
+template <R> struct C { static constexpr int value = 10; };
+template <typename R, template <R> class T, R... r>
+struct A {
+ template <int, R...> struct B;
+ template <int N, R M, R... O>
+ struct B<N, M, O...> {
+ static constexpr int d = T<M>::value;
+ static __m128i generate()
+ {
+ __attribute__((__vector_size__(16))) long long
+ a = generate(),
+ b = _mm_bslli_si128 (a, 1),
+ c = _mm_bsrli_si128 (_mm_set1_epi32(d), 12);
+ return _mm_or_si128 (b, c);
+ }
+ };
+ A () { B<0, r...>::generate(); }
+};
+
+int
+main () {
+ using RI = A<R, C, S>;
+ RI ri;
+}