re PR c/31673 ("`for' loop initial declaration used outside C99 mode" is confusing)

2008-08-27  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>

	PR c/31673
	* c-decl.c (check_for_loop_decls): Improve error message. Give
	hint.
testsuite/
	* gcc.dg/c90-fordecl-1.c: Update.

From-SVN: r139681
parent 4ccd12e5
2008-08-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org> 2008-08-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR c/31673
* c-decl.c (check_for_loop_decls): Improve error message. Give
hint.
2008-08-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR c/37186 PR c/37186
* c-typeck.c (WARN_FOR_ASSIGNMENT): Add OPT parameter. * c-typeck.c (WARN_FOR_ASSIGNMENT): Add OPT parameter.
(convert_for_assignment): Pass corrent OPT_W* parameter to (convert_for_assignment): Pass corrent OPT_W* parameter to
......
...@@ -6796,13 +6796,19 @@ check_for_loop_decls (void) ...@@ -6796,13 +6796,19 @@ check_for_loop_decls (void)
tree one_decl = NULL_TREE; tree one_decl = NULL_TREE;
int n_decls = 0; int n_decls = 0;
if (!flag_isoc99) if (!flag_isoc99)
{ {
static bool hint = true;
/* If we get here, declarations have been used in a for loop without /* If we get here, declarations have been used in a for loop without
the C99 for loop scope. This doesn't make much sense, so don't the C99 for loop scope. This doesn't make much sense, so don't
allow it. */ allow it. */
error ("%<for%> loop initial declaration used outside C99 mode"); error ("%<for%> loop initial declarations are only allowed in C99 mode");
if (hint)
{
inform (input_location,
"use option -std=c99 or -std=gnu99 to compile your code");
hint = false;
}
return NULL_TREE; return NULL_TREE;
} }
/* C99 subclause 6.8.5 paragraph 3: /* C99 subclause 6.8.5 paragraph 3:
......
2008-08-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org> 2008-08-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR c/31673
* gcc.dg/c90-fordecl-1.c: Update.
2008-08-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR c/37186 PR c/37186
* gcc.dg/pr37186.c: New. * gcc.dg/pr37186.c: New.
......
...@@ -9,5 +9,6 @@ foo (void) ...@@ -9,5 +9,6 @@ foo (void)
int j = 0; int j = 0;
for (int i = 1; i <= 10; i++) /* { dg-bogus "warning" "warning in place of error" } */ for (int i = 1; i <= 10; i++) /* { dg-bogus "warning" "warning in place of error" } */
j += i; j += i;
/* { dg-error "parse|decl" "declaration in for loop" { target *-*-* } 10 } */ /* { dg-error "'for' loop initial declarations are only allowed in C99 mode" "declaration in for loop" { target *-*-* } 10 } */
/* { dg-message "note: use option -std=c99 or -std=gnu99 to compile your code" "note" { target *-*-* } 10 }} */
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment