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

Reply via email to