From 909de5da19288f60ab09dbe6165399d3f833a692 Mon Sep 17 00:00:00 2001 From: Phil Edwards Date: Fri, 22 Mar 2002 21:59:04 +0000 Subject: [PATCH] cpplib.h (struct cpp_options): New member, warn_endif_labels. 2002-03-22 Phil Edwards * 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. From-SVN: r51190 --- gcc/ChangeLog | 11 +++++++++++ gcc/cppinit.c | 9 +++++++++ gcc/cpplib.c | 4 ++-- gcc/cpplib.h | 3 +++ gcc/doc/cppopts.texi | 17 +++++++++++++++++ gcc/doc/invoke.texi | 6 +++++- 6 files changed, 47 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c2e75f15227..09ea7641f62 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2002-03-22 Phil Edwards + + * 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 * config/i386/i386.c, config/i386/i386.md: Change all occurences diff --git a/gcc/cppinit.c b/gcc/cppinit.c index ae9416e8ade..d3d59ef4874 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 d8e34330e28..9a6b077f24b 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 191649ccfd6..783b25835b0 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 463403e101a..7ab651b7251 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 533fda1a4aa..7e6b714c9b5 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 -- 2.11.4.GIT