diff options
author | Marek Polacek <polacek@redhat.com> | 2018-12-01 21:09:31 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2018-12-01 21:09:31 +0000 |
commit | 8fc1ef712dfc1ae506eea6726448d900eb9b6cf4 (patch) | |
tree | ba004e00fa2543b92a3598a896f405d73ed62691 /gcc | |
parent | 96c35892bea68ac180f19079cf08fea3b6cda0a8 (diff) | |
download | gcc-8fc1ef712dfc1ae506eea6726448d900eb9b6cf4.zip gcc-8fc1ef712dfc1ae506eea6726448d900eb9b6cf4.tar.gz gcc-8fc1ef712dfc1ae506eea6726448d900eb9b6cf4.tar.bz2 |
re PR c++/83856 (ICE in tsubst_copy;)
PR c++/83856
* g++.dg/cpp1y/lambda-generic-83856.C: New test.
From-SVN: r266711
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/lambda-generic-83856.C | 30 |
2 files changed, 33 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 610a264..c7afb2b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -34,6 +34,9 @@ * g++.dg/template/typedef6.C: Adjust dg-error. * g++.dg/template/typename3.C: Only expect error in c++17_down. + PR c++/83856 + * g++.dg/cpp1y/lambda-generic-83856.C: New test. + 2018-12-01 Jeff Law <law@redhat.com> * gcc.dg/predict-22.c: Update expected output. diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-83856.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-83856.C new file mode 100644 index 0000000..ab82b62 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-83856.C @@ -0,0 +1,30 @@ +// PR c++/83856 +// { dg-do compile { target c++14 } } + +namespace std { +template <typename _Tp> _Tp declval(); +template <class _E> class initializer_list { + _E *_M_len; + +public: + unsigned long size; + _E begin(); +}; +template <typename, unsigned> struct array { void operator[](long); }; +} // namespace std + +template <class> struct simd { + static int size(); + template <class F> simd(F, decltype(std::declval<F>()(0)) * = nullptr) {} +}; +template <class V, class... F> +void test_tuples(std::initializer_list<std::array<float, 1>> data, + F... fun_pack) { + auto it = data.begin(); + const int remaining = V::size(); + [](...) {}((fun_pack([&](auto) { it[remaining]; }), 0)...); +} + +void f() { + test_tuples<simd<float>>({}, [](simd<float>) {}); +} |