+2007-02-28 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/30968
+ * primary.c (next_string_char): Correct reading a character
+ after the delimiter.
+ (match_string_constant): Print warning message only once.
+
2007-02-27 Richard Guenther <rguenther@suse.de>
* trans-array.c (structure_alloc_comps): Use correct type
return c;
old_locus = gfc_current_locus;
- c = gfc_next_char_literal (1);
+ c = gfc_next_char_literal (0);
if (c == delimiter)
return c;
match_string_constant (gfc_expr **result)
{
char *p, name[GFC_MAX_SYMBOL_LEN + 1];
- int i, c, kind, length, delimiter;
+ int i, c, kind, length, delimiter, warn_ampersand;
locus old_locus, start_locus;
gfc_symbol *sym;
gfc_expr *e;
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. */
+ warn_ampersand = gfc_option.warn_ampersand;
+ gfc_option.warn_ampersand = 0;
+
for (i = 0; i < length; i++)
*p++ = next_string_char (delimiter);
*p = '\0'; /* TODO: C-style string is for development/debug purposes. */
+ gfc_option.warn_ampersand = warn_ampersand;
if (next_string_char (delimiter) != -1)
gfc_internal_error ("match_string_constant(): Delimiter not found");
--- /dev/null
+! { dg-do "compile" }
+! { dg-options "-Wall -std=f95" }
+! There should only two warnings be printed.
+! PR fortran/30968
+print *, "Foo bar&
+ &Bar foo"
+print *, "Foo bar&
+ Bar foo" ! { dg-warning "Missing '&' in continued character constant" }
+print *, "Foo bar"&
+ &, "Bar foo"
+print *, "Foo bar"&
+ , "Bar foo"
+
+print '(&
+ a)', 'Hello' ! { dg-warning "Missing '&' in continued character constant" }
+print '(&
+ &a)', 'Hello'
+print '('&
+ &//'a)', 'Hello'
+print '('&
+ // "a)", 'Hello'
+end