Boost logo

Boost Users :

Subject: Re: [Boost-users] CRC - error: shift count is too large - fixed
From: Mike Dalgity (mike.dalgity_at_[hidden])
Date: 2008-12-16 13:32:15


My thanks to the guys at TI. They were able to track down the issue to a
problem in <limits>. Below is the workaround they sent me.

Here is the workaround. Edit <limits>. It is found in the \include directory
of the compiler distribution. The changes take place within the specialization
of the numeric_limits template for the types long and unsigned long. For
example, the long specialization starts with these lines ...

 // CLASS numeric_limits<long>
template<> class numeric_limits<long>
 : public _Num_int_base
 { // limits for type long

Within each specialization there are instances of the expression "CHAR_BIT *
sizeof(long)" or "CHAR_BIT * sizeof(unsigned long)". Replace each one
with "40".

The problem is on C6000 the type long is 40-bits wide, but stored in 64-bit
wide chunks in memory. Those expression for computing the number of value bits
in the type presume all the bits in storage are used for the value. Not the
case for these types.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net