https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79927
Bug ID: 79927 Summary: 5.4.0: exponential notation triggers bogus "variably modified" warning Product: gcc Version: 5.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: dtikhonov at litespeedtech dot com Target Milestone: --- I use a compile-time check to make sure that a particular value is correct: ------ 8< ---------- struct my_struct { unsigned char n_usecs[3]; }; #ifndef ONE_MILLION # define ONE_MILLION 1e6 #endif /* Compile-time check that n_usecs holds at least 16 seconds worth. */ typedef char holds_at_least_16_seconds[ ((1 << (sizeof(((struct my_struct *) 0)->n_usecs) * 8)) / ONE_MILLION >= 16) - 1]; int main (void) { return 0; } ------ 8< ---------- Using 1e6 instead of 1000000 produces the following warning: 1e6.c:15:65: warning: variably modified ‘holds_at_least_16_seconds’ at file scope >= 16) - 1]; ^ I reproduced this using 5.4.0 and 4.9.4 versions of gcc.