re PR preprocessor/60975 (-Wvariadic-macros does not print warning)

gcc/ChangeLog:

2014-08-20  Manuel López-Ibáñez  <manu@gcc.gnu.org>

	PR c/60975
	PR c/53063
	* doc/options.texi (CPP): Document it.
	* doc/invoke.texi (Wvariadic-macros): Fix documentation.
	* optc-gen.awk: Handle CPP.
	* opth-gen.awk: Likewise.

gcc/c-family/ChangeLog:

2014-08-20  Manuel López-Ibáñez  <manu@gcc.gnu.org>

	PR c/60975
	PR c/53063
	* c.opt (Wvariadic-macros): Use CPP and LangEnabledBy.
	* c-opts.c (c_common_handle_option): Call cpp_handle_option_auto.
	(c_common_post_options): Call init_global_opts_from_cpp.
	(sanitize_cpp_opts): Do not handle Wvariadic-macros here.

gcc/testsuite/ChangeLog:

2014-08-20  Manuel López-Ibáñez  <manu@gcc.gnu.org>

	PR c/60975
	PR c/53063
	* gcc.dg/cpp/Wvariadic-1p.c: New test.

From-SVN: r214200
This commit is contained in:
Manuel López-Ibáñez 2014-08-19 22:37:49 +00:00
parent cd0059f55f
commit 43f9a13cee
10 changed files with 104 additions and 10 deletions

View File

@ -1,3 +1,12 @@
2014-08-20 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR c/60975
PR c/53063
* doc/options.texi (CPP): Document it.
* doc/invoke.texi (Wvariadic-macros): Fix documentation.
* optc-gen.awk: Handle CPP.
* opth-gen.awk: Likewise.
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* rtl.h (unlink_insn_chain): Strengthen return type from rtx to

View File

@ -1,3 +1,12 @@
2014-08-20 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR c/60975
PR c/53063
* c.opt (Wvariadic-macros): Use CPP and LangEnabledBy.
* c-opts.c (c_common_handle_option): Call cpp_handle_option_auto.
(c_common_post_options): Call init_global_opts_from_cpp.
(sanitize_cpp_opts): Do not handle Wvariadic-macros here.
2014-08-19 Marek Polacek <polacek@redhat.com>
PR c++/62153

View File

@ -794,7 +794,8 @@ c_common_handle_option (size_t scode, const char *arg, int value,
default:
gcc_unreachable ();
}
cpp_handle_option_auto (&global_options, scode, cpp_opts);
return result;
}
@ -1030,6 +1031,7 @@ c_common_post_options (const char **pfilename)
cb->file_change = cb_file_change;
cb->dir_change = cb_dir_change;
cpp_post_options (parse_in);
init_global_opts_from_cpp (&global_options, cpp_get_options (parse_in));
input_location = UNKNOWN_LOCATION;
@ -1310,11 +1312,6 @@ sanitize_cpp_opts (void)
&& (c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99));
cpp_opts->cpp_warn_long_long = warn_long_long;
/* Similarly with -Wno-variadic-macros. No check for c99 here, since
this also turns off warnings about GCCs extension. */
cpp_opts->warn_variadic_macros
= cpp_warn_variadic_macros && (pedantic || warn_traditional);
/* If we're generating preprocessor output, emit current directory
if explicitly requested or if debugging information is enabled.
??? Maybe we should only do it for debugging formats that

View File

@ -838,9 +838,13 @@ C ObjC C++ ObjC++ Var(warn_unused_result) Init(1) Warning
Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value
Wvariadic-macros
C ObjC C++ ObjC++ Var(cpp_warn_variadic_macros) Init(1) Warning
C ObjC C++ ObjC++ CPP(warn_variadic_macros) Var(cpp_warn_variadic_macros) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic)
Warn about using variadic macros
Wvariadic-macros
LangEnabledBy(C ObjC C++ ObjC++,Wtraditional)
;
Wvarargs
C ObjC C++ ObjC++ Warning Var(warn_varargs) Init(1)
Warn about questionable usage of the macros used to retrieve variable arguments

View File

@ -5127,9 +5127,10 @@ modes. To inhibit the warning messages, use @option{-Wno-long-long}.
@item -Wvariadic-macros
@opindex Wvariadic-macros
@opindex Wno-variadic-macros
Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
alternate syntax when in pedantic ISO C99 mode. This is default.
To inhibit the warning messages, use @option{-Wno-variadic-macros}.
Warn if variadic macros are used in ISO C90 mode, or if the GNU
alternate syntax is used in ISO C99 mode. This is enabled by either
@option{-Wpedantic} or @option{-Wtraditional}. To inhibit the warning
messages, use @option{-Wno-variadic-macros}.
@item -Wvarargs
@opindex Wvarargs

View File

@ -482,4 +482,9 @@ The option is omitted from the producer string written by
@item PchIgnore
Even if this is a target option, this option will not be recorded / compared
to determine if a precompiled header file matches.
@item CPP(@var{var})
The state of this option should be kept in sync with the preprocessor
option @var{var}.
@end table

View File

@ -480,4 +480,55 @@ for (i = 0; i < n_langs; i++) {
print "} "
}
#Handle CPP()
print "\n"
print "#include " quote "cpplib.h" quote;
print "void"
print "cpp_handle_option_auto (const struct gcc_options * opts, "
print " size_t scode, struct cpp_options * cpp_opts)"
print "{ "
print " enum opt_code code = (enum opt_code) scode; "
print " "
print " switch (code) "
print " { "
for (i = 0; i < n_opts; i++) {
# With identical flags, pick only the last one. The
# earlier loop ensured that it has all flags merged,
# and a nonempty help text if one of the texts was nonempty.
while( i + 1 != n_opts && opts[i] == opts[i + 1] ) {
i++;
}
cpp_option = nth_arg(0, opt_args("CPP", flags[i]));
opt_var_name = var_name(flags[i]);
if (cpp_option != "" && opt_var_name != "") {
print " case " opt_enum(opts[i]) ":"
print " cpp_opts->" cpp_option " = opts->x_" opt_var_name ";"
print " break;"
}
}
print " default: "
print " break; "
print " } "
print "}\n"
print "void"
print "init_global_opts_from_cpp(struct gcc_options * opts, "
print " const struct cpp_options * cpp_opts)"
print "{ "
for (i = 0; i < n_opts; i++) {
# With identical flags, pick only the last one. The
# earlier loop ensured that it has all flags merged,
# and a nonempty help text if one of the texts was nonempty.
while( i + 1 != n_opts && opts[i] == opts[i + 1] ) {
i++;
}
cpp_option = nth_arg(0, opt_args("CPP", flags[i]));
opt_var_name = var_name(flags[i]);
if (cpp_option != "" && opt_var_name != "") {
print " opts->x_" opt_var_name " = cpp_opts->" cpp_option ";"
}
}
print "} "
}

View File

@ -315,6 +315,10 @@ for (i = 0; i < n_langs; i++) {
print " const struct cl_option_handlers *handlers, "
print " diagnostic_context *dc); "
}
print "void cpp_handle_option_auto (const struct gcc_options * opts, size_t scode,"
print " struct cpp_options * cpp_opts);"
print "void init_global_opts_from_cpp(struct gcc_options * opts, "
print " const struct cpp_options * cpp_opts);"
print "#endif";
print "#endif";
print "";

View File

@ -1,3 +1,9 @@
2014-08-20 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR c/60975
PR c/53063
* gcc.dg/cpp/Wvariadic-1p.c: New test.
2014-08-19 Janis Johnson <janisjo@codesourcery.com>
* lib/target-supports.exp

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-options "-std=iso9899:1990 " } */
#pragma GCC diagnostic error "-Wpedantic"
#define f(x,...) /* { dg-error "variadic" } */
#define g(x,y...) /* { dg-error "variadic" } */
int not_empty;
/* { dg-message "warnings being treated as errors" "" { target *-*-* } 0 } */