From 3c7b91d3dcaf577588205ee810fbbdb91e64125f Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Thu, 13 Sep 2007 20:08:04 +0200 Subject: re PR fortran/33343 (ICE (segfault) on invalid code with wrongly shaped arguments to elemental procedures) 2007-09-13 Tobias Burnus PR fortran/33343 * expr.c (gfc_check_conformance): Print ranks in the error message. * resolve.c (resolve_elemental_actual): Check also conformance of the actual arguments for elemental functions. 2007-09-13 Tobias Burnus PR fortran/33343 * gfortran.dg/elemental_args_check_1.f90: New. * gfortran.dg/assumed_size_refs_1.f90: Update error message. * gfortran.dg/elemental_subroutine_4.f90: Ditto. From-SVN: r128473 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/expr.c | 6 +++--- gcc/fortran/resolve.c | 7 ++----- 3 files changed, 12 insertions(+), 8 deletions(-) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 73dcbf8..0484460 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,12 @@ 2007-09-13 Tobias Burnus + PR fortran/33343 + * expr.c (gfc_check_conformance): Print ranks in the error message. + * resolve.c (resolve_elemental_actual): Check also conformance of + the actual arguments for elemental functions. + +2007-09-13 Tobias Burnus + * symbol.c (gfc_add_elemental,gfc_add_pure,gfc_add_recursive): Allow prefixes only to be specified once. diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index ebed1f2..6ffcf7e 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -2513,8 +2513,8 @@ gfc_check_conformance (const char *optype_msgid, gfc_expr *op1, gfc_expr *op2) if (op1->rank != op2->rank) { - gfc_error ("Incompatible ranks in %s at %L", _(optype_msgid), - &op1->where); + gfc_error ("Incompatible ranks in %s (%d and %d) at %L", _(optype_msgid), + op1->rank, op2->rank, &op1->where); return FAILURE; } @@ -2527,7 +2527,7 @@ gfc_check_conformance (const char *optype_msgid, gfc_expr *op1, gfc_expr *op2) if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0) { - gfc_error ("different shape for %s at %L on dimension %d (%d/%d)", + gfc_error ("different shape for %s at %L on dimension %d (%d and %d)", _(optype_msgid), &op1->where, d + 1, (int) mpz_get_si (op1_size), (int) mpz_get_si (op2_size)); diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 76a20a4..55d087f 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -1275,13 +1275,10 @@ resolve_elemental_actual (gfc_expr *expr, gfc_code *c) if (resolve_assumed_size_actual (arg->expr)) return FAILURE; - if (expr) - continue; - - /* Elemental subroutine array actual arguments must conform. */ + /* Elemental procedure's array actual arguments must conform. */ if (e != NULL) { - if (gfc_check_conformance ("elemental subroutine", arg->expr, e) + if (gfc_check_conformance ("elemental procedure", arg->expr, e) == FAILURE) return FAILURE; } -- cgit v1.1