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:
parent
cd0059f55f
commit
43f9a13cee
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 "} "
|
||||
|
||||
}
|
||||
|
||||
|
@ -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 "";
|
||||
|
@ -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
|
||||
|
8
gcc/testsuite/gcc.dg/cpp/Wvariadic-1p.c
Normal file
8
gcc/testsuite/gcc.dg/cpp/Wvariadic-1p.c
Normal 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 } */
|
Loading…
Reference in New Issue
Block a user