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

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <mpola...@gcc.gnu.org>:

https://gcc.gnu.org/g:02d8ab3e4e2f3d9dc12157a98c976d6698e71e29

commit r13-6141-g02d8ab3e4e2f3d9dc12157a98c976d6698e71e29
Author: Marek Polacek <pola...@redhat.com>
Date:   Thu Feb 16 17:41:24 2023 -0500

    c++: ICE with redundant capture [PR108829]

    Here we crash in is_capture_proxy:

      /* Location wrappers should be stripped or otherwise handled by the
         caller before using this predicate.  */
      gcc_checking_assert (!location_wrapper_p (decl));

    We only crash with the redundant capture:

      int abyPage = [=, abyPage] { ... }

    because prune_lambda_captures is only called when there was a default
    capture, and with [=] only abyPage won't be in LAMBDA_EXPR_CAPTURE_LIST.

    The problem is that LAMBDA_CAPTURE_EXPLICIT_P wasn't propagated
    correctly and so var_to_maybe_prune proceeded where it shouldn't.

    Co-Authored by: Patrick Palka <ppa...@redhat.com>

            PR c++/108829

    gcc/cp/ChangeLog:

            * pt.cc (prepend_one_capture): Set LAMBDA_CAPTURE_EXPLICIT_P.
            (tsubst_lambda_expr): Pass LAMBDA_CAPTURE_EXPLICIT_P to
            prepend_one_capture.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/lambda/lambda-108829-2.C: New test.
            * g++.dg/cpp0x/lambda/lambda-108829.C: New test.

Reply via email to