re PR fortran/38404 (Warning message identifies incorrect line)
authorDaniel Franke <franke.daniel@gmail.com>
Wed, 19 May 2010 12:55:26 +0000 (08:55 -0400)
committerDaniel Franke <dfranke@gcc.gnu.org>
Wed, 19 May 2010 12:55:26 +0000 (08:55 -0400)
gcc/fortran/:
2010-05-19  Daniel Franke  <franke.daniel@gmail.com>

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  <franke.daniel@gmail.com>

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
gcc/fortran/data.c
gcc/fortran/primary.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/data_array_6.f [new file with mode: 0644]
gcc/testsuite/gfortran.dg/data_char_1.f90

index 09d758ac6e2cd586d4e42cab0b47b7c3096e49ef..b9a986ed05c8e105e2b40249de6306d5daf53536 100644 (file)
@@ -1,3 +1,10 @@
+2010-05-19  Daniel Franke  <franke.daniel@gmail.com>
+
+       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  <franke.daniel@gmail.com>
 
        PR fortran/34505
index c217e1cab0ec09c229bf0912743845fbb9f16af1..6561cdc338c148c7d6256c85283154e23c579002 100644 (file)
@@ -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)
index c8ca3d4cf8a083c2d94f215593ccfc6aac8ae41a..09f4eb1c6d49c2c6c66d2013c71dff9a5308dc21 100644 (file)
@@ -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.  */
index 237b3c18be12e89bcee3dd9b8e312b4d5c7f8b1f..f18f56f2fa4cd91bafd19381ac87d002fd24bbb3 100644 (file)
@@ -1,3 +1,9 @@
+2010-05-19  Daniel Franke  <franke.daniel@gmail.com>
+
+       PR fortran/38404
+       * gfortran.dg/data_char_1.f90: Updated warning message.
+       * gfortran.dg/data_array_6.f: New.
+
 2010-05-19  Martin Jambor  <mjambor@suse.cz>
 
        * 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 (file)
index 0000000..6564402
--- /dev/null
@@ -0,0 +1,19 @@
+! { dg-do "compile" }
+!
+! PR fortran/38404 - location marker in wrong line
+! Testcase contributed by Steve Chapel <steve DOT chapel AT a2pg DOT com>
+!
+
+      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
index 00381c674997b056ab53f712d50300de00919c24..96db4fd30eb7b9cbea8f28ea48b21d5602ade8d7 100644 (file)
@@ -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