]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR fortran/95881 - ICE in resolve_symbol, at fortran/resolve.c:15175
authorHarald Anlauf <anlauf@gmx.de>
Sat, 27 Jun 2020 12:56:33 +0000 (14:56 +0200)
committerHarald Anlauf <anlauf@gmx.de>
Sat, 27 Jun 2020 13:02:52 +0000 (15:02 +0200)
Avoid NULL pointer dereference.

gcc/fortran/
PR fortran/95881
* resolve.c (resolve_symbol): Avoid NULL pointer dereference.

(cherry picked from commit 3cbc0fb39c84ae0a51a9a88649dccd105bf17d6e)

gcc/fortran/resolve.c
gcc/testsuite/gfortran.dg/pr95881.f90 [new file with mode: 0644]

index cc8676b3e0323d818c641d1ad30fe90a12118d46..16f5fee3fbda0009d78a8e8b1d296a1e643063bd 100644 (file)
@@ -15173,6 +15173,7 @@ resolve_symbol (gfc_symbol *sym)
   if (flag_coarray == GFC_FCOARRAY_LIB && sym->ts.type == BT_CLASS
       && sym->ts.u.derived && CLASS_DATA (sym)
       && CLASS_DATA (sym)->attr.codimension
+      && CLASS_DATA (sym)->ts.u.derived
       && (CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp
          || CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp))
     {
diff --git a/gcc/testsuite/gfortran.dg/pr95881.f90 b/gcc/testsuite/gfortran.dg/pr95881.f90
new file mode 100644 (file)
index 0000000..9f17176
--- /dev/null
@@ -0,0 +1,11 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=lib" }
+! PR fortran/95881 - ICE in resolve_symbol, at fortran/resolve.c:15175
+
+program p
+  type t
+     real, allocatable :: a[:]
+  end type t
+  class(t) :: x     ! { dg-error "must be dummy, allocatable or pointer" }
+  allocate (x%a[*])
+end