+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
+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
default:
gcc_unreachable ();
}
-
+
+ cpp_handle_option_auto (&global_options, scode, cpp_opts);
return result;
}
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;
&& (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
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
@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
@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
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 "} "
+
+}
+
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 "";
+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
--- /dev/null
+/* { 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 } */