re PR fortran/91471 (f951: internal compiler error: gfc_variable_attr(): Bad array reference)

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
This commit is contained in:
Steven G. Kargl 2019-08-17 14:23:10 +00:00
parent 1e67491a0d
commit 4f81c2a3c5
4 changed files with 31 additions and 6 deletions

View 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

View 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;

View 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

View File

@ -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