[Bug middle-end/95114] [9/10/11 Regression] ICE in obj_type_ref_class for structural-equality types

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Jul 13 12:48:02 GMT 2020


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

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Sandiford <rsandifo@gcc.gnu.org>:

https://gcc.gnu.org/g:5834e96a08fd8b86a42428f38a95903d2f1de202

commit r11-2055-g5834e96a08fd8b86a42428f38a95903d2f1de202
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Mon Jul 13 13:47:39 2020 +0100

    ipa-devirt: Fix crash in obj_type_ref_class [PR95114]

    The testcase has failed since r9-5035, because obj_type_ref_class
    tries to look up an ODR type when no ODR type information is
    available.  (The information was available earlier in the
    compilation, but was freed during pass_ipa_free_lang_data.)
    We then crash dereferencing the null get_odr_type result.

    The test passes with -O2.  However, it fails again if -fdump-tree-all
    is used, since obj_type_ref_class is called indirectly from the
    dump routines.

    Other code creates ODR type entries on the fly by passing âtrueâ
    as the insert parameter.  But obj_type_ref_class can't do that
    unconditionally, since it should have no side-effects when used
    from the dumping code.

    Following a suggestion from Honza, this patch adds parameters
    to say whether the routines are being called from dump routines
    and uses those to derive the insert parameter.

    gcc/
            PR middle-end/95114
            * tree.h (virtual_method_call_p): Add a default-false parameter
            that indicates whether the function is being called from dump
            routines.
            (obj_type_ref_class): Likewise.
            * tree.c (virtual_method_call_p): Likewise.
            * ipa-devirt.c (obj_type_ref_class): Likewise.  Lazily add ODR
            type information for the type when the parameter is false.
            * tree-pretty-print.c (dump_generic_node): Update calls to
            virtual_method_call_p and obj_type_ref_class accordingly.

    gcc/testsuite/
            PR middle-end/95114
            * g++.target/aarch64/pr95114.C: New test.


More information about the Gcc-bugs mailing list