https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103006
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |msebor at gcc dot gnu.org, | |rsandifo at gcc dot gnu.org --- Comment #13 from Richard Biener <rguenth at gcc dot gnu.org> --- So I have a patch that adds explicit birth markers (using clobbers specially marked). That works well sofar but it conflicts with clobbers (not marked as birth) that are added for clobbering at the start of variable lifetime like C++ does at the beginning of CTORs. I for example see inst ={v} {CLOBBER(birth)}; inst ={v} {CLOBBER}; (**) inst.v = 42; ... inst ={v} {CLOBBER}; where (**) is inserted by the C++ frontend (with -flifetime-dse which is the default). Indeed my life analysis for the purpose of stack slot sharing now only relies on the birth/death markers so it gets confused by the extra clobber. We now also have some use-after-free diagnostic that would likely trip over this as it assumes that a CLOBBER ends lifetime of storage. I guess disentangling both use-cases by also marking the end-of-storage-lifetime clobbers specially would solve both issues.