[PATCH, testsuite] Fix for PR49519, miscompiled 447.dealII in SPEC CPU 2006

Eric Botcazou ebotcazou@adacore.com
Thu Jul 7 19:56:00 GMT 2011


> ChangeLog entry:
> 2011-07-06  Kirill Yukhin  <kirill.yukhin@intel.com>
>
>        PR middle-end/49519
>        * calls.c (mem_overlaps_already_clobbered_arg_p): Additional
>        check if address is stored in register. If so - give up.
>        (check_sibcall_argument_overlap_1): Do not perform check of
>        overlapping when it is call to address.
>
> tessuite/ChangeLog entry:
> 2011-07-06  Kirill Yukhin  <kirill.yukhin@intel.com>
>
>        * g++.dg/torture/pr49519.C: New test for tailcall fix.

New test is sufficient.

> Bootstrapped, new test fails without patch, passes when it is applied.
> This fixes the problem with SPEC2006/447.dealII miscompile

OK, modulo a few nits:

+  /* If address come in register - we have no idea of its origin, so
+     give up and conservatively return true */
+  else if (GET_CODE (addr) == REG)

/* If the address comes in a register, we have no idea of its origin so
   give up and conservatively return true.  */

Note the period-double-space-star-slash GNUism at the end.  Non-negotiable.


+  /* We do not check arguments of call expression */
+  if (code == CALL)
+    return 0;

Nice ambiguity, the entire machinery is about checking arguments of calls. :-)

/* We need not check the operands of the CALL expresion itself.  */


No need to retest, just make sure the changes compile (e.g. type 'make' from 
within the gcc/ directory of a bootstrap tree) and commit.

Thanks for fixing the bug.

-- 
Eric Botcazou



More information about the Gcc-patches mailing list