aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorManuel López-Ibáñez <manu@gcc.gnu.org>2008-08-27 23:54:36 +0000
committerManuel López-Ibáñez <manu@gcc.gnu.org>2008-08-27 23:54:36 +0000
commite9527cfd9665e3cb0887682ccb0d17d040732799 (patch)
treea771c38af9403eafeab5a23860be3f703a4512d1 /gcc
parent4ccd12e5aae640a352129fd387657da8e4d0f95b (diff)
downloadgcc-e9527cfd9665e3cb0887682ccb0d17d040732799.zip
gcc-e9527cfd9665e3cb0887682ccb0d17d040732799.tar.gz
gcc-e9527cfd9665e3cb0887682ccb0d17d040732799.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-decl.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/c90-fordecl-1.c3
4 files changed, 21 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d091380..63b1981d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
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
* c-typeck.c (WARN_FOR_ASSIGNMENT): Add OPT parameter.
(convert_for_assignment): Pass corrent OPT_W* parameter to
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 056cb38..ee04d9a 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -6796,13 +6796,19 @@ check_for_loop_decls (void)
tree one_decl = NULL_TREE;
int n_decls = 0;
-
if (!flag_isoc99)
{
+ static bool hint = true;
/* 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
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;
}
/* C99 subclause 6.8.5 paragraph 3:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9fad734..d5d73d7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
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
* gcc.dg/pr37186.c: New.
diff --git a/gcc/testsuite/gcc.dg/c90-fordecl-1.c b/gcc/testsuite/gcc.dg/c90-fordecl-1.c
index 8e48dd6..4aa3c58 100644
--- a/gcc/testsuite/gcc.dg/c90-fordecl-1.c
+++ b/gcc/testsuite/gcc.dg/c90-fordecl-1.c
@@ -9,5 +9,6 @@ foo (void)
int j = 0;
for (int i = 1; i <= 10; i++) /* { dg-bogus "warning" "warning in place of error" } */
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 }} */
}