<div dir="ltr">Agreed.<div><br></div><div style>-eric</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Mar 13, 2013 at 2:27 AM, Duncan Sands <span dir="ltr"><<a href="mailto:baldrick@free.fr" target="_blank">baldrick@free.fr</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi David,<div><div class="h5"><br>
<br>
On 12/03/13 21:38, David Blaikie wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Currently the debug info metadata handling is a bit loose - LLVM<br>
accepts pretty much anything that looks roughly like the desired<br>
schema & is lazily resilient to some differences (see, for example,<br>
llvm::DIDescriptor::get*Field functions (lib/IR/DebugInfo.cpp:81)).<br>
<br>
I made some parts of debug info handling more pedantic about the<br>
structure (requiring a certain number of metadata operands, checking<br>
the validity of debug info contexts) & now can infinitely recurse for<br>
sufficiently incorrect debug info metadata.<br>
<br>
So I'm wondering what LLVM's guarantees are or should be here. It<br>
seems there's two possibilities:<br>
<br>
1) LLVM should have well defined behavior over any metadata values<br>
(anything that passes the current IR verifier, I assume - though I<br>
don't know a great deal about what's covered by the verifier)<br>
<br>
2) LLVM should grow metadata verification to the IR verifier & have<br>
well defined behavior only over metadata that passes such verification<br>
(in this case we can have UB (infinite recursion, out of bounds, etc)<br>
in debug info metadata handling by verifying it all up-front)<br>
<br>
Are there other positions? Is there a clear precedent/reason to choose<br>
one of the above choices? (I'd be inclined towards (2) but not sure if<br>
this violates some important principles of LLVM)<br>
</blockquote>
<br></div></div>
I vote for 2).  The verifier already does a little bit of metadata verification,<br>
but I think it should thoroughly verify all metadata that LLVM itself uses<br>
(while ignoring user defined metadata).<br>
<br>
Ciao, Duncan.<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>