And here's a different piece of code that triggers a segfault: $ cat bug.c typedef enum { a } b; typedef struct { b action } c; d; inline e(void *p1) { long *f = p1; long g = f[g] = d; } typedef struct { int h } i; __thread i j; k() { int *l = &j.h; c *entryp = l; int m = &entryp[m]; for (;;) { e(&entryp[m]); entryp[m].action = a; } } $ x86_64-w64-mingw32-gcc -c -O -ftree-pre bug.c *bug.c:2:27:* *warning: *no semicolon at end of struct or union typedef struct { b action *}* c; *^* *bug.c:3:1:* *warning: *data definition has no type or storage class *d*; *^* *bug.c:3:1:* *warning: *type defaults to '*int*' in declaration of '*d*' [ *-Wimplicit-int*] *bug.c:4:8:* *warning: *return type defaults to '*int*' [*-Wimplicit-int*] inline *e*(void *p1) { *^* *bug.c:8:24:* *warning: *no semicolon at end of struct or union typedef struct { int h *}* i; *^* *bug.c:10:1:* *warning: *return type defaults to '*int*' [*-Wimplicit-int*] *k*() { *^* *bug.c:* In function '*k*': *bug.c:12:15:* *warning: *initialization from incompatible pointer type [ *-Wincompatible-pointer-types*] c *entryp = *l*; *^* *bug.c:13:11:* *warning: *initialization makes integer from pointer without a cast [*-Wint-conversion*] int m = *&*entryp[m]; *^* *bug.c:10:1:* *internal compiler error: *Segmentation fault *k*() { *^* Please submit a full bug report, with preprocessed source if appropriate. See <http://bugzilla.redhat.com/bugzilla> for instructions.