re PR c++/84496 (Internal compiler error with lambda, static and auto since r236615)
PR c++/84496 * g++.dg/cpp1y/pr84496.C: New test. From-SVN: r257895
This commit is contained in:
parent
3f5fabc0ea
commit
25c1b6cb34
2 changed files with 47 additions and 0 deletions
|
@ -1,5 +1,8 @@
|
|||
2018-02-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/84496
|
||||
* g++.dg/cpp1y/pr84496.C: New test.
|
||||
|
||||
PR target/84502
|
||||
* g++.dg/torture/pr84502.C: New test.
|
||||
|
||||
|
|
44
gcc/testsuite/g++.dg/cpp1y/pr84496.C
Normal file
44
gcc/testsuite/g++.dg/cpp1y/pr84496.C
Normal file
|
@ -0,0 +1,44 @@
|
|||
// PR c++/84496
|
||||
// { dg-do compile { target c++14 } }
|
||||
|
||||
template <typename T, T n> struct C { static constexpr T D = n; };
|
||||
struct E : C<bool, false> {};
|
||||
template <typename> struct F : C<bool, false> {};
|
||||
template <typename T> T foo ();
|
||||
template <typename> struct H { typedef int G; };
|
||||
template <typename> class I;
|
||||
struct L;
|
||||
template <typename, typename> struct J;
|
||||
template <bool, bool, typename...> struct K;
|
||||
struct R {
|
||||
template <typename M, typename... N>
|
||||
static J<decltype (foo<M> () (foo<N>...)), L> o;
|
||||
};
|
||||
template <typename P, typename... Q> struct K<false, false, P, Q...> : R {
|
||||
typedef decltype (o<P, Q...>) G;
|
||||
};
|
||||
template <typename P, typename... Q>
|
||||
struct D : K<E::D, F<typename H<P>::G>::D, P, Q...> {};
|
||||
template <typename P, typename... Q> struct I<P (Q...)> : D<P, Q...> {};
|
||||
template <typename> class function;
|
||||
template <typename S, typename... Q> struct function<S (Q...)> {
|
||||
template <typename T, typename = typename I<T (Q...)>::G> struct C;
|
||||
template <typename, typename> using U = int;
|
||||
template <typename P, typename = U<int, void>, typename = U<C<P>, void>>
|
||||
function (P);
|
||||
};
|
||||
template <typename S, typename... Q>
|
||||
template <typename P, typename, typename>
|
||||
function<S (Q...)>::function (P)
|
||||
{
|
||||
}
|
||||
void bar (function<void (int)>);
|
||||
|
||||
void
|
||||
baz ()
|
||||
{
|
||||
auto a = [] {
|
||||
static int counter;
|
||||
bar ([] (auto) { counter++; });
|
||||
};
|
||||
}
|
Loading…
Add table
Reference in a new issue