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

Reply via email to