Consider the following code:
int fac_aux( int x, int res ) {
if( x == 1 ) return res;
else return fac_aux( x - 1, res * x );
}
int fac( int x ) {
return fac_aux( x, 1 );
}
int main() {
int x = fac( 50 );
std::cout << x;
return 0;
}
According to generated asm file everything is ok, tail call is optimized.
Try to replace
int x = fac( 50 );
with
int x = fac_aux( 50, 1 );
Strange enough, but tail call optimization is disappeared. As far as I remember there was no such a strange compiler behaviour in VS2008. Any ideas why these things happen and how to be sure of tail call optimization is done?
; Function compile flags: /Ogtp
Tried both /O2 and /Ox optimization flags. Are there any other compiler options that matter?
Edit: VS2012 manages to do the optimization