Compiler warnings, overflow

Ricardo Telichevesky ricardo@teli.org
Thu Jul 31 17:00:00 GMT 2014


Hi, hope this is the right list.

Here is my code and output, at the bottom of the e-mail. y is "correct", w and z obviously have problems - multiplying two 32-bit integers "hoping" the result would be correct assigning to 64-bit - I guess it is the same problem as double oneThird= 1/3;  the result being zero, and not 0.3333.

I was wondering if there is any strict warning that would flag the w and z assignments below, or the 1/3 above - the whole right hand side is evaluated as a 32-bit integer number, and assigned to a 64-bit integer or double. Not advocating this should be a default, but turning it on would help me 
detect some flaws in the code. Took me hours to catch  a similar bug in my code, trying to solve a sparse system that has hundreds of millions of variables...

Thanks!
     Ricardo

laplace utils % cat ovr.c
#include <stdio.h>
int main()
{

     unsigned int x = 1015625426;
     unsigned int t = sizeof(double);

     size_t  y = x * sizeof(double);
     size_t  w = x << 3;
     size_t  z = x * t;

     printf("y= %zd  w = %zd z = %zd\n", y, w, z);
}
laplace utils % gcc -Wall -o ovr ovr.c
laplace utils % ovr
y= 8125003408  w = 3830036112 z = 3830036112




More information about the Gcc-help mailing list