[Bug c++/84036] [8 Regression] ICE on valid code in C++14, variadic lambda capture in a template function

jason at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Feb 12 03:03:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84036

--- Comment #8 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Mon Feb 12 01:21:39 2018
New Revision: 257575

URL: https://gcc.gnu.org/viewcvs?rev=257575&root=gcc&view=rev
Log:
        PR c++/84036 - ICE with variadic capture.

        Handle variadic capture proxies more like non-variadic.
        * lambda.c (build_capture_proxy): Remove workaround.
        * pt.c (find_parameter_packs_r): The proxy is a pack.
        (instantiate_class_template_1): Remove dead lambda code.
        (extract_fnparm_pack): Don't make_pack_expansion.
        (extract_locals_r): Don't strip a pack expansion.
        (tsubst_pack_expansion): Handle proxy packs.  Use
        PACK_EXPANSION_EXTRA_ARGS less.
        (tsubst_decl) [FIELD_DECL]: Don't register_specialization.
        (tsubst_copy) [FIELD_DECL]: Don't retrieve*_specialization.
        [VAR_DECL]: Handle ARGUMENT_PACK_SELECT.
        (tsubst_expr) [DECL_EXPR]: Handle proxy packs.
        (tsubst_copy_and_build) [VAR_DECL]: Handle proxy packs normally.

Added:
    trunk/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic11.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/lambda.c
    trunk/gcc/cp/pt.c


More information about the Gcc-bugs mailing list