http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48561
Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target| |x86_64-*-* Status|WAITING |NEW Known to fail| |4.5.3 --- Comment #4 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-01-11 13:40:21 UTC --- Confirmed. Works on 4.6 and 4.7. Reduced testcase: typedef unsigned char uint8_t; typedef unsigned int uint32_t; typedef uint32_t ITERATOR_TYPE; const uint8_t RETIRED = (1 << 1); struct AQMRU_Instantiated_For_Payload { ITERATOR_TYPE next; uint8_t flags; }; typedef struct { ITERATOR_TYPE queueHead; ITERATOR_TYPE queueCount; ITERATOR_TYPE stackHead; struct AQMRU_Instantiated_For_Payload entries[((1 == sizeof(ITERATOR_TYPE)) ? (255) : ((2 == sizeof(ITERATOR_TYPE)) ? (65535) : ((4 == sizeof(ITERATOR_TYPE)) ? (4294967295U) : 0)))]; } TestQueue; int main(int argc, const char *argv[]) { TestQueue testQueue; ITERATOR_TYPE iter; ITERATOR_TYPE count; for (count = 0; count < ((1 == sizeof(ITERATOR_TYPE)) ? (255) : ((2 == sizeof(ITERATOR_TYPE)) ? (65535) : ((4 == sizeof(ITERATOR_TYPE)) ? (4294967295U) : 0))); ++count) { ITERATOR_TYPE temp = iter; iter = testQueue.entries[iter].next; testQueue.queueHead = iter; testQueue.queueCount--; if (0 == testQueue.queueCount) { ((((1 == sizeof(ITERATOR_TYPE)) ? (255) : ((2 == sizeof(ITERATOR_TYPE)) ? (65535) : ((4 == sizeof(ITERATOR_TYPE)) ? (4294967295U) : 0))) == testQueue.queueHead) ? (void) (0) : __assert_fail ()); } testQueue.entries[temp].next = testQueue.stackHead; testQueue.stackHead = temp; } } notice the large variable testQueue.