-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 05/06/11 04:44, Zdenek Dvorak wrote: > Hi, > > when accumulator transformation is performed on a function like > > foo(a) > { > if (a > 0) > return 1 + foo (a - 1) > > return bla(); > } > > this becomes > > foo(a) > { > int tmp = 0; > > while (a > 0) > tm = 1 + tmp; > > return tmp + bla(); > } > > Before, bla was a tail-call, but after the optimization, it is not (since an > addition > has to be performed after the result of bla is known). However, we used to > mark bla > as tail-call, leading to a misscompilation later. Fixed by not marking > tail-calls > when the transformation is performed. Bootstrapped and regtested on i686. > > Zdenek > > PR tree-optimization/48837 > * tree-tailcall.c (tree_optimize_tail_calls_1): Do not mark tailcalls > when accumulator transformation is performed. > > * gcc.dg/pr48837.c: New testcase. OK.
Thanks, jeff -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/ iQEcBAEBAgAGBQJNxA66AAoJEBRtltQi2kC7yysIAKZYUpU9JlyH2XwvvVslq8C1 CJ7E/akRDsBoYBS+syNsLMwkbGG0WoaFJzOd7vUmIknAHEusF6OasczsN8PD9aEB i8xJNTZm2yxhrVZh8m/KBX96r80RwzpAhr9L1WAspiS/xpw12lRoJoh3XeKXYXWw Z0aBL4ljCgLj6GKEyy7FbGHx0gEqaa1x7EDM1kJGCgZPAFJalJPozBiiriYL9/Th gHqLXZ0HUhXNGql5M2S+lfZG2d30Rj1KBXDrU8EOXedHRjxb+U9+WLGsUHZtkcTI j3//n6bjTr/YmyTe43voG3Rn6z6k0g2Eb8gF8UMvDbaSJlH9+xb6SuWLS8+mEhY= =luE9 -----END PGP SIGNATURE-----