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

--- Comment #5 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:ea718febab2a1f6e58806738abf70f1c73c6a308

commit r13-6376-gea718febab2a1f6e58806738abf70f1c73c6a308
Author: Marek Polacek <pola...@redhat.com>
Date:   Thu Feb 23 17:54:47 2023 -0500

    c++: ICE with constexpr variable template [PR107938]

    Since r11-557, cp_finish_decl can call check_initializer even in
    a template for a constexpr initializer.  That ultimately leads to
    convert_for_assignment and check_address_or_pointer_of_packed_member,
    where we crash, because it doesn't expect that the CALL_EXPR is
    a function object.  Q has a constexpr operator(), but since we're
    in a template, q(0) is a CALL_EXPR whose CALL_EXPR_FN is just
    a VAR_DECL; it hasn't been converted to Q::operator<int>(&q, 0) yet.
    I propose to robustify check_address_or_pointer_of_packed_member.

    var-templ74.C has an XFAIL, subject to 107939.

    I noticed that our -Waddress-of-packed-member tests weren't testing
    member functions, added thus.  (I was tempted to check
    FUNCTION_POINTER_TYPE_P but that doesn't include METHOD_TYPE.)

            PR c++/107938

    gcc/c-family/ChangeLog:

            * c-warn.cc (check_address_or_pointer_of_packed_member): Check
            POINTER_TYPE_P.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp1y/var-templ73.C: New test.
            * g++.dg/cpp1y/var-templ74.C: New test.
            * g++.dg/warn/Waddress-of-packed-member3.C: New test.

Reply via email to