https://gcc.gnu.org/g:0909d3828adcb3b89173dae50d1fc7a218eec505
commit r17-5415-g0909d3828adcb3b89173dae50d1fc7a218eec505 Author: Paul Thomas <[email protected]> Date: Tue Oct 20 17:46:39 2026 +0100 Fortran: Fix regression caused by [PR82173] 2026-10-20 Paul Thomas <[email protected]> gcc/fortran PR fortran/82173 * expr.cc (gfc_check_pointer_assign): As well as rvalue being expr_NULL, it must not have a symtree, aring from an interface, to return true. gcc/testsuite/ PR fortran/82173 * gfortran.dg/interface_64.f90: New test. Diff: --- gcc/fortran/expr.cc | 2 +- gcc/testsuite/gfortran.dg/interface_64.f90 | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc index fe006eb8dc43..561318ed2e5f 100644 --- a/gcc/fortran/expr.cc +++ b/gcc/fortran/expr.cc @@ -4551,7 +4551,7 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue, name = s2->name; } - else if (rvalue->expr_type == EXPR_NULL) + else if (rvalue->expr_type == EXPR_NULL && !rvalue->symtree) return true; else { diff --git a/gcc/testsuite/gfortran.dg/interface_64.f90 b/gcc/testsuite/gfortran.dg/interface_64.f90 new file mode 100644 index 000000000000..bcd290be7d0c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_64.f90 @@ -0,0 +1,21 @@ +! { dg-do compile } +! +! Patch 9/16 of the series associated with PR82173 intreoduced a +! regression that allowed the invalid code below to compile. +! +! Contributed by Mikael Morin <[email protected]> +! +program prog + implicit none + interface + integer function foo(arg) + integer, intent(in) :: arg + end function + integer function bar(arg1, arg2) + integer, intent(in) :: arg1, arg2 + end function + end interface + procedure(foo), pointer :: p + procedure(bar), pointer :: q + p => null(q) ! { dg-error "Interface mismatch in procedure pointer assignment" } +end program
