I know that gcc preserves stack slots for statement expressions. http://gcc.gnu.org/ml/gcc-patches/2002-02/msg00958.html What about statement expressions that return arrays? When does GCC free stack used by statement expression array returns? For instance: #define itoa(i) \ ({ char tmp[16]; sprintf(tmp, "%d", i); tmp; }) printf("%s %s\n", itoa(1), itoa(2)); is the printf output guaranteed to be "1 2" or is it undefined?