Clang's blocks produce atrocious code. Look at the disassembly for:
int main(){ __block int (^foo)(int x) = ^ int (int x) { if(x<100) return foo(x+10); return x; }; return foo(69); }
versus the GCC: int main(){ int foo(int x) { if(x<100) return foo(x+10); return x; }; return foo(69); }
if you want to see what I'm talking about.CLANG: http://pastebin.com/37A9by4V
GCC: http://pastebin.com/RMEDnwxi
However, defer does look interesting, and implementing it for GCC is very easy:
#define defer_(x) do{}while(0); \
auto void _dtor1_##x(); \
auto void _dtor2_##x(); \
int __attribute__((cleanup(_dtor2_##x))) _dtorV_##x=69; \
void _dtor2_##x(){if(_dtorV_##x==42)return _dtor1_##x();};_dtorV_##x=42; \
void _dtor1_##x()
#define defer__(x) defer_(x)
#define defer defer__(__COUNTER__)
You don't have to use the stupid block-syntax either, just: in = fopen("whatever", "r");
defer { fclose(in); }