From 18b0679f097a3656acf82ebbb7a703bd4c0bb174 Mon Sep 17 00:00:00 2001 From: Daniel Kraft Date: Tue, 9 Sep 2008 11:46:51 +0200 Subject: [PATCH] re PR fortran/37411 (ICE (segfault) in trans-array.c) 2008-09-09 Daniel Kraft PR fortran/37411 * trans-array.c (gfc_conv_array_parameter): Added assertion that the symbol has an array spec. 2008-09-09 Daniel Kraft PR fortran/37411 * gfortran.dg/array_function_4.f90: New test. From-SVN: r140141 --- gcc/fortran/ChangeLog | 6 ++++ gcc/fortran/trans-array.c | 3 ++ gcc/testsuite/ChangeLog | 5 ++++ .../gfortran.dg/array_function_4.f90 | 29 +++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/array_function_4.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 39b68d817f3..4cabf029387 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2008-09-09 Daniel Kraft + + PR fortran/37411 + * trans-array.c (gfc_conv_array_parameter): Added assertion that the + symbol has an array spec. + 2008-09-08 Daniel Kraft PR fortran/37199 diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index e0ebbf0e9b0..1ab58e1d7eb 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -5155,6 +5155,9 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, gfc_ss * ss, int g77, && expr->ref->u.ar.type == AR_FULL); sym = full_array_var ? expr->symtree->n.sym : NULL; + /* The symbol should have an array specification. */ + gcc_assert (!sym || sym->as); + if (expr->expr_type == EXPR_ARRAY && expr->ts.type == BT_CHARACTER) { get_array_ctor_strlen (&se->pre, expr->value.constructor, &tmp); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e5ee8233db0..02f91122da7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-09-09 Daniel Kraft + + PR fortran/37411 + * gfortran.dg/array_function_4.f90: New test. + 2008-09-08 Daniel Jacobowitz Mark Mitchell diff --git a/gcc/testsuite/gfortran.dg/array_function_4.f90 b/gcc/testsuite/gfortran.dg/array_function_4.f90 new file mode 100644 index 00000000000..c7e7d6e57c4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/array_function_4.f90 @@ -0,0 +1,29 @@ +! { dg-do compile } + +! PR fortran/37411 +! This used to cause an ICE because of a missing array spec after interface +! mapping. + +! Contributed by Kristjan Jonasson + +MODULE B1 +CONTAINS + subroutine sub() + integer :: x(1) + character(3) :: st + st = fun(x) + end subroutine sub + + function fun(x) result(st) + integer, intent(in) :: x(1) + character(lenf(x)) :: st + st = 'abc' + end function fun + + pure integer function lenf(x) + integer, intent(in) :: x(1) + lenf = x(1) + end function lenf +END MODULE B1 + +! { dg-final { cleanup-modules "B1" } }