TCO requires -O1 gcc flag