Restore tail call optimization subversion.
Restore the essence of 898960247a8b2e6534738b7a3a244855f379faf9, which
sabotages tail call optimization. This is necessary even when the
mutually recursive functions are in separate compilation units.
diff --git a/test/unit/prof_accum.h b/test/unit/prof_accum.h
index de9cfea..109d86b 100644
--- a/test/unit/prof_accum.h
+++ b/test/unit/prof_accum.h
@@ -14,16 +14,22 @@
void * \
alloc_##n(unsigned bits) \
{ \
+ void *p; \
\
- if (bits == 0) { \
- void *p = mallocx(1, 0); \
- assert_ptr_not_null(p, "Unexpected mallocx() failure"); \
- return (p); \
- } else { \
+ if (bits == 0) \
+ p = mallocx(1, 0); \
+ else { \
switch (bits & 0x1U) { \
- case 0: return (alloc_0(bits >> 1)); \
- case 1: return (alloc_1(bits >> 1)); \
+ case 0: \
+ p = (alloc_0(bits >> 1)); \
+ break; \
+ case 1: \
+ p = (alloc_1(bits >> 1)); \
+ break; \
default: not_reached(); \
} \
} \
+ /* Intentionally sabotage tail call optimization. */ \
+ assert_ptr_not_null(p, "Unexpected mallocx() failure"); \
+ return (p); \
}