http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50326
--- Comment #7 from Martin Jambor <jamborm at gcc dot gnu.org> 2011-09-19 18:21:25 UTC --- The compilation before and after the patch seems to diverge at expand time and only in one instruction when processing this particular gimple statement: MEM[(struct prop_value_d *)&D.39146].lattice_val = val$lattice_val_443; When val$lattice_val is an enum type, it is expanded to: (insn 4927 4926 4928 593 (set (mem/s/c:SI (reg/f:DI 2698) [10 MEM[(struct prop_value_d *)&D.39146].lattice_val+0 S4 A128]) (reg:SI 433 [ val$lattice_val ])) /abuild/mjambor/trunk/src/gcc/tree-ssa-ccp.c:1685 -1 (nil)) whereas when it is <unnamed-unsigned:32>, it is expanded to: (insn 4927 4926 4928 593 (set (mem/s/c:SI (reg/f:DI 2698) [4 MEM[(struct prop_value_d *)&D.39146].lattice_val+0 S4 A128]) (reg:SI 433 [ val$lattice_val ])) /abuild/mjambor/trunk/src/gcc/tree-ssa-ccp.c:1685 -1 (nil)) The difference is 4 instead of 10. Now I am entering an entirely unchartered territory for me on quite a few levels so don't hold your breath for any progress. I will keep looking into this, though.