There seems to be a tree-ssa related structure member assignment problem that affects gcc -m32 -{O,O2,O3,Os} -mtune=pentium2 but apparently nothing else.
Removing the if statement out of the set_foo function also avoids the bug. Screen shot: $ gcc --version gcc (GCC) 4.5.0 20090809 (experimental) <... all the rest eldided...> $ gcc -Os -m32 -march=i686 -mtune=pentium2 -c -o block/blk-settings.o /tmp/blk-settings2.c /tmp/blk-settings2.c: In function 'set_foo': /tmp/blk-settings2.c:9:6: internal compiler error: in insert_value_copy_on_edge, at tree-outof-ssa.c:223 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. Code: /* insert_value_copy_on_edge, at tree-outof-ssa.c:223 * gcc (GCC) 4.5.0 20090809 (experimental) * platform x86_64-unknown-linux-gnu */ struct foo { unsigned short foo; }; void set_foo(struct foo *p, unsigned short bar) { if (!bar) bar = 1; p->foo = bar; } -- Summary: -mtune=pentium2 structure related tree-outof-ssa internal compiler error Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal 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: x86_64-unknown-linux-gnu GCC host triplet: x86_64-unknown-linux-gnu GCC target triplet: i686-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41203