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

--- Comment #2 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Nathaniel Shead <nsh...@gcc.gnu.org>:

https://gcc.gnu.org/g:058ed8705a7b38bef2c107b6ff5de243aebd57b4

commit r15-4620-g058ed8705a7b38bef2c107b6ff5de243aebd57b4
Author: Nathaniel Shead <nathanielosh...@gmail.com>
Date:   Wed Aug 21 00:50:53 2024 +1000

    c++/modules: Prevent maybe_clone_decl being called multiple times
[PR115007]

    The ICE in the linked PR is caused because maybe_clone_decl is not
    prepared to be called on a declaration that has already had clones
    created; what happens otherwise is that start_preparsed_function early
    exits and never sets up cfun, causing a segfault later on.

    To fix this we ensure that post_load_processing only calls
    maybe_clone_decl if TREE_ASM_WRITTEN has not been marked on the
    declaration yet, and (if maybe_clone_decls succeeds) marks this flag on
    the decl so that it doesn't get called again later when finalising
    deferred vague linkage declarations in c_parse_final_cleanups.

    As a bonus this now allows us to only keep the DECL_SAVED_TREE around in
    expand_or_defer_fn_1 for modules which have CMIs, which will have
    benefits for LTO performance in non-interface TUs.

    For clarity we also update the streaming code to do post_load_decls for
    maybe in-charge cdtors rather than any DECL_ABSTRACT_P declaration, as
    this is more accurate to the decls affected by maybe_clone_body.

            PR c++/115007

    gcc/cp/ChangeLog:

            * module.cc (module_state::read_cluster): Replace
            DECL_ABSTRACT_P with DECL_MAYBE_IN_CHARGE_CDTOR_P.
            (post_load_processing): Check and mark TREE_ASM_WRITTEN.
            * semantics.cc (expand_or_defer_fn_1): Use the more specific
            module_maybe_has_cmi_p instead of modules_p.

    gcc/testsuite/ChangeLog:

            * g++.dg/modules/virt-6_a.C: New test.
            * g++.dg/modules/virt-6_b.C: New test.

    Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com>
  • [Bug c++/115007] [modules] ICE ... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to