We have a warning -Wshorten-64-to-32 to catch porting to 64-bit machines which warning when a 64 bit value is converted implicitly to a 32 bit value.
It causes: /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:379: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:380: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:430: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:431: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:481: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:482: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:532: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:533: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:583: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:584: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:634: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:635: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:685: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:686: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:736: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:737: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:787: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:788: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:838: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:839: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:889: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:890: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:940: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/limits:941: warning: implicit conversion shortens 64-bit value into a 32-bit value In file included from /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/locale:44, from t5.cc:3: /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/locale_classes.h:105: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/locale_classes.h:106: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/locale_classes.h:107: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/locale_classes.h:108: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/locale_classes.h:109: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/locale_classes.h:110: warning: implicit conversion shortens 64-bit value into a 32-bit value In file included from /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/locale_facets.h:49, from /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/locale:45, from t5.cc:3: /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:57: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:58: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:59: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:60: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:61: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:62: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:63: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:64: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:65: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:66: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:67: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:68: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:69: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:70: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:71: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:72: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:73: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:74: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:75: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:109: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:110: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:111: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:112: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:113: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:114: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:115: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:150: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:151: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:152: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:153: warning: implicit conversion shortens 64-bit value into a 32-bit value /tmp/libstdcxx.roots/libstdcxx~dst/usr/include/c++/4.2.1/bits/ios_base.h:189: warning: implicit conversion shortens 64-bit value into a 32-bit value when -Wsystem-headers -m64 (LP64) is used. These are just a minor int, but thought I'd point them out, just in case you might want to clean the code any. Reasonably it is silly to warn about converting constant ints when the value is known to fit in the smaller type. limits (all the lines of the form): static const int digits = __glibcxx_digits (char); static const int digits10 = __glibcxx_digits10 (char); bits/locale_classes.h static const category ctype = 1L << 0; static const category numeric = 1L << 1; static const category collate = 1L << 2; static const category time = 1L << 3; static const category monetary = 1L << 4; static const category messages = 1L << 5; bits/ios_base.h: _S_boolalpha = 1L << 0, _S_dec = 1L << 1, _S_fixed = 1L << 2, _S_hex = 1L << 3, _S_internal = 1L << 4, _S_left = 1L << 5, _S_oct = 1L << 6, _S_right = 1L << 7, _S_scientific = 1L << 8, _S_showbase = 1L << 9, _S_showpoint = 1L << 10, _S_showpos = 1L << 11, _S_skipws = 1L << 12, _S_unitbuf = 1L << 13, _S_uppercase = 1L << 14, _S_app = 1L << 0, _S_ate = 1L << 1, _S_bin = 1L << 2, _S_in = 1L << 3, _S_out = 1L << 4, _S_trunc = 1L << 5, _S_ios_openmode_end = 1L << 16 _S_badbit = 1L << 0, _S_eofbit = 1L << 1, _S_failbit = 1L << 2, _S_ios_iostate_end = 1L << 16 _S_ios_seekdir_end = 1L << 16 -- Summary: trivial long -> int implicit conversions Product: gcc Version: 4.2.1 Status: UNCONFIRMED Severity: trivial Priority: P3 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: mrs at apple dot com GCC build triplet: i686-apple-darwin9 GCC host triplet: i686-apple-darwin9 GCC target triplet: i686-apple-darwin9 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35173