On Tue, 4 Oct 2016, Martin Sebor wrote: > I've built the sparc-sun-solaris2.12 toolchain and reproduced these > warnings. They are vestiges of those I saw and some of which I fixed > before. The problem is that %lc expects a wint_t argument which on > this target is an alias for long in but the argument of 0 has type > int. The warning is coming out of the -Wformat checker which doesn't > seem to care that int and long have the same size. I've committed > r240758 that should fix the remaining warnings of this kind but long > term I think GCC should change to avoid warning in this case (Clang > doesn't).
Well, typically cases where one of long and int is passed and the other is expected, but they have the same size, are bugs waiting to happen when the code is built on a 64-bit system. That is, they *should* warn. There have been arguments that we should go further and warn for e.g. %zu with a type that happens to be the same as size_t but doesn't use the size_t typedef (or sizeof etc.), %td for something that happens to be the same as ptrdiff_t but doesn't use the typedef (or pointer difference etc.), etc. - which would get many similar cases of bugs waiting to happen on a different system, but is also tricker because you need to decide whether a given type is logically size_t etc. or not - code could validly use autoconf to identify the underlying type, or use __SIZE_TYPE__, or use an expression mixing size_t with other types, or in the case of %j* (intmax_t) use the INTMAX_C macro to construct constants. That probably *would* need an option to disable just those format warnings (whereas I don't see the need for such an option for the case of mixing int and long). -- Joseph S. Myers jos...@codesourcery.com