What is clang trying to do optimizing this simple recursive algorithm?
问题 Upon writing an answer to this question: Using variable vs. using number I ran clang x86 9.0.0/trunk with -O3 to see if it could do tail-call optimization of this simple code: int faculty1 (const unsigned int n) { return n == 1 ? n : n * faculty1(n - 1); } Not only does clang fail that, it goes completely bananas and gives me this: godbolt .LCPI0_0: .long 0 # 0x0 .long 4294967295 # 0xffffffff .long 4294967294 # 0xfffffffe .long 4294967293 # 0xfffffffd .LCPI0_1: .long 1 # 0x1 .long 1 # 0x1