diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-10-10 22:11:21 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-10-10 22:11:21 +0200 |
commit | c9a0dec5eeba1d8f8cd94506e7e51fe8d3bfc51e (patch) | |
tree | a67269dbbcbf0b0f579d9321980d2ad75c572df1 /gcc | |
parent | aaf58ab1739d7d1ca2a6c2e2396d70a2dbfe6f79 (diff) | |
download | gcc-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/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr70887.C | 31 |
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; +} |