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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |aoliva at gcc dot gnu.org

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This regressed with r259067:

    [PR c++/84943] mark function as used when taking its address

    fn[0]() ICEd because we would fold the INDIRECT_REF used for the
    array indexing while building the address for the call, after not
    finding the decl hiding there at first.  But the decl would be exposed
    by the folding, and then lower layers would complain we had the decl,
    after all, but it wasn't one of the artificial or special functions
    that could be called without being marked as used.

    This patch arranges for a FUNCTION_DECL to be marked as used when
    taking its address, just like we already did when taking the address
    of a static function to call it as a member function (i.e. using the
    obj.fn() notation).  However, we shouldn't mark functions as used when
    just performing overload resolution, lest we might instantiate
    templates we shouldn't, as in g++.dg/overload/template1.C, so we
    adjust mark_used to return early when testing conversions.


    for  gcc/cp/ChangeLog

            PR c++/84943
            * typeck.c (cp_build_addr_expr_1): Mark FUNCTION_DECL as
            used.
            * decl2.c (mark_used): Return without effects if tf_conv.

    for  gcc/testsuite/ChangeLog

            PR c++/84943
            * g++.dg/pr84943.C: New.
            * g++.dg/pr84943-2.C: New.

Reply via email to