Thanks Frankie... it is at least worth experimenting with.
But from the description in the help file I don't think it does quite the same thing as what I'm asking about...
With all optimizations off, every variable in a function, regardless of scope, occupies it's own stack space for the duration of the function. This, in effect, transforms complex functions with inner scopes into standard functions, as far as the stack is concerned. (And don't forget that bracketing used with if, for, while, etc. constitutes a scope)
With any of the optimizations on (Os, Ot or Ox) the compiler switches gears and stack space for nested scopes is reused after the scope exits. The "big enough for the biggest" blob of stack memory is cleared at the end of the function.
What I'm suggesting is that these two stack strategies should be managed by a separate compiler switch so we can have more control over how the compiler manages the stack. Or, perhaps, the second strategy should be "always on".