analyzer: add test coverage for gfortran ICE fix [PR 93779]
authorDavid Malcolm <dmalcolm@redhat.com>
Mon, 17 Feb 2020 08:28:08 +0000 (03:28 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Tue, 18 Feb 2020 13:09:29 +0000 (08:09 -0500)
PR analyzer/93779 reports an ICE in gfortran with -fanalyzer
that was fixed for GCC 10 by a workaround in
f76a88ebf089871dcce215aa0cb1956ccc060895; the tree code in
question is a FUNCTION_DECL.

Given that I want to rework the above patch at some point, it seems
prudent to add test coverage to ensure the ICE doesn't come back,
which this patch does.

gcc/testsuite/ChangeLog:
PR analyzer/93779
* gfortran.dg/analyzer/pr88304-2.f90: New test, adapted from
gfortran.fortran-torture/compile/pr88304-2.f90

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/analyzer/pr88304-2.f90 [new file with mode: 0644]

index f9a545e2d934a4f34908a32cf66d26889879b6b0..c6b76dfac654ca955fede36cbbd435d4550180d6 100644 (file)
@@ -1,3 +1,9 @@
+2020-02-18  David Malcolm  <dmalcolm@redhat.com>
+
+       PR analyzer/93779
+       * gfortran.dg/analyzer/pr88304-2.f90: New test, adapted from
+       gfortran.fortran-torture/compile/pr88304-2.f90
+
 2020-02-18  Mark Eggleston  <mark.eggleston@codethink.com>
 
        PR fortran/93603
diff --git a/gcc/testsuite/gfortran.dg/analyzer/pr88304-2.f90 b/gcc/testsuite/gfortran.dg/analyzer/pr88304-2.f90
new file mode 100644 (file)
index 0000000..6b3ab89
--- /dev/null
@@ -0,0 +1,29 @@
+! Copy of gfortran.fortran-torture/compile/pr88304-2.f90
+! as a regression test for ICE with -fanalyzer (PR analyzer/93779)
+
+module pr88304
+  implicit none
+  integer :: p
+contains
+  function foo (x, y, z, w)
+    integer, intent(in) :: x, y
+    character(*), optional, intent(out) :: z
+    integer, optional, intent(out) :: w
+    integer :: foo
+    foo = 1
+  end function foo
+  subroutine bar ()
+    integer :: s
+    s = baz (1)
+  contains
+    function baz (u)
+      integer, intent(in) :: u
+      integer :: baz
+      integer :: q
+      integer :: r (10)
+      r = 0
+      baz = 1
+      q = foo (p, r(u), w = baz)
+    end function baz
+  end subroutine bar
+end module pr88304