1. 10
  1.  

  2. 1

    I think the compiler simply says “address of stack variable taken -> abort TCO”. Haven’t looked at the assembly in a while, but I wouldn’t really expect the scoping trick to work. Instead the compiler makes all variables “function level” at some point, which is simpler than pushing and popping the stack pointer as it enters every block.