aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>2019-08-17 18:16:51 +0000
committerkargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>2019-08-17 18:16:51 +0000
commitb196fa8d1bcb9e85e1f763fdb2ce763056305500 (patch)
tree482d2427fecb88c336729df5aed664f0121917af
parent4bbb23e415a943955a0bc4e6b4f5294caddd4972 (diff)
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-9-branch@274612 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/primary.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr91471.f9014
4 files changed, 31 insertions, 6 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 9904d79dd68..87eda46365b 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,13 @@
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/78739
* match.c (gfc_match_st_function): When matching a statement function,
need to check if the statement function name shadows the function
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index e918372ef85..4af1db5f4bd 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -2559,12 +2559,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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4c62c6a259d..4c944f8aa47 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
+ PR fortran/91471
+ * gfortran.dg/pr91471.f90: New test.
+
+2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
+
PR fortran/78739
* fortran.dg/pr78739.f90: New test.
diff --git a/gcc/testsuite/gfortran.dg/pr91471.f90 b/gcc/testsuite/gfortran.dg/pr91471.f90
new file mode 100644
index 00000000000..fa798444c1d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr91471.f90
@@ -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