The source here generates an asserion failure compiled with anything above -O0. Changing p+1 to p seems to avoid the bug. The infinite loops are not a feature of the original code but the uderlying problem appears to be indentical.
"screenshot" [EMAIL PROTECTED]:~/duncan/src/foo/wlocal/build/phone/mq$ gcc --version gcc (GCC) 4.2.0 20051217 (experimental) Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [EMAIL PROTECTED]:~/duncan/src/foo/wlocal/build/phone/mq$ gcc --version gcc (GCC) 4.2.0 20051217 (experimental) Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [EMAIL PROTECTED]:~/duncan/src/foo/wlocal/build/phone/mq$ gcc -g -O2 -o /tmp/foo.o /tmp/foo.c /tmp/foo.c: In function 'foo': /tmp/foo.c:32: internal compiler error: in handle_ptr_arith, at tree-ssa-structalias.c:3188 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. foo.c is the following nonsense ---cut here--- #include <stdio.h> typedef struct { int foo; } s_foo; static void bar(const s_foo *p, int (*cmp)(const char *, const char *)) { const char *pd; int r; pd=(const char *) (p+1); /* The p+1 is apparently critical */ while (1) { r=(*cmp)(pd, "2"); if (r<=0) fputc('-', stdout); else fputc('+', stdout); } return; } void foo(int (*cmp)(const char *, const char *)) { s_foo a; while(1) { bar(&a, cmp); } } ---cut here--- -- Summary: Assertion failure in pointer analysis Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: major Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dps at simpson dot demon dot co dot uk GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25487