Hi! The release_node hook is only called when a cgraph node is removed, not when it merely gets ->analyzed field cleared. If that happens on some node that has_function_state, we leak the memory.
Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2013-02-27 Jakub Jelinek <ja...@redhat.com> PR middle-end/56461 * ipa-pure-const.c (propagate): Use FOR_EACH_FUNCTION instead of FOR_EACH_DEFINED_FUNCTION when freeing state. --- gcc/ipa-pure-const.c.jj 2013-02-08 13:16:55.000000000 +0100 +++ gcc/ipa-pure-const.c 2013-02-27 11:20:54.876786950 +0100 @@ -1479,7 +1479,7 @@ propagate (void) propagate_pure_const (); /* Cleanup. */ - FOR_EACH_DEFINED_FUNCTION (node) + FOR_EACH_FUNCTION (node) if (has_function_state (node)) free (get_function_state (node)); funct_state_vec.release (); Jakub