commit 5b8341e2a06c9dead76cba2485a2e0633badbac0 Author: Jason Merrill Date: Thu Aug 11 11:15:13 2016 -0400 PR c++/73456 - ICE with constrained parameter pack. * logic.cc (non_atomic_constraint_p): Handle EXPR_PACK_EXPANSION. diff --git a/gcc/cp/logic.cc b/gcc/cp/logic.cc index dda98df..b86e740 100644 --- a/gcc/cp/logic.cc +++ b/gcc/cp/logic.cc @@ -305,6 +305,9 @@ non_atomic_constraint_p (tree t) case ICONV_CONSTR: case DEDUCT_CONSTR: case EXCEPT_CONSTR: + /* A pack expansion isn't atomic, but it can't decompose to prove an + atom, so it shouldn't cause analyze_atom to return undecided. */ + case EXPR_PACK_EXPANSION: return false; case CHECK_CONSTR: case PARM_CONSTR: diff --git a/gcc/testsuite/g++.dg/concepts/variadic4.C b/gcc/testsuite/g++.dg/concepts/variadic4.C new file mode 100644 index 0000000..d20fa7d --- /dev/null +++ b/gcc/testsuite/g++.dg/concepts/variadic4.C @@ -0,0 +1,20 @@ +// PR c++/73456 +// { dg-options "-std=c++1z -fconcepts" } + +template struct list {}; + +template +concept bool Sequence = true; + +template +struct zip; + +template + requires requires { typename list; } +// main.cpp:12:8: internal compiler error: in non_atomic_constraint_p, at cp/logic.cc:315 +struct zip {}; + +int main() +{ + zip, list> {}; +}