http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54779
--- Comment #5 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- > Eric, to what extent would this patch suffice? It detects situations > when an array is the only thing preventing a local scalar from being > totally replaced disappearing and if it also complies with a number of > conditions (most importantly, it must not be accessed as whole, only > its elements), it creates a separate array and changes all array > references to use that. While it most certainly isn't as powerful as > your specialized patch, it also works on non-FRAMEs and is good enough > to break them up in your testcase (and its slightly more complex > variant included as the second testcase in the patch). The last sentence seems to comprise the answer. The purpose of the patch is to eliminate _all traces_ of the non-local frame when all the nested functions are inlined, without any restrictions whatsoever. The idea is that this artificial construct must die when everything is unnested.