re PR fortran/91471 (f951: internal compiler error: gfc_variable_attr(): Bad array...
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 17 Aug 2019 14:23:10 +0000 (14:23 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 17 Aug 2019 14:23:10 +0000 (14:23 +0000)
2019-08-17  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/91471
* primary.c (gfc_variable_attr): Remove a gfc_internal_error(),
which cannot be reached by conforming Fortran code, but seems to
be reachable from nonconforming Fortran code.  Treat the AR_UNKNOWN
case as a no-op.

2019-08-17  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/91471
* gfortran.dg/pr91471.f90: New test.

From-SVN: r274603

gcc/fortran/ChangeLog
gcc/fortran/primary.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr91471.f90 [new file with mode: 0644]

index a3b9e6bf486aeaeed074ff4ac457eb07ae0c7b66..130c3df2e46103ae0c0a6707bfa7477f5c9c807b 100644 (file)
@@ -1,3 +1,11 @@
+2019-08-17  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/91471
+       * primary.c (gfc_variable_attr): Remove a gfc_internal_error(),
+       which cannot be reached by conforming Fortran code, but seems to
+       be reachable from nonconforming Fortran code.  Treat the AR_UNKNOWN
+       case as a no-op.
+
 2019-08-17  Janne Blomqvist  <jb@gcc.gnu.org>
 
        PR fortran/68401
index 1cc1018d0aadf3380dfe352155c8c94d183eff1a..a33a7972f130ad6e2f136bae1c015388ed113ee2 100644 (file)
@@ -2597,12 +2597,10 @@ gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
            break;
 
          case AR_UNKNOWN:
-           /* If any of start, end or stride is not integer, there will
-              already have been an error issued.  */
-           int errors;
-           gfc_get_errors (NULL, &errors);
-           if (errors == 0)
-             gfc_internal_error ("gfc_variable_attr(): Bad array reference");
+           /* For standard conforming code, AR_UNKNOWN should not happen.
+              For nonconforming code, gfortran can end up here.  Treat it 
+              as a no-op.  */
+           break;
          }
 
        break;
index 46522909713216aac004de437659ee6e4fe139d3..0a2bbc17473f8aeb5aaef1a0d6d38d322ce73a0a 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-17  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/91471
+       * gfortran.dg/pr91471.f90: New test.
+
 2019-08-16  Marek Polacek  <polacek@redhat.com>
 
        PR c++/85827
diff --git a/gcc/testsuite/gfortran.dg/pr91471.f90 b/gcc/testsuite/gfortran.dg/pr91471.f90
new file mode 100644 (file)
index 0000000..fa79844
--- /dev/null
@@ -0,0 +1,14 @@
+! { dg-do compile }
+! PR fortran/91471
+! Code contributed by Sameeran Joshi <SameeranJayant dot Joshi at amd dot com>
+!
+! This invalid code (x(1) is referenced, but never set) caused an ICE due
+! to hitting a gfc_internal_error() in primary.c (gfc_variable_attr).  The
+! fix is to remove that gfc_internal_error().
+! 
+program dynamic
+   implicit none
+   integer, dimension(:), allocatable :: x
+   allocate(x(1))
+   stop x(1)
+end program dynamic