<div dir="ltr">My Pascal compiler (for obvious reasons) supper nested functions. <br><br>I originally added hidden extra, hidden, arguments for the variables used in the outer arguments, but had to add support for function pointers for functions inside a nested structure, and ended up using the LLVM suport for trampolines.<br><br>For (probably not ideal) reference:<br><a href="https://github.com/Leporacanthicus/lacsap/commit/d04411fb37f584970210dc0f6e9d567f91a14443">https://github.com/Leporacanthicus/lacsap/commit/d04411fb37f584970210dc0f6e9d567f91a14443</a><br><br>--<div>Mats</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 13 September 2015 at 10:39, David Chisnall via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 13 Sep 2015, at 01:18, Rodney M. Bates via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br>
><br>
> Does Clang have an option that allows C nested functions, as in gcc?<br>
> So far, I can't find it.  I just want to look at generated llvm IR, for<br>
> ideas on the best way to produce it from another front end.<br>
<br>
</span>Clang doesn’t support it, but llvm-gcc did (and DragonEgg, possibly?), and this is what the trampoline intrinsics are for.  The way that GCC implements it is very dangerous - it requires having an executable stack, which makes various attacks significantly easier.<br>
<br>
The nested function approach is *only* required if you need the ability for unmodified C code (or code using a C FFI) to be able to call the generated functions.  If you do not have this requirement, then using an explicit argument in the LLVM IR to contain the state for the closure (as [Objective-]C blocks and C++ lambdas do) is probably a better option.<br>
<br>
David<br>
<div class="HOEnZb"><div class="h5"><br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</div></div></blockquote></div><br></div>