<div dir="ltr"><div>This isn't really feasible.<br></div><div><br></div><div>First, you are asking for a warning from LLVM's optimizers, which we strive to avoid, as they are unstable and affected by optimization levels.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Second, there are many, many optimizations that transform code in ways that could remove gc roots, and it is not practical to annotate them all.</div><div class="gmail_extra">
<br></div><div class="gmail_extra">If you have a relocating GC, you need to implement something more sophisticated like Phillip's late safepoint insertion approach.<br><br><div class="gmail_quote">On Tue, Aug 5, 2014 at 4:55 AM, Dmitry Antipov <span dir="ltr"><<a href="mailto:antipov@dev.rtsoft.ru" target="_blank">antipov@dev.rtsoft.ru</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
it it possible to get a kind of diagnostics if the variable<br>
is totally optimized away?  For example, in:<br>
<br>
void foo (struct some_type *obj) {<br>
  ... some code where 'obj' is not used ...<br>
  bar (obj->some_member);<br>
  ... some code where 'obj' is not used again ...<br>
  baz (obj->some_member);<br>
}<br>
<br>
'obj' is likely to be optimized away so only 'obj->some_member' really<br>
exists (in a register or stack location).  Getting diagnostics<br>
or preserving 'obj' may be important if there is a GC which scans<br>
C stack and registers conservatively - if there is no direct reference<br>
to 'obj', it's likely to be reclaimed and so 'obj->some_member'<br>
becomes garbage.<br>
<br>
Dmitry<br>
______________________________<u></u>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvmdev</a><br>
</blockquote></div><br></div></div>