From 66faed764371fe6385d54d6e7dc0a9cb0fa5c67f Mon Sep 17 00:00:00 2001 From: Daniel Franke Date: Wed, 19 May 2010 08:55:26 -0400 Subject: [PATCH] re PR fortran/38404 (Warning message identifies incorrect line) gcc/fortran/: 2010-05-19 Daniel Franke PR fortran/38404 * primary.c (match_string_constant): Move start_locus just inside the string. * data.c (create_character_intializer): Clarified truncation warning. gcc/testsuite/: 2010-05-19 Daniel Franke PR fortran/38404 * gfortran.dg/data_char_1.f90: Updated warning message. * gfortran.dg/data_array_6.f: New. From-SVN: r159561 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/data.c | 5 +++-- gcc/fortran/primary.c | 7 +++---- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gfortran.dg/data_array_6.f | 19 +++++++++++++++++++ gcc/testsuite/gfortran.dg/data_char_1.f90 | 4 ++-- 6 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/data_array_6.f diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 09d758ac6e2..b9a986ed05c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2010-05-19 Daniel Franke + + PR fortran/38404 + * primary.c (match_string_constant): Move start_locus just inside + the string. + * data.c (create_character_intializer): Clarified truncation warning. + 2010-05-19 Daniel Franke PR fortran/34505 diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c index c217e1cab0e..6561cdc338c 100644 --- a/gcc/fortran/data.c +++ b/gcc/fortran/data.c @@ -154,9 +154,10 @@ create_character_intializer (gfc_expr *init, gfc_typespec *ts, if (len > end - start) { + gfc_warning_now ("Initialization string starting at %L was " + "truncated to fit the variable (%d/%d)", + &rvalue->where, end - start, len); len = end - start; - gfc_warning_now ("initialization string truncated to match variable " - "at %L", &rvalue->where); } if (rvalue->ts.type == BT_HOLLERITH) diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index c8ca3d4cf8a..09f4eb1c6d4 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -868,12 +868,11 @@ match_string_constant (gfc_expr **result) gfc_gobble_whitespace (); - start_locus = gfc_current_locus; - c = gfc_next_char (); if (c == '\'' || c == '"') { kind = gfc_default_character_kind; + start_locus = gfc_current_locus; goto got_delim; } @@ -917,12 +916,13 @@ match_string_constant (gfc_expr **result) goto no_match; gfc_gobble_whitespace (); - start_locus = gfc_current_locus; c = gfc_next_char (); if (c != '\'' && c != '"') goto no_match; + start_locus = gfc_current_locus; + if (kind == -1) { q = gfc_extract_int (sym->value, &kind); @@ -976,7 +976,6 @@ got_delim: e->ts.is_iso_c = 0; gfc_current_locus = start_locus; - gfc_next_char (); /* Skip delimiter */ /* We disable the warning for the following loop as the warning has already been printed in the loop above. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 237b3c18be1..f18f56f2fa4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-05-19 Daniel Franke + + PR fortran/38404 + * gfortran.dg/data_char_1.f90: Updated warning message. + * gfortran.dg/data_array_6.f: New. + 2010-05-19 Martin Jambor * g++.dg/ipa/ivinline-8.C: New test. diff --git a/gcc/testsuite/gfortran.dg/data_array_6.f b/gcc/testsuite/gfortran.dg/data_array_6.f new file mode 100644 index 00000000000..6564402f1e9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/data_array_6.f @@ -0,0 +1,19 @@ +! { dg-do "compile" } +! +! PR fortran/38404 - location marker in wrong line +! Testcase contributed by Steve Chapel +! + + CHARACTER(len=72) TEXT(3) + DATA (TEXT(I),I=1,3)/ + &'a string without issues', + &'a string with too many characters properly broken into the next + &line but too long to fit the variable', + & ' + &a string that started just at the end of the last line -- some + &may not be helped'/ + + ! { dg-warning "truncated" "" { target *-*-* } 10 } + ! { dg-warning "truncated" "" { target *-*-* } 12 } + + END diff --git a/gcc/testsuite/gfortran.dg/data_char_1.f90 b/gcc/testsuite/gfortran.dg/data_char_1.f90 index 00381c67499..96db4fd30eb 100644 --- a/gcc/testsuite/gfortran.dg/data_char_1.f90 +++ b/gcc/testsuite/gfortran.dg/data_char_1.f90 @@ -5,9 +5,9 @@ program data_char_1 character(len=5) :: a(2) character(len=5) :: b(2) - data a /'Hellow', 'orld'/ ! { dg-warning "string truncated" } + data a /'Hellow', 'orld'/ ! { dg-warning "truncated" } data b(:)(1:4), b(1)(5:5), b(2)(5:5) & - /'abcdefg', 'hi', 'j', 'k'/ ! { dg-warning "string truncated" } + /'abcdefg', 'hi', 'j', 'k'/ ! { dg-warning "truncated" } if ((a(1) .ne. 'Hello') .or. (a(2) .ne. 'orld ')) call abort if ((b(1) .ne. 'abcdj') .or. (b(2) .ne. 'hi k')) call abort -- 2.30.2