https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124682
--- Comment #11 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-15 branch has been updated by Jakub Jelinek <[email protected]>: https://gcc.gnu.org/g:2d6cf78161a71ed2839aae7633a0ef85366a8cd2 commit r15-11223-g2d6cf78161a71ed2839aae7633a0ef85366a8cd2 Author: Jakub Jelinek <[email protected]> Date: Tue Apr 21 13:20:00 2026 +0200 testsuite: Fix up builtin-math-6.c for mpc 1.4.* [PR124682] MPC 1.4.0 changed the handling of signed zeros in cpow results. These changes broke the builtin-math-6.c test. Looking at the differences, MPC 1.3.1 to 1.4.0 changes folding of the following calls in the test (it is always about the sign of the imag zero part, +-0.0 means below that MPC 1.3.1 returned positive 0.0 and MPC 1.4.0 returns -0.0 instead, and -+0.0 means conversely that MPC 1.3.1 returned -0.0 and MPC 1.4.0 returns positive 0.0. __builtin_cpow (__complex__ (-1.5e+0, 0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (-3.375e+0, +-0.0); __builtin_cpow (__complex__ (-1.5e+0, 0.0), __complex__ (-3.0e+0, -0.0)) = __complex__ (-2.96296296296296279848547783331014215946197509765625e-1, -+0.0); __builtin_cpow (__complex__ (1.5e+0, -0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (3.375e+0, -+0.0); __builtin_cpow (__complex__ (-2.0e+0, 0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (-8.0e+0, +-0.0); __builtin_cpow (__complex__ (-2.0e+0, 0.0), __complex__ (-3.0e+0, -0.0)) = __complex__ (-1.25e-1, -+0.0); __builtin_cpow (__complex__ (2.0e+0, -0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (8.0e+0, -+0.0); __builtin_cpow (__complex__ (-3.0e+0, 0.0), __complex__ (-4.0e+0, 0.0)) = __complex__ (1.2345679012345678327022824305458925664424896240234375e-2, -+0.0); __builtin_cpow (__complex__ (-3.0e+0, 0.0), __complex__ (4.0e+0, -0.0)) = __complex__ (8.1e+1, +-0.0); __builtin_cpow (__complex__ (3.0e+0, -0.0), __complex__ (4.0e+0, 0.0)) = __complex__ (8.1e+1, -+0.0); __builtin_cpow (__complex__ (-3.0e+0, 0.0), __complex__ (5.0e+0, 0.0)) = __complex__ (-2.43e+2, +-0.0); __builtin_cpow (__complex__ (-3.0e+0, 0.0), __complex__ (-5.0e+0, -0.0)) = __complex__ (-4.11522633744856002058210009408867335878312587738037109375e-3, -+0.0); __builtin_cpow (__complex__ (3.0e+0, -0.0), __complex__ (5.0e+0, 0.0)) = __complex__ (2.43e+2, -+0.0); __builtin_cpow (__complex__ (-4.0e+0, 0.0), __complex__ (-2.0e+0, 0.0)) = __complex__ (6.25e-2, -+0.0); __builtin_cpow (__complex__ (-4.0e+0, 0.0), __complex__ (2.0e+0, -0.0)) = __complex__ (1.6e+1, +-0.0); __builtin_cpow (__complex__ (4.0e+0, -0.0), __complex__ (2.0e+0, 0.0)) = __complex__ (1.6e+1, -+0.0); __builtin_cpow (__complex__ (1.5e+0, 0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (2.96296296296296279848547783331014215946197509765625e-1, -+0.0); __builtin_cpow (__complex__ (-1.5e+0, -0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (-2.96296296296296279848547783331014215946197509765625e-1, +-0.0); __builtin_cpow (__complex__ (-1.5e+0, -0.0), __complex__ (3.0e+0, -0.0)) = __complex__ (-3.375e+0, -+0.0); __builtin_cpow (__complex__ (2.0e+0, 0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (1.25e-1, -+0.0); __builtin_cpow (__complex__ (-2.0e+0, -0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (-1.25e-1, +-0.0); __builtin_cpow (__complex__ (-2.0e+0, -0.0), __complex__ (3.0e+0, -0.0)) = __complex__ (-8.0e+0, -+0.0); __builtin_cpow (__complex__ (3.0e+0, 0.0), __complex__ (-4.0e+0, 0.0)) = __complex__ (1.2345679012345678327022824305458925664424896240234375e-2, -+0.0); __builtin_cpow (__complex__ (3.0e+0, 0.0), __complex__ (-5.0e+0, 0.0)) = __complex__ (4.11522633744856002058210009408867335878312587738037109375e-3, -+0.0); __builtin_cpow (__complex__ (-3.0e+0, -0.0), __complex__ (-5.0e+0, 0.0)) = __complex__ (-4.11522633744856002058210009408867335878312587738037109375e-3, +-0.0); __builtin_cpow (__complex__ (-3.0e+0, -0.0), __complex__ (5.0e+0, -0.0)) = __complex__ (-2.43e+2, -+0.0); __builtin_cpow (__complex__ (-3.0e+0, -0.0), __complex__ (4.0e+0, 0.0)) = __complex__ (8.1e+1, -+0.0); __builtin_cpow (__complex__ (-3.0e+0, -0.0), __complex__ (-4.0e+0, -0.0)) = __complex__ (1.2345679012345678327022824305458925664424896240234375e-2, +-0.0); __builtin_cpow (__complex__ (4.0e+0, 0.0), __complex__ (-2.0e+0, 0.0)) = __complex__ (6.25e-2, -+0.0); __builtin_cpow (__complex__ (-4.0e+0, -0.0), __complex__ (2.0e+0, 0.0)) = __complex__ (1.6e+1, -+0.0); __builtin_cpow (__complex__ (-4.0e+0, -0.0), __complex__ (-2.0e+0, -0.0)) = __complex__ (6.25e-2, +-0.0); __builtin_cpowf (__complex__ (-1.5e+0, 0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (-3.375e+0, +-0.0); __builtin_cpowf (__complex__ (-1.5e+0, 0.0), __complex__ (-3.0e+0, -0.0)) = __complex__ (-2.96296298503875732421875e-1, -+0.0); __builtin_cpowf (__complex__ (1.5e+0, -0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (3.375e+0, -+0.0); __builtin_cpowf (__complex__ (-2.0e+0, 0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (-8.0e+0, +-0.0); __builtin_cpowf (__complex__ (-2.0e+0, 0.0), __complex__ (-3.0e+0, -0.0)) = __complex__ (-1.25e-1, -+0.0); __builtin_cpowf (__complex__ (2.0e+0, -0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (8.0e+0, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, 0.0), __complex__ (-4.0e+0, 0.0)) = __complex__ (1.2345679104328155517578125e-2, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, 0.0), __complex__ (4.0e+0, -0.0)) = __complex__ (8.1e+1, +-0.0); __builtin_cpowf (__complex__ (3.0e+0, -0.0), __complex__ (4.0e+0, 0.0)) = __complex__ (8.1e+1, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, 0.0), __complex__ (5.0e+0, 0.0)) = __complex__ (-2.43e+2, +-0.0); __builtin_cpowf (__complex__ (-3.0e+0, 0.0), __complex__ (-5.0e+0, -0.0)) = __complex__ (-4.1152262128889560699462890625e-3, -+0.0); __builtin_cpowf (__complex__ (3.0e+0, -0.0), __complex__ (5.0e+0, 0.0)) = __complex__ (2.43e+2, -+0.0); __builtin_cpowf (__complex__ (-4.0e+0, 0.0), __complex__ (-2.0e+0, 0.0)) = __complex__ (6.25e-2, -+0.0); __builtin_cpowf (__complex__ (-4.0e+0, 0.0), __complex__ (2.0e+0, -0.0)) = __complex__ (1.6e+1, +-0.0); __builtin_cpowf (__complex__ (4.0e+0, -0.0), __complex__ (2.0e+0, 0.0)) = __complex__ (1.6e+1, -+0.0); __builtin_cpowf (__complex__ (1.5e+0, 0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (2.96296298503875732421875e-1, -+0.0); __builtin_cpowf (__complex__ (-1.5e+0, -0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (-2.96296298503875732421875e-1, +-0.0); __builtin_cpowf (__complex__ (-1.5e+0, -0.0), __complex__ (3.0e+0, -0.0)) = __complex__ (-3.375e+0, -+0.0); __builtin_cpowf (__complex__ (2.0e+0, 0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (1.25e-1, -+0.0); __builtin_cpowf (__complex__ (-2.0e+0, -0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (-1.25e-1, +-0.0); __builtin_cpowf (__complex__ (-2.0e+0, -0.0), __complex__ (3.0e+0, -0.0)) = __complex__ (-8.0e+0, -+0.0); __builtin_cpowf (__complex__ (3.0e+0, 0.0), __complex__ (-4.0e+0, 0.0)) = __complex__ (1.2345679104328155517578125e-2, -+0.0); __builtin_cpowf (__complex__ (3.0e+0, 0.0), __complex__ (-5.0e+0, 0.0)) = __complex__ (4.1152262128889560699462890625e-3, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, -0.0), __complex__ (-5.0e+0, 0.0)) = __complex__ (-4.1152262128889560699462890625e-3, +-0.0); __builtin_cpowf (__complex__ (-3.0e+0, -0.0), __complex__ (5.0e+0, -0.0)) = __complex__ (-2.43e+2, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, -0.0), __complex__ (4.0e+0, 0.0)) = __complex__ (8.1e+1, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, -0.0), __complex__ (-4.0e+0, -0.0)) = __complex__ (1.2345679104328155517578125e-2, +-0.0); __builtin_cpowf (__complex__ (4.0e+0, 0.0), __complex__ (-2.0e+0, 0.0)) = __complex__ (6.25e-2, -+0.0); __builtin_cpowf (__complex__ (-4.0e+0, -0.0), __complex__ (2.0e+0, 0.0)) = __complex__ (1.6e+1, -+0.0); __builtin_cpowf (__complex__ (-4.0e+0, -0.0), __complex__ (-2.0e+0, -0.0)) = __complex__ (6.25e-2, +-0.0); __builtin_cpowf (__complex__ (-1.5e+0, 0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (-3.375e+0, +-0.0); __builtin_cpowf (__complex__ (-1.5e+0, 0.0), __complex__ (-3.0e+0, -0.0)) = __complex__ (-2.96296296296296296301315750798544002009293762966990470886e-1, -+0.0); __builtin_cpowf (__complex__ (1.5e+0, -0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (3.375e+0, -+0.0); __builtin_cpowf (__complex__ (-2.0e+0, 0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (-8.0e+0, +-0.0); __builtin_cpowf (__complex__ (-2.0e+0, 0.0), __complex__ (-3.0e+0, -0.0)) = __complex__ (-1.25e-1, -+0.0); __builtin_cpowf (__complex__ (2.0e+0, -0.0), __complex__ (3.0e+0, 0.0)) = __complex__ (8.0e+0, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, 0.0), __complex__ (-4.0e+0, 0.0)) = __complex__ (1.23456790123456790122724786341878999706977992900647222996e-2, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, 0.0), __complex__ (4.0e+0, -0.0)) = __complex__ (8.1e+1, +-0.0); __builtin_cpowf (__complex__ (3.0e+0, -0.0), __complex__ (4.0e+0, 0.0)) = __complex__ (8.1e+1, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, 0.0), __complex__ (5.0e+0, 0.0)) = __complex__ (-2.43e+2, +-0.0); __builtin_cpowf (__complex__ (-3.0e+0, 0.0), __complex__ (-5.0e+0, -0.0)) = __complex__ (-4.11522633744855967075749287806263332356593309668824076653e-3, -+0.0); __builtin_cpowf (__complex__ (3.0e+0, -0.0), __complex__ (5.0e+0, 0.0)) = __complex__ (2.43e+2, -+0.0); __builtin_cpowf (__complex__ (-4.0e+0, 0.0), __complex__ (-2.0e+0, 0.0)) = __complex__ (6.25e-2, -+0.0); __builtin_cpowf (__complex__ (-4.0e+0, 0.0), __complex__ (2.0e+0, -0.0)) = __complex__ (1.6e+1, +-0.0); __builtin_cpowf (__complex__ (4.0e+0, -0.0), __complex__ (2.0e+0, 0.0)) = __complex__ (1.6e+1, -+0.0); __builtin_cpowf (__complex__ (1.5e+0, 0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (2.96296296296296296301315750798544002009293762966990470886e-1, -+0.0); __builtin_cpowf (__complex__ (-1.5e+0, -0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (-2.96296296296296296301315750798544002009293762966990470886e-1, +-0.0); __builtin_cpowf (__complex__ (-1.5e+0, -0.0), __complex__ (3.0e+0, -0.0)) = __complex__ (-3.375e+0, -+0.0); __builtin_cpowf (__complex__ (2.0e+0, 0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (1.25e-1, -+0.0); __builtin_cpowf (__complex__ (-2.0e+0, -0.0), __complex__ (-3.0e+0, 0.0)) = __complex__ (-1.25e-1, +-0.0); __builtin_cpowf (__complex__ (-2.0e+0, -0.0), __complex__ (3.0e+0, -0.0)) = __complex__ (-8.0e+0, -+0.0); __builtin_cpowf (__complex__ (3.0e+0, 0.0), __complex__ (-4.0e+0, 0.0)) = __complex__ (1.23456790123456790122724786341878999706977992900647222996e-2, -+0.0); __builtin_cpowf (__complex__ (3.0e+0, 0.0), __complex__ (-5.0e+0, 0.0)) = __complex__ (4.11522633744855967075749287806263332356593309668824076653e-3, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, -0.0), __complex__ (-5.0e+0, 0.0)) = __complex__ (-4.11522633744855967075749287806263332356593309668824076653e-3, +-0.0); __builtin_cpowf (__complex__ (-3.0e+0, -0.0), __complex__ (5.0e+0, -0.0)) = __complex__ (-2.43e+2, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, -0.0), __complex__ (4.0e+0, 0.0)) = __complex__ (8.1e+1, -+0.0); __builtin_cpowf (__complex__ (-3.0e+0, -0.0), __complex__ (-4.0e+0, -0.0)) = __complex__ (1.23456790123456790122724786341878999706977992900647222996e-2, +-0.0); __builtin_cpowf (__complex__ (4.0e+0, 0.0), __complex__ (-2.0e+0, 0.0)) = __complex__ (6.25e-2, -+0.0); __builtin_cpowf (__complex__ (-4.0e+0, -0.0), __complex__ (2.0e+0, 0.0)) = __complex__ (1.6e+1, -+0.0); __builtin_cpowf (__complex__ (-4.0e+0, -0.0), __complex__ (-2.0e+0, -0.0)) = __complex__ (6.25e-2, +-0.0); The following patch adjusts the testcase, so that it ignores the sign of zero imag part. 2026-04-21 Jakub Jelinek <[email protected]> PR testsuite/124682 * gcc.dg/torture/builtin-math-6.c (TESTIT_COMPLEX_R2_ISZ): Define. (TESTIT_COMPLEX_R2_ALLNEG): Use TESTIT_COMPLEX_R2_ISZ instead of TESTIT_COMPLEX_R2. Reviewed-by: Richard Biener <[email protected]> (cherry picked from commit 727f2230548dd08fe1a0f9549cd7011290eaaf31)
