From f10ca8ea5d9cb6a4dad0b1c64806be1baf3a5c5f Mon Sep 17 00:00:00 2001 From: kargl Date: Sat, 17 Apr 2010 21:05:53 +0000 Subject: [PATCH] 2010-04-17 Steven G. Kargl PR fortran/31538 * gfortran.dg/bounds_check_fail_4.f90: Adjust error message. * gfortran.dg/bounds_check_fail_3.f90: Ditto. 2010-04-17 Steven G. Kargl PR fortran/31538 * fortran/trans-array.c (gfc_conv_ss_startstride): Remove the use of gfc_msg_bounds by using 'Array bound mismatch' directly. (gfc_trans_dummy_array_bias): Remove the use of gfc_msg_bounds. Reword error message to include the mismatch in the extent of array bound. * fortran/trans.c: Remove gfc_msg_bounds. It is only used in one place. * fortran/trans.h: Remove extern definition of gfc_msg_bounds. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158474 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 10 ++++++++ gcc/fortran/trans-array.c | 31 ++++++++++++++++------- gcc/fortran/trans.c | 1 - gcc/fortran/trans.h | 1 - gcc/testsuite/ChangeLog | 6 +++++ gcc/testsuite/gfortran.dg/bounds_check_fail_3.f90 | 2 +- gcc/testsuite/gfortran.dg/bounds_check_fail_4.f90 | 2 +- 7 files changed, 40 insertions(+), 13 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e672f84e709..377fe183f51 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,13 @@ +2010-04-17 Steven G. Kargl + + PR fortran/31538 + * fortran/trans-array.c (gfc_conv_ss_startstride): Remove the use of + gfc_msg_bounds by using 'Array bound mismatch' directly. + (gfc_trans_dummy_array_bias): Remove the use of gfc_msg_bounds. Reword + error message to include the mismatch in the extent of array bound. + * fortran/trans.c: Remove gfc_msg_bounds. It is only used in one place. + * fortran/trans.h: Remove extern definition of gfc_msg_bounds. + 2010-04-17 Jerry DeLisle * gfortran.texi: Update information on temporary file locations. diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index a880f0efe61..b03cc9400c9 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -3365,13 +3365,15 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop) if (size[n]) { tmp3 = fold_build2 (NE_EXPR, boolean_type_node, tmp, size[n]); - asprintf (&msg, "%s, size mismatch for dimension %d " - "of array '%s' (%%ld/%%ld)", gfc_msg_bounds, + asprintf (&msg, "Array bound mismatch for dimension %d " + "of array '%s' (%%ld/%%ld)", info->dim[n]+1, ss->expr->symtree->name); + gfc_trans_runtime_check (true, false, tmp3, &inner, &ss->expr->where, msg, fold_convert (long_integer_type_node, tmp), fold_convert (long_integer_type_node, size[n])); + gfc_free (msg); } else @@ -4632,15 +4634,26 @@ gfc_trans_dummy_array_bias (gfc_symbol * sym, tree tmpdesc, tree body) { /* Check (ubound(a) - lbound(a) == ubound(b) - lbound(b)). */ char * msg; + tree temp; - tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, - ubound, lbound); - stride2 = fold_build2 (MINUS_EXPR, gfc_array_index_type, + temp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + ubound, lbound); + temp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + gfc_index_one_node, temp); + + stride2 = fold_build2 (MINUS_EXPR, gfc_array_index_type, dubound, dlbound); - tmp = fold_build2 (NE_EXPR, gfc_array_index_type, tmp, stride2); - asprintf (&msg, "%s for dimension %d of array '%s'", - gfc_msg_bounds, n+1, sym->name); - gfc_trans_runtime_check (true, false, tmp, &block, &loc, msg); + stride2 = fold_build2 (PLUS_EXPR, gfc_array_index_type, + gfc_index_one_node, stride2); + + tmp = fold_build2 (NE_EXPR, gfc_array_index_type, temp, stride2); + asprintf (&msg, "Dimension %d of array '%s' has extent " + "%%ld instead of %%ld", n+1, sym->name); + + gfc_trans_runtime_check (true, false, tmp, &block, &loc, msg, + fold_convert (long_integer_type_node, temp), + fold_convert (long_integer_type_node, stride2)); + gfc_free (msg); } } diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index c1993f90ddd..21c56045a44 100644 --- a/gcc/fortran/trans.c +++ b/gcc/fortran/trans.c @@ -47,7 +47,6 @@ along with GCC; see the file COPYING3. If not see static gfc_file *gfc_current_backend_file; -const char gfc_msg_bounds[] = N_("Array bound mismatch"); const char gfc_msg_fault[] = N_("Array reference out of bounds"); const char gfc_msg_wrong_return[] = N_("Incorrect function return value"); diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 782ff1d9e78..91f1b7784d1 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -773,7 +773,6 @@ void gfc_apply_interface_mapping (gfc_interface_mapping *, /* Standard error messages used in all the trans-*.c files. */ -extern const char gfc_msg_bounds[]; extern const char gfc_msg_fault[]; extern const char gfc_msg_wrong_return[]; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac81da73654..a926c843534 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-04-17 Steven G. Kargl + + PR fortran/31538 + * gfortran.dg/bounds_check_fail_4.f90: Adjust error message. + * gfortran.dg/bounds_check_fail_3.f90: Ditto. + 2010-04-17 Eric Botcazou * gnat.dg/sizetype.adb: Rename into... diff --git a/gcc/testsuite/gfortran.dg/bounds_check_fail_3.f90 b/gcc/testsuite/gfortran.dg/bounds_check_fail_3.f90 index 0826b7d5efc..ce4d0368d57 100644 --- a/gcc/testsuite/gfortran.dg/bounds_check_fail_3.f90 +++ b/gcc/testsuite/gfortran.dg/bounds_check_fail_3.f90 @@ -9,4 +9,4 @@ if (any(x /= (/ 2, 2, 3, 4, 5, 6, 6, 8, 9, 10 /))) call abort() x(8:1:m) = x(5:2:n) end -! { dg-output "line 10 .* bound mismatch, .* dimension 1 .* array \'x\' \\\(3/2\\\)" } +! { dg-output "line 10 .* bound mismatch .* dimension 1 .* array \'x\' \\\(3/2\\\)" } diff --git a/gcc/testsuite/gfortran.dg/bounds_check_fail_4.f90 b/gcc/testsuite/gfortran.dg/bounds_check_fail_4.f90 index dee3ca8d66e..718d0058e49 100644 --- a/gcc/testsuite/gfortran.dg/bounds_check_fail_4.f90 +++ b/gcc/testsuite/gfortran.dg/bounds_check_fail_4.f90 @@ -9,4 +9,4 @@ if (any(x /= (/ 5, 2, 3, 6, 5, 6, 7, 8, 9, 10 /))) call abort() x(8:1:m) = x(1:3) + x(5:2:n) end -! { dg-output "line 10 .* bound mismatch, .* dimension 1 .* array \'x\' \\\(2/3\\\)" } +! { dg-output "line 10 .* bound mismatch .* dimension 1 .* array \'x\' \\\(2/3\\\)" } -- 2.11.4.GIT