The way to do this is not to use the shadow memory, but to clobber directly the variable itself with specified byte pattern -- though error diagnostics won't be as nice.
To use shadow memory, the scope start marker is also needed. David On Tue, Oct 16, 2012 at 9:12 AM, Jakub Jelinek <ja...@redhat.com> wrote: > On Tue, Oct 16, 2012 at 09:06:22AM -0700, Xinliang David Li wrote: >> I don't get it. Clobber marks the end of lifetime of a variable so it >> is safe to emit code to really clobber its value -- otherwise how >> would clobber based slot sharing work? > > If you at CLOBBER protect the var in the shadow mem as unaccessible, the > thing is where you make it accessible again. > Consider: > > int i; > for (i = 0; i < 2; i++) > { > int tmp; > bar (); > baz (&tmp); > bar (); > } > > where the first bar () can't possibly access tmp, but the second bar () can. > Now we unroll it and have: > bar (); > baz (&tmp); > bar (); > tmp ={v} {CLOBBER}; > bar (); > baz (&tmp); > bar (); > tmp ={v} {CLOBBER}; > So, if you want to *mem_to_shadow (&tmp) = 0xff; at {CLOBBER} time, where > and how you would insert *mem_to_shadow (&tmp) = 0; again? In the above > code it would need to go before the second baz (&tmp);, the question is > how you'd find that out... > > Jakub