[Nagios-devel] warning: left shift count >= width of type (i386)
ae at op5.se
Tue Sep 4 07:15:20 UTC 2012
On 09/03/2012 10:23 PM, Ricardo Jose Maraschini wrote:
> * Ricardo Jose Maraschini (ricardo.maraschini at opservices.com.br) wrote:
>> OK, I'm not pretty sure about following, but here we go.
>> I tried to compile current nagios on a i386 arch and received the
>> following warning:
>> squeue.c:34: warning: left shift count >= width of type
>> If i'm right, long is four bytes long on i386 arch, and as tv_sec is
>> a long(accordingly to gettimeofday(2)) the result of line 34 on squeue.c
>> is unpredictable.
>> Am I right or I'm missing something?
>> Compiling on a sparc64 and in a x86_64 environment i haven't received
>> the same warning. On these architectures, sizeof(long) shows me 8 bytes.
>> What are the performance implications of my patch below?
> The patch below seems to be much more appropriate than the previous one.
> --- lib/squeue.c (revision 2138)
> +++ lib/squeue.c (working copy)
> @@ -31,7 +31,7 @@
> static pqueue_pri_t evt_compute_pri(struct timeval *tv)
> - return (tv->tv_sec << 32) | tv->tv_usec;
> + return ((pqueue_pri_t)tv->tv_sec << 32) | tv->tv_usec;
That's odd. Casting to pqueue_pri_t shouldn't be necessary when the
function return pqueue_pri_t. I worry a bit that this might break
on systems with less-than-totally-sane compiler, where the value
will first be calculated as a normal word and then the result cast
explicitly to a longword. I've done a different change:
ret = tv->tv_sec;
ret <<= 32;
ret |= tv->tv_usec;
which should keep even the most retarded compiler from doing anything
Many thanks for the bugreport and the patch though :)
Andreas Ericsson andreas.ericsson at op5.se
OP5 AB www.op5.se
Tel: +46 8-230225 Fax: +46 8-230231
Considering the successes of the wars on alcohol, poverty, drugs and
terror, I think we should give some serious thought to declaring war
More information about the Nagios-devel