Commit 41d733d9 by Jason Merrill Committed by Jason Merrill

PR c++/84036 - ICE with variadic capture.

	PR c++/82249
	* pt.c (tsubst_pack_expansion): When optimizing a simple
	substitution, pull a single pack expansion out of its pack.

From-SVN: r257101
parent a011292a
2018-01-26 Jason Merrill <jason@redhat.com>
PR c++/84036 - ICE with variadic capture.
PR c++/82249
* pt.c (tsubst_pack_expansion): When optimizing a simple
substitution, pull a single pack expansion out of its pack.
PR c++/82514 - ICE with local class in generic lambda.
* pt.c (regenerated_lambda_fn_p): Remove.
(enclosing_instantiation_of): Don't use it.
......
......@@ -11575,6 +11575,12 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
&& TREE_PURPOSE (packs) == pattern)
{
tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
/* If the argument pack is a single pack expansion, pull it out. */
if (TREE_VEC_LENGTH (args) == 1
&& pack_expansion_args_count (args))
return TREE_VEC_ELT (args, 0);
/* Types need no adjustment, nor does sizeof..., and if we still have
some pack expansion args we won't do anything yet. */
if (TREE_CODE (t) == TYPE_PACK_EXPANSION
......
// PR c++/84036
// { dg-do compile { target c++14 } }
template < typename T >
auto f(T){
[](auto ... i){
[i ...]{};
};
}
int main(){
f(0);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment