Earlier quoted context omitted.
Looking at the implementation of libc4life, I think it's full of gcc-isms. C4DEFER() is this: #define _C4DEFER(code, _def) \ void _def() code; \ bool _def_trigger __attribute__((cleanup(_def))) \ #define C4DEFER(code) \ _C4DEFER(code, C4GSYM(def)) \ So, nested functions and gcc attributes. Nested functions awesome, but they're a gcc extension, and only supported on some architectures anyway, and AFAIK only work if yo…
I had to draw a line somewhere, and C99 with GNU extensions is where it is. Cleanup attributes and anonymous functions are just too useful to leave behind. And since I'm using clang to develop this, I'm pretty sure it supports nested functions just fine.
Have you had any reports about problems on, e.g., OpenBSD, related to needing an executable stack?