From edcc76d5aebb6492ebbfb705b0b7b2c425b804ff Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Fri, 30 Oct 2015 16:46:20 +0000 Subject: [PATCH] re PR fortran/36192 (ICE with wrong index types and bad parens) 2015-10-30 Steven G. Kargl PR fortran/36192 * interface.c (get_expr_storage_size): Check for INTEGER type before calling gmp routines. 2015-10-30 Steven G. Kargl PR fortran/36192 * gfortran.dg/pr36192_1.f90: New test. From-SVN: r229590 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/interface.c | 4 +++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/pr36192_1.f90 | 12 ++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pr36192_1.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 74cae2f0d82..f197ca9f022 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,8 +1,15 @@ +2015-10-30 Steven G. Kargl + + PR fortran/36192 + * interface.c (get_expr_storage_size): Check for INTEGER type before + calling gmp routines. + 2015-10-30 Steven G. Kargl PR fortran/68154 * decl.c (add_init_expr_to_sym): if the char length in the typespec is NULL, check for and use a constructor. + 2015-10-30 Steven G. Kargl PR fortran/68054 diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 2ea26304a24..dcf3eae81e7 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -2455,7 +2455,9 @@ get_expr_storage_size (gfc_expr *e) { if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i] && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT - && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT) + && ref->u.ar.as->lower[i]->ts.type == BT_INTEGER + && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT + && ref->u.ar.as->upper[i]->ts.type == BT_INTEGER) elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer) - mpz_get_si (ref->u.ar.as->lower[i]->value.integer) + 1L; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5407db7f1be..caa46c45f97 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-10-30 Steven G. Kargl + + PR fortran/36192 + * gfortran.dg/pr36192_1.f90: New test. + 2015-10-30 Steven G. Kargl PR fortran/68154 diff --git a/gcc/testsuite/gfortran.dg/pr36192_1.f90 b/gcc/testsuite/gfortran.dg/pr36192_1.f90 new file mode 100644 index 00000000000..77df31765ac --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr36192_1.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! PR fortran/36192 +program three_body + real, parameter :: n = 2, d = 2 + real, dimension(n,d) :: x_hq ! { dg-error "of INTEGER type|of INTEGER type" } + call step(x_hq) + contains + subroutine step(x) + real, dimension(:,:), intent(in) :: x + end subroutine step +end program three_body +! { dg-prune-output "must have constant shape" } -- 2.30.2