aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/cppinit.c9
-rw-r--r--gcc/cpplib.c4
-rw-r--r--gcc/cpplib.h3
-rw-r--r--gcc/doc/cppopts.texi17
-rw-r--r--gcc/doc/invoke.texi6
6 files changed, 47 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c2e75f1..09ea764 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2002-03-22 Phil Edwards <pme@gcc.gnu.org>
+
+ * cpplib.h (struct cpp_options): New member, warn_endif_labels.
+ * cppinit.c (cpp_create_reader): On by default.
+ (cpp_handle_option): Handle -W[no-]endif-labels.
+ (cpp_post_options): Also enable if -pedantic.
+ * cpplib.c (do_else): Use it.
+ (do_endif): Likewise.
+ * doc/cppopts.texi: Document new option.
+ * doc/invoke.texi: Document new option.
+
2002-03-22 Lars Brinkhoff <lars@nocrew.org>
* config/i386/i386.c, config/i386/i386.md: Change all occurences
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index ae9416e..d3d59ef 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -491,6 +491,7 @@ cpp_create_reader (lang)
CPP_OPTION (pfile, show_column) = 1;
CPP_OPTION (pfile, tabstop) = 8;
CPP_OPTION (pfile, operator_names) = 1;
+ CPP_OPTION (pfile, warn_endif_labels) = 1;
#if DEFAULT_SIGNED_CHAR
CPP_OPTION (pfile, signed_char) = 1;
#else
@@ -1735,6 +1736,8 @@ cpp_handle_option (pfile, argc, argv, ignore)
CPP_OPTION (pfile, warnings_are_errors) = 1;
else if (!strcmp (argv[i], "-Wsystem-headers"))
CPP_OPTION (pfile, warn_system_headers) = 1;
+ else if (!strcmp (argv[i], "-Wendif-labels"))
+ CPP_OPTION (pfile, warn_endif_labels) = 1;
else if (!strcmp (argv[i], "-Wno-traditional"))
CPP_OPTION (pfile, warn_traditional) = 0;
else if (!strcmp (argv[i], "-Wno-trigraphs"))
@@ -1751,6 +1754,8 @@ cpp_handle_option (pfile, argc, argv, ignore)
CPP_OPTION (pfile, warnings_are_errors) = 0;
else if (!strcmp (argv[i], "-Wno-system-headers"))
CPP_OPTION (pfile, warn_system_headers) = 0;
+ else if (!strcmp (argv[i], "-Wno-endif-labels"))
+ CPP_OPTION (pfile, warn_endif_labels) = 0;
else if (! ignore)
return i;
break;
@@ -1832,6 +1837,10 @@ cpp_post_options (pfile)
|| CPP_OPTION (pfile, deps_file)
|| CPP_OPTION (pfile, deps_phony_targets)))
cpp_fatal (pfile, "you must additionally specify either -M or -MM");
+
+ /* Some things should always be on in pedantic mode. */
+ if (CPP_OPTION (pfile, pedantic) == 1)
+ CPP_OPTION (pfile, warn_endif_labels) = 1;
}
/* Set up dependency-file output. On exit, if print_deps is non-zero
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index d8e3433..9a6b077 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -1375,7 +1375,7 @@ do_else (pfile)
ifs->mi_cmacro = 0;
/* Only check EOL if was not originally skipping. */
- if (!ifs->was_skipping)
+ if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
check_eol (pfile);
}
}
@@ -1430,7 +1430,7 @@ do_endif (pfile)
else
{
/* Only check EOL if was not originally skipping. */
- if (!ifs->was_skipping)
+ if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
check_eol (pfile);
/* If potential control macro, we go back outside again. */
diff --git a/gcc/cpplib.h b/gcc/cpplib.h
index 191649c..783b258 100644
--- a/gcc/cpplib.h
+++ b/gcc/cpplib.h
@@ -308,6 +308,9 @@ struct cpp_options
traditional C. */
unsigned char warn_traditional;
+ /* Nonzero means warn about text after an #endif (or #else). */
+ unsigned char warn_endif_labels;
+
/* Nonzero means turn warnings into errors. */
unsigned char warnings_are_errors;
diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi
index 463403e..7ab651b 100644
--- a/gcc/doc/cppopts.texi
+++ b/gcc/doc/cppopts.texi
@@ -110,6 +110,23 @@ Warn whenever an identifier which is not a macro is encountered in an
@samp{#if} directive, outside of @samp{defined}. Such identifiers are
replaced with zero.
+@item -Wendif-labels
+@opindex Wendif-labels
+Warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
+This usually happens in code of the form
+
+@smallexample
+#if FOO
+@dots{}
+#else FOO
+@dots{}
+#endif FOO
+@end smallexample
+
+@noindent
+The second and third @code{FOO} should be in comments, but often are not
+in older programs. This warning is on by default.
+
@item -Werror
@opindex Werror
Make all warnings into hard errors. Source code which triggers warnings
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 533fda1..7e6b714 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -220,7 +220,7 @@ in the following sections.
-Wimplicit -Wimplicit-int @gol
-Wimplicit-function-declaration @gol
-Werror-implicit-function-declaration @gol
--Wimport -Winline @gol
+-Wimport -Winline -Wno-endif-labels @gol
-Wlarger-than-@var{len} -Wlong-long @gol
-Wmain -Wmissing-braces -Wmissing-declarations @gol
-Wmissing-format-attribute -Wmissing-noreturn @gol
@@ -2384,6 +2384,10 @@ conversion warnings, for the full set use @option{-Wconversion}.
@opindex Wundef
Warn if an undefined identifier is evaluated in an @samp{#if} directive.
+@item -Wendif-labels
+@opindex Wendif-labels
+Warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
+
@item -Wshadow
@opindex Wshadow
Warn whenever a local variable shadows another local variable, parameter or