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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:52c29a6a9dac6caec24b75cae17ecb3558c39504

commit r16-3368-g52c29a6a9dac6caec24b75cae17ecb3558c39504
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Mon Aug 25 16:27:35 2025 +0200

    c++: Check for *jump_target earlier in cxx_bind_parameters_in_call
[PR121601]

    The following testcase ICEs, because the
          /* Check we aren't dereferencing a null pointer when calling a
non-static
             member function, which is undefined behaviour.  */
          if (i == 0 && DECL_OBJECT_MEMBER_FUNCTION_P (fun)
              && integer_zerop (arg)
              /* But ignore calls from within compiler-generated code, to
handle
                 cases like lambda function pointer conversion operator thunks
                 which pass NULL as the 'this' pointer.  */
              && !(TREE_CODE (t) == CALL_EXPR && CALL_FROM_THUNK_P (t)))
            {
              if (!ctx->quiet)
                error_at (cp_expr_loc_or_input_loc (x),
                          "dereferencing a null pointer");
              *non_constant_p = true;
            }
    checking is done before testing if (*jump_target).  Especially when
    throws (jump_target), arg can be (and is on this testcase) NULL_TREE,
    so calling integer_zerop on it ICEs.

    Fixed by moving the if (*jump_target) test earlier.

    2025-08-25  Jakub Jelinek  <ja...@redhat.com>

            PR c++/121601
            * constexpr.cc (cxx_bind_parameters_in_call): Move break
            if *jump_target before the check for null this object pointer.

            * g++.dg/cpp26/constexpr-eh16.C: New test.

Reply via email to