A linear interface inheritance chain n deep (`interface I_k : I_{k-1}`) with one struct conforming to the most-derived interface (`I_n`) and one generic function constrained to the ROOT (`I0`), so satisfying the constraint walks the inheritance chain through all n levels. Scales the interface-hierarchy depth axis of calcInheritanceInfo — a different graph than generic_nesting's type-argument nesting. Scaling null: each level adds O(1) declarations, so ideal inheritance- info cost is O(n) (or O(n^2) for an all-pairs facet walk); measured ~N^3.4 when added (2026-07).
bucket: sema · mode: module · flags: (none)
compileInner split into phase buckets (named leaves + (self) residuals) stacked across the sweep sizes — the top edge is compileInner, so you can see which phase drives the scaling.
floor-subtracted power-law fit (t − floor) = a·Nk; floor = the minimal workload (fixed per-compile cost), k the global exponent, top-2× the local high-end doubling ratio.
| N range | floor (ms) | k (work) | fit R² | t(Nmin) | t(Nmax) | top-2× |
|---|---|---|---|---|---|---|
| 16–128 | 11 | 3.75 | 1.000 | 5 | 324 | 9.56× |
compileInner grows by 319 ms across the sweep; the mutually-exclusive phase buckets below partition that growth exactly (no nested-timer double counting). × lin is the same metric as the top-level panels, per bucket: the end point vs a linear expectation anchored to the bucket's share of the minimal floor and fitted on the low-N half — 1.0 = grew exactly linearly, >1 bends up. The super-linearity lives where × lin (and k) are red.
| bucket | t@N=16 | t@N=128 | Δ ms | share | × lin | ∝Nk |
|---|---|---|---|---|---|---|
| SemanticChecking | 2 | 312 | +310 | 97% | – | – |
Near-constant (≤2% of growth each): generateIR (1→8 ms), generateOutput (self) (1→3 ms), parseTranslationUnit (0→0 ms), frontEndExecute (self) (0→0 ms), compileInner (self) (0→0 ms).
| N | compileInner | SemanticChecking | frontEndExecute |
|---|---|---|---|
| 16 | 5 | 2 | 4 |
| 32 | 8 | 5 | 7 |
| 64 | 34 | 28 | 32 |
| 128 | 324 | 312 | 320 |