On 9 August 2016 at 22:21, Paolo Bonzini <bonz...@gnu.org> wrote: > > > On 09/08/2016 20:30, Manuel López-Ibáñez wrote: >>> >>> >>> + cpp_opts->warn_expansion_to_defined = cpp_warn_expansion_to_defined; >>> + if (cpp_warn_expansion_to_defined == -1) >>> + cpp_warn_expansion_to_defined = pedantic || extra_warnings; >>> + >> >> Instead of the above, plase use LangEnabledBy() or EnabledBy() in c.opt. >> See Wendif-labels and other examples. Then, you do not need Init(-1). > > This causes this to produce an error if -pedantic-errors is provided, > because -pedantic-errors does > > control_warning_option (OPT_Wpedantic, DK_ERROR, NULL, value, > loc, lang_mask, > handlers, opts, opts_set, > dc); > > and this enables -Wexpansion-to-defined at DK_ERROR level. Bug or fix?
TL;DR If the warning is enabled by -Wpedantic, it should be an error with -Werror=pedantic and it should use cpp_pedwarning. Whether it should be enabled by -Wpedantic is more difficult to say. -pedantic is equivalent to -Wpedantic. If -Wx is enabled by -Wy, then -Werror=y implies -Werror=x. Every warning enabled by -Wpedantic works in the same way and I don't see why this one should be different. Moreover, I think that this was a latent bug in libcpp: the code should have used cpp_pedwarning instead of cpp_warning. This is https://gcc.gnu.org/PR66505 Quoting https://gcc.gnu.org/wiki/DiagnosticsGuidelines#Types_of_diagnostics : "The same rules apply to libcpp, which uses cpp_pedwarning (instead of pedwarn), CPP_PEDANTIC (pfile) (instead of pedantic) and CPP_W_PEDANTIC (instead of OPT_Wpedantic). In particular, you may use cpp_pedwarning without CPP_W_PEDANTIC, but you may not use CPP_W_PEDANTIC without cpp_pedwarning and you may not use CPP_PEDANTIC (pfile) without CPP_W_PEDANTIC." Cheers, Manuel.