>> BTW, it does not deal with types that in some instances have variables >> allocated in proper GC way (with a path from GC root) and in some >> instances not. Fixing these is going to be hard. > > Do you have some examples?
Trees and rtxes mostly. I haven't got around to taking a closer look, but for example folders love allocating temporary trees. For example, in tree-ssa-ccp.c:fold_gimple_assign, if (COMPARISON_CLASS_P (op0)) { fold_defer_overflow_warnings (); tem = fold_binary_loc (cond_loc, TREE_CODE (op0), TREE_TYPE (op0), TREE_OPERAND (op0, 0), TREE_OPERAND (op0, 1)); /* This is actually a conditional expression, not a GIMPLE conditional statement, however, the valid_gimple_rhs_p test still applies. */ set = (tem && is_gimple_condexpr (tem) && valid_gimple_rhs_p (tem)); fold_undefer_overflow_warnings (set, stmt, 0); } Here tem should not be allocated on GC memory. >> I'd love to see this merged to trunk in near future too but I expect >> that right now it would be seen as an arbitrary and annoying change by >> developers, especially since nothing in GC implementation right now >> makes use of it. > > Actually, now is a perfect time to do it (more precisely, after LTO is > merged and before people start hacking on branches for 4.6). The only > really active branch now is trans-mem. In any case I am not done with it right now and it remains to be seen if I can make it during current stage 1... Thanks, -- Laurynas