https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66773
--- Comment #17 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> --- (In reply to Segher Boessenkool from comment #15) > A much better fix is > > void f1(long s, unsigned long u) { unsigned long su = s; if (su == u) g(); } But what if s is some arbitrary integer type, e.g. that comes from a library? Even using uintmax_t may be insufficient. For instance, GCC has __uint128. > Still much better is to not mixed signedness in types at all. One does not necessarily have the choice. The signedness of some types is not specified.