https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90348
--- Comment #12 from Michael Matz <matz at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #11) > before that region. If we can say for: > for (...) > { > unsigned char v[10]; > unsigned char *p = foo (v); > *p = 1; > unsigned char w[10]; > bar (w); > } > hoist the p = foo (v); call before the loop, then indeed we are in big > trouble. This is effectively what the testcase is doing (just that 'foo' is no call, but a normal address expression), so yes, we can do that, and yes we are in big trouble :-/ > If I have to consider pt->anything and pt->escaped, then it will be as > useless for the variable conflicts as is removing the important clearing of > the bitmap bit on clobber stmt, we won't share stack slots pretty much at > all. Yeah; if we don't want to patch the specific situation for this testcase (which might be okayish, we haven't seen this problem very often over the last years), but want to really fix it we might have to take more involved means like doing stack slot sharing before gimplification and rewriting the IL to reflect this. Or give up on sharing (which isn't a good idea). Gnah.