[Bug c++/106230] [12 Regression] ICE when building folly-2022.07.04.00 in pop_local_binding (cp/name-lookup.cc:2474) since r12-6328-gbeaee0a871b6485d

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jul 26 03:12:14 GMT 2022


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

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Jason Merrill
<jason@gcc.gnu.org>:

https://gcc.gnu.org/g:60954a06ceb1598d86763e5504d8e1b874b6bd6a

commit r12-8618-g60954a06ceb1598d86763e5504d8e1b874b6bd6a
Author: Jason Merrill <jason@redhat.com>
Date:   Mon Jul 25 11:13:31 2022 -0400

    c++: aggregate prvalue as for range [PR106230]

    Since my PR94041 work on temporary lifetime in aggregate initialization, we
    end up calling build_vec_init to initialize the reference-extended
temporary
    for the artificial __for_range variable.  And build_vec_init uses
    finish_for_stmt to implement its loop.  That function assumes that if
    __for_range is in current_binding_level, we're finishing a range-for, and
we
    should fix up the variable as it goes out of scope.  But when called from
    build_vec_init we aren't finishing a range-for, and do_poplevel doesn't
    remove the variable from scope because stmts_are_full_exprs_p is false.  So
    let's check that here as well, and leave the DECL_NAME alone.

            PR c++/106230

    gcc/cp/ChangeLog:

            * semantics.cc (finish_for_stmt): Check stmts_are_full_exprs_p.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/range-for38.C: New test.


More information about the Gcc-bugs mailing list