<div dir="ltr"><div>This patch is pretty scary.  __builtin_setjmp/longjmp are definitely not just libc functions with a __builtin_ prefix attached.  They do not interoperate with setjmp/longjmp and expect a significantly smaller buffer, so silently rewriting them to setjmp/longjmp is ABI-breaking.  This might fix Ruby, but only if Ruby is actually passing a full jmp_buf, and only if everything that does a __builtin_setjmp/__builtin_longjmp is recompiled in a way that does the rewrite.  I'm very concerned about this introducing ABI problems for a Clang-compiled Ruby with GCC-compiled extensions or vice-versa.  FWIW, Ruby seems to already have target-specific configuration logic for when to use them.</div><div><br></div><div>Therefore, if we don't actually consistently support these builtins in the backend in a GCC-compatible way (quite plausible), I would be much more comfortable diagnosing that than silently rewriting them to setjmp/longjmp, unless there are platforms where GCC does actually rewrite them.  Have you done that investigation?</div><div><br></div><div>John.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Mar 2, 2015 at 8:14 AM, Joerg Sonnenberger <span dir="ltr"><<a href="mailto:joerg@britannica.bec.de" target="_blank">joerg@britannica.bec.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Mon, Feb 23, 2015 at 10:28:51PM +0100, Joerg Sonnenberger wrote:<br>
> On Mon, Feb 23, 2015 at 08:23:48PM -0000, Joerg Sonnenberger wrote:<br>
> > Author: joerg<br>
> > Date: Mon Feb 23 14:23:47 2015<br>
> > New Revision: 230255<br>
> ><br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project?rev=230255&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=230255&view=rev</a><br>
> > Log:<br>
> > Only lower __builtin_setjmp / __builtin_longjmp to<br>
> > llvm.eh.sjlj.setjmp / llvm.eh.sjlj.longjmp, if the backend is known to<br>
> > support them outside the Exception Handling context. The default<br>
> > handling in LLVM codegen doesn't work and will create incorrect code.<br>
> > The ARM backend on the other hand will assert if the intrinsics are<br>
> > used.<br>
><br>
> This should be merged to the 3.6 branch, it unbreaks Ruby on ARM.<br>
<br>
John, can you OK the merge, please?<br>
<span class="HOEnZb"><font color="#888888"><br>
Joerg<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">I suppose you'd like my real thoughts as well.</div>
</div>