It's an old 32-bit machine. I also notice that -std=gnu99 makes the warning go away. I don't think that "long long" existed in C89, except as a compiler-specific extension. I guess that explains the error: gcc tries to promote the integer constant to a long, finds that a long isn't big enough (because we're on 32 bit), and then issues a warning. And then it promotes to the gcc-specific long long type. Colin On Tue, Jan 12, 2010 at 11:24 AM, Jeff Garzik <jeff@xxxxxxxxxx> wrote: > On 01/12/2010 01:25 PM, Colin McCabe wrote: >> >> util.c: In function ‘objid_init’: >> util.c:331: warning: integer constant is too large for ‘long’ type >> >> with >> >> [cmccabe@stargazer tabled]$ gcc --version >> gcc (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2) >> >> Now that I wrote a little test program, I can see that gcc handles the >> constant correctly. It still issues a warning for some reason. >> I guess gcc's C99 support is not perfect. > > Is this on a 32-bit on 64-bit compiler platform? > > Because Linux does > > #if __WORDSIZE == 64 > typedef unsigned long int uint64_t; > #else > __extension__ > typedef unsigned long long int uint64_t; > #endif > > which causes the comparison type (uint64_t objcount) to vary between 32-bit > and 64-bit platforms, even if the number of bits used to store it remains > the same. > > Strange... > > Jeff > > > -- To unsubscribe from this list: send the line "unsubscribe hail-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html