More speculative and somewhat complicated return type tracking