http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56815
--- Comment #22 from Manuel López-Ibáñez <manu at gcc dot gnu.org> 2013-04-04 10:38:06 UTC --- (In reply to comment #21) > Manuel, I'm adding the LangEnabledBy, to match the documentation. Thanks. > > Now, I'm not sure to understand the existing lines (many): > > pedantic ? OPT_Wpedantic : OPT_Wpointer_arith > > Do they imply that with -Wpedantic and -Wno-pointer-arith we emit such > warnings > anyway? Is this intended? I think that is a relic from the past, and it is a bug that -Wno-pointer-arith does not disable the warning. I think the intended meaning is that the warnings are controlled by -Wpointer-arith and -Wpointer-arith is enabled by -Wpedantic, so the above should simply be warning_at(loc, OPT_Wpointer_arith,) and the following should work after adding the LangEnabledBy(): -Wpedantic -> warn -Wpointer-arith -> warn -Wpedantic -Wno-pointer-arith -> nothing -Werror=pedantic -> error -Wpedantic -Werror=pointer-arith -> error -Werror=pedantic -Wno-error=pointer-arith -> warn The problem with warnings enabled by -Wpedantic (such as Wlong-long) is that they have further special conditions that are not trivial to represent in the .opt files. In this case, there is: void c_common_init_options_struct (struct gcc_options *opts) { opts->x_flag_exceptions = c_dialect_cxx (); opts->x_warn_pointer_arith = c_dialect_cxx (); opts->x_warn_write_strings = c_dialect_cxx (); opts->x_flag_warn_unused_result = true; /* By default, C99-like requirements for complex multiply and divide. */ opts->x_flag_complex_method = 2; } so the warning seems to be enabled by default in C++ (which is not documented in invoke.texi!). It would be nice to encode this initializations directly in the .opt file but I guess it should work ok as it is right now (it depends when this init is called, before or after setting the command-line flags).