[cfe-dev] Nested functions in Clang?
David Chisnall via cfe-dev
cfe-dev at lists.llvm.org
Sun Sep 13 02:39:21 PDT 2015
On 13 Sep 2015, at 01:18, Rodney M. Bates via cfe-dev <cfe-dev at lists.llvm.org> wrote:
> Does Clang have an option that allows C nested functions, as in gcc?
> So far, I can't find it. I just want to look at generated llvm IR, for
> ideas on the best way to produce it from another front end.
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.
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.
More information about the cfe-dev