https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116907
--- Comment #26 from Jan Hubicka <hubicka at gcc dot gnu.org> --- GGC should not release blocks that are still in use. They are linked by function's block tree and only if dead they are removed by tree-ssa-live.cc So the question is why that expr has dangliing pointer to dead scope block. We also stream out blocks by: stream_write_tree_ref (ob, TREE_BLOCK (expr)) in tree-streamer-out.C, so removing that call will just postpone the problem to later ICE.