Current Implementation: #define CALLTRACE_RETURN(...) do { CALLTRACE_END(); return __VA_ARGS__; } while(0) Expected Implementation: #define CALLTRACE_RETURN(...) do { typeof(__VA_ARGS__) v = __VA_ARGS__; CALLTRACE_END(); return v; } while(0)