re PR fortran/54286 (Accepts invalid proc-pointer assignments involving proc-ptr...
authorPaul Thomas <pault@gcc.gnu.org>
Tue, 15 Jan 2013 05:29:01 +0000 (05:29 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Tue, 15 Jan 2013 05:29:01 +0000 (05:29 +0000)
2013-01-15  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/54286
* expr.c (gfc_check_pointer_assign): Check for presence of
's2' before using it.

2013-01-15  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/54286
* gfortran.dg/proc_ptr_result_8.f90 : Add module 'm' to check
case where interface is null.

From-SVN: r195185

gcc/fortran/ChangeLog
gcc/fortran/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/proc_ptr_result_8.f90

index b412d0a97b91281889a4346edbff3ef6965f10ae..f297deb93adde5f6b86e9f23fdc0b8c72cfeb588 100644 (file)
@@ -1,3 +1,9 @@
+2013-01-15  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/54286
+       * expr.c (gfc_check_pointer_assign): Check for presence of
+       's2' before using it.
+
 2013-01-14  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/55806
index 3010dd9e456972defb51b0059a05b66c5299fee6..f358ac7665eac840424d9857c3e0d9df21a6d6b4 100644 (file)
@@ -3537,7 +3537,7 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
          name = s2->name;
        }
 
-      if (s2->attr.proc_pointer && s2->ts.interface)
+      if (s2 && s2->attr.proc_pointer && s2->ts.interface)
        s2 = s2->ts.interface;
 
       if (s1 == s2 || !s1 || !s2)
index e25cfc8bf0fcde52d2adf3ab4d0ec4a1d8179126..b3dba4969d688c772d547ded67d6387c12a7f62f 100644 (file)
@@ -1,3 +1,9 @@
+2013-01-15  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/54286
+       * gfortran.dg/proc_ptr_result_8.f90 : Add module 'm' to check
+       case where interface is null.
+
 2013-01-14  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/55806
index de6f39f910cc199fd1f6ab4bbb881ebb27553679..17812bc4422f4f64b45a685542740619cecb1e7e 100644 (file)
@@ -2,7 +2,24 @@
 ! Test fix for PR54286.
 !
 ! Contributed by Janus Weil  <janus@gcc.gnu.org>
+! Module 'm' added later because original fix missed possibility of
+! null interfaces - thanks to Dominique Dhumieres  <dominiq@lps.ens.fr>
 !
+module m
+  type :: foobar
+    real, pointer :: array(:)
+    procedure (), pointer, nopass :: f
+  end type
+contains
+  elemental subroutine fooAssgn (a1, a2)
+    type(foobar), intent(out) :: a1
+    type(foobar), intent(in) :: a2
+    allocate (a1%array(size(a2%array)))
+    a1%array = a2%array
+    a1%f => a2%f
+  end subroutine
+end module m
+
 implicit integer (a)
 type :: t
   procedure(a), pointer, nopass :: p