From: Thomas Koenig Date: Sun, 4 Mar 2007 08:03:34 +0000 (+0000) Subject: re PR fortran/30981 ([4.1 only] a ** exp fails for integer exponents if exp is "... X-Git-Tag: releases/gcc-4.3.0~6473 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3d1f465aff3484eafd4e10e38bc7f7331a43d0dd;p=thirdparty%2Fgcc.git re PR fortran/30981 ([4.1 only] a ** exp fails for integer exponents if exp is "-huge()-1" (endless loop)) 2007-03-04 Thomas Koenig PR libfortran/30981 * m4/pow_m4: Use appropriate unsigned int type for u. * generated/pow_c10_i16.c: Regenerated. * generated/pow_c10_i4.c: Regenerated. * generated/pow_c10_i8.c: Regenerated. * generated/pow_c16_i16.c: Regenerated. * generated/pow_c16_i4.c: Regenerated. * generated/pow_c16_i8.c: Regenerated. * generated/pow_c4_i16.c: Regenerated. * generated/pow_c4_i4.c: Regenerated. * generated/pow_c4_i8.c: Regenerated. * generated/pow_c8_i16.c: Regenerated. * generated/pow_c8_i4.c: Regenerated. * generated/pow_c8_i8.c: Regenerated. * generated/pow_i16_i16.c: Regenerated. * generated/pow_i16_i4.c: Regenerated. * generated/pow_i16_i8.c: Regenerated. * generated/pow_i4_i16.c: Regenerated. * generated/pow_i4_i4.c: Regenerated. * generated/pow_i4_i8.c: Regenerated. * generated/pow_i8_i16.c: Regenerated. * generated/pow_i8_i4.c: Regenerated. * generated/pow_i8_i8.c: Regenerated. * generated/pow_r10_i16.c: Regenerated. * generated/pow_r10_i4.c: Regenerated. * generated/pow_r10_i8.c: Regenerated. * generated/pow_r16_i16.c: Regenerated. * generated/pow_r16_i4.c: Regenerated. * generated/pow_r16_i8.c: Regenerated. * generated/pow_r4_i16.c: Regenerated. * generated/pow_r4_i4.c: Regenerated. * generated/pow_r4_i8.c: Regenerated. * generated/pow_r8_i16.c: Regenerated. * generated/pow_r8_i4.c: Regenerated. * generated/pow_r8_i8.c: Regenerated. 2007-03-04 Thomas Koenig PR libfortran/30981 * gfortran.dg/integer_exponentiation_1.f90: New test. From-SVN: r122522 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 097016dec5b9..309ea4ac6e9d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-03-04 Thomas Koenig + + PR libfortran/30981 + * gfortran.dg/integer_exponentiation_1.f90: New test. + 2007-03-04 Nathan Sidwell * gcc.target/m68k/m68k.exp: New. diff --git a/gcc/testsuite/gfortran.dg/integer_exponentiation_1.f90 b/gcc/testsuite/gfortran.dg/integer_exponentiation_1.f90 new file mode 100644 index 000000000000..57d7466d0050 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/integer_exponentiation_1.f90 @@ -0,0 +1,6 @@ +! { dg-do run } +! PR 30981 - this used to go into an endless loop during execution. +program test + a = 3.0 + b = a**(-2147483647-1) ! { dg-warning "Integer outside symmetric range" } +end program test diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index cfa42b23db41..ad71a7e6b205 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,41 @@ +2007-03-04 Thomas Koenig + + PR libfortran/30981 + * m4/pow_m4: Use appropriate unsigned int type for u. + * generated/pow_c10_i16.c: Regenerated. + * generated/pow_c10_i4.c: Regenerated. + * generated/pow_c10_i8.c: Regenerated. + * generated/pow_c16_i16.c: Regenerated. + * generated/pow_c16_i4.c: Regenerated. + * generated/pow_c16_i8.c: Regenerated. + * generated/pow_c4_i16.c: Regenerated. + * generated/pow_c4_i4.c: Regenerated. + * generated/pow_c4_i8.c: Regenerated. + * generated/pow_c8_i16.c: Regenerated. + * generated/pow_c8_i4.c: Regenerated. + * generated/pow_c8_i8.c: Regenerated. + * generated/pow_i16_i16.c: Regenerated. + * generated/pow_i16_i4.c: Regenerated. + * generated/pow_i16_i8.c: Regenerated. + * generated/pow_i4_i16.c: Regenerated. + * generated/pow_i4_i4.c: Regenerated. + * generated/pow_i4_i8.c: Regenerated. + * generated/pow_i8_i16.c: Regenerated. + * generated/pow_i8_i4.c: Regenerated. + * generated/pow_i8_i8.c: Regenerated. + * generated/pow_r10_i16.c: Regenerated. + * generated/pow_r10_i4.c: Regenerated. + * generated/pow_r10_i8.c: Regenerated. + * generated/pow_r16_i16.c: Regenerated. + * generated/pow_r16_i4.c: Regenerated. + * generated/pow_r16_i8.c: Regenerated. + * generated/pow_r4_i16.c: Regenerated. + * generated/pow_r4_i4.c: Regenerated. + * generated/pow_r4_i8.c: Regenerated. + * generated/pow_r8_i16.c: Regenerated. + * generated/pow_r8_i4.c: Regenerated. + * generated/pow_r8_i8.c: Regenerated. + 2007-03-03 Francois-Xavier Coudert PR libfortran/31001 diff --git a/libgfortran/generated/pow_c10_i16.c b/libgfortran/generated/pow_c10_i16.c index 6332013bdbc5..c62d5f47c225 100644 --- a/libgfortran/generated/pow_c10_i16.c +++ b/libgfortran/generated/pow_c10_i16.c @@ -45,7 +45,8 @@ GFC_COMPLEX_10 pow_c10_i16 (GFC_COMPLEX_10 a, GFC_INTEGER_16 b) { GFC_COMPLEX_10 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c10_i16 (GFC_COMPLEX_10 a, GFC_INTEGER_16 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c10_i4.c b/libgfortran/generated/pow_c10_i4.c index ccb1a0c6a2bd..aca3e7f1ad78 100644 --- a/libgfortran/generated/pow_c10_i4.c +++ b/libgfortran/generated/pow_c10_i4.c @@ -45,7 +45,8 @@ GFC_COMPLEX_10 pow_c10_i4 (GFC_COMPLEX_10 a, GFC_INTEGER_4 b) { GFC_COMPLEX_10 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c10_i4 (GFC_COMPLEX_10 a, GFC_INTEGER_4 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c10_i8.c b/libgfortran/generated/pow_c10_i8.c index 0f2b24264811..a4a94526db47 100644 --- a/libgfortran/generated/pow_c10_i8.c +++ b/libgfortran/generated/pow_c10_i8.c @@ -45,7 +45,8 @@ GFC_COMPLEX_10 pow_c10_i8 (GFC_COMPLEX_10 a, GFC_INTEGER_8 b) { GFC_COMPLEX_10 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c10_i8 (GFC_COMPLEX_10 a, GFC_INTEGER_8 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c16_i16.c b/libgfortran/generated/pow_c16_i16.c index a6d888369b2b..d05580f71d68 100644 --- a/libgfortran/generated/pow_c16_i16.c +++ b/libgfortran/generated/pow_c16_i16.c @@ -45,7 +45,8 @@ GFC_COMPLEX_16 pow_c16_i16 (GFC_COMPLEX_16 a, GFC_INTEGER_16 b) { GFC_COMPLEX_16 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c16_i16 (GFC_COMPLEX_16 a, GFC_INTEGER_16 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c16_i4.c b/libgfortran/generated/pow_c16_i4.c index d3960520cf99..b0576c5ad44f 100644 --- a/libgfortran/generated/pow_c16_i4.c +++ b/libgfortran/generated/pow_c16_i4.c @@ -45,7 +45,8 @@ GFC_COMPLEX_16 pow_c16_i4 (GFC_COMPLEX_16 a, GFC_INTEGER_4 b) { GFC_COMPLEX_16 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c16_i4 (GFC_COMPLEX_16 a, GFC_INTEGER_4 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c16_i8.c b/libgfortran/generated/pow_c16_i8.c index 0a0e94d06131..3d991606a401 100644 --- a/libgfortran/generated/pow_c16_i8.c +++ b/libgfortran/generated/pow_c16_i8.c @@ -45,7 +45,8 @@ GFC_COMPLEX_16 pow_c16_i8 (GFC_COMPLEX_16 a, GFC_INTEGER_8 b) { GFC_COMPLEX_16 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c16_i8 (GFC_COMPLEX_16 a, GFC_INTEGER_8 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c4_i16.c b/libgfortran/generated/pow_c4_i16.c index 1085ad21caf9..84309ff63bd2 100644 --- a/libgfortran/generated/pow_c4_i16.c +++ b/libgfortran/generated/pow_c4_i16.c @@ -45,7 +45,8 @@ GFC_COMPLEX_4 pow_c4_i16 (GFC_COMPLEX_4 a, GFC_INTEGER_16 b) { GFC_COMPLEX_4 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c4_i16 (GFC_COMPLEX_4 a, GFC_INTEGER_16 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c4_i4.c b/libgfortran/generated/pow_c4_i4.c index ca376710fba8..35597d0df167 100644 --- a/libgfortran/generated/pow_c4_i4.c +++ b/libgfortran/generated/pow_c4_i4.c @@ -45,7 +45,8 @@ GFC_COMPLEX_4 pow_c4_i4 (GFC_COMPLEX_4 a, GFC_INTEGER_4 b) { GFC_COMPLEX_4 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c4_i4 (GFC_COMPLEX_4 a, GFC_INTEGER_4 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c4_i8.c b/libgfortran/generated/pow_c4_i8.c index f9fc849ca19d..bb113df2b47d 100644 --- a/libgfortran/generated/pow_c4_i8.c +++ b/libgfortran/generated/pow_c4_i8.c @@ -45,7 +45,8 @@ GFC_COMPLEX_4 pow_c4_i8 (GFC_COMPLEX_4 a, GFC_INTEGER_8 b) { GFC_COMPLEX_4 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c4_i8 (GFC_COMPLEX_4 a, GFC_INTEGER_8 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c8_i16.c b/libgfortran/generated/pow_c8_i16.c index 0fc162b5014b..ee4b68e955f1 100644 --- a/libgfortran/generated/pow_c8_i16.c +++ b/libgfortran/generated/pow_c8_i16.c @@ -45,7 +45,8 @@ GFC_COMPLEX_8 pow_c8_i16 (GFC_COMPLEX_8 a, GFC_INTEGER_16 b) { GFC_COMPLEX_8 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c8_i16 (GFC_COMPLEX_8 a, GFC_INTEGER_16 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c8_i4.c b/libgfortran/generated/pow_c8_i4.c index 64b4b3c5b698..30c6007879f0 100644 --- a/libgfortran/generated/pow_c8_i4.c +++ b/libgfortran/generated/pow_c8_i4.c @@ -45,7 +45,8 @@ GFC_COMPLEX_8 pow_c8_i4 (GFC_COMPLEX_8 a, GFC_INTEGER_4 b) { GFC_COMPLEX_8 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c8_i4 (GFC_COMPLEX_8 a, GFC_INTEGER_4 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_c8_i8.c b/libgfortran/generated/pow_c8_i8.c index 39a5d6b71e0b..d9b658b4fc4f 100644 --- a/libgfortran/generated/pow_c8_i8.c +++ b/libgfortran/generated/pow_c8_i8.c @@ -45,7 +45,8 @@ GFC_COMPLEX_8 pow_c8_i8 (GFC_COMPLEX_8 a, GFC_INTEGER_8 b) { GFC_COMPLEX_8 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_c8_i8 (GFC_COMPLEX_8 a, GFC_INTEGER_8 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_i16_i16.c b/libgfortran/generated/pow_i16_i16.c index eda2fb6dc7c8..b665f5ea2b9a 100644 --- a/libgfortran/generated/pow_i16_i16.c +++ b/libgfortran/generated/pow_i16_i16.c @@ -45,7 +45,8 @@ GFC_INTEGER_16 pow_i16_i16 (GFC_INTEGER_16 a, GFC_INTEGER_16 b) { GFC_INTEGER_16 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -60,7 +61,10 @@ pow_i16_i16 (GFC_INTEGER_16 a, GFC_INTEGER_16 b) return (n & 1) ? -1 : 1; return (x == 0) ? 1 / x : 0; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_i16_i4.c b/libgfortran/generated/pow_i16_i4.c index 6e4d65c35c43..45994a3598e2 100644 --- a/libgfortran/generated/pow_i16_i4.c +++ b/libgfortran/generated/pow_i16_i4.c @@ -45,7 +45,8 @@ GFC_INTEGER_16 pow_i16_i4 (GFC_INTEGER_16 a, GFC_INTEGER_4 b) { GFC_INTEGER_16 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -60,7 +61,10 @@ pow_i16_i4 (GFC_INTEGER_16 a, GFC_INTEGER_4 b) return (n & 1) ? -1 : 1; return (x == 0) ? 1 / x : 0; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_i16_i8.c b/libgfortran/generated/pow_i16_i8.c index d1849511a297..80075051553c 100644 --- a/libgfortran/generated/pow_i16_i8.c +++ b/libgfortran/generated/pow_i16_i8.c @@ -45,7 +45,8 @@ GFC_INTEGER_16 pow_i16_i8 (GFC_INTEGER_16 a, GFC_INTEGER_8 b) { GFC_INTEGER_16 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -60,7 +61,10 @@ pow_i16_i8 (GFC_INTEGER_16 a, GFC_INTEGER_8 b) return (n & 1) ? -1 : 1; return (x == 0) ? 1 / x : 0; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_i4_i16.c b/libgfortran/generated/pow_i4_i16.c index f515f80359ea..abab476830c8 100644 --- a/libgfortran/generated/pow_i4_i16.c +++ b/libgfortran/generated/pow_i4_i16.c @@ -45,7 +45,8 @@ GFC_INTEGER_4 pow_i4_i16 (GFC_INTEGER_4 a, GFC_INTEGER_16 b) { GFC_INTEGER_4 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -60,7 +61,10 @@ pow_i4_i16 (GFC_INTEGER_4 a, GFC_INTEGER_16 b) return (n & 1) ? -1 : 1; return (x == 0) ? 1 / x : 0; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_i4_i4.c b/libgfortran/generated/pow_i4_i4.c index 184fe6d986e2..e28cf90b116a 100644 --- a/libgfortran/generated/pow_i4_i4.c +++ b/libgfortran/generated/pow_i4_i4.c @@ -45,7 +45,8 @@ GFC_INTEGER_4 pow_i4_i4 (GFC_INTEGER_4 a, GFC_INTEGER_4 b) { GFC_INTEGER_4 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -60,7 +61,10 @@ pow_i4_i4 (GFC_INTEGER_4 a, GFC_INTEGER_4 b) return (n & 1) ? -1 : 1; return (x == 0) ? 1 / x : 0; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_i4_i8.c b/libgfortran/generated/pow_i4_i8.c index ae24ceb54c2b..51d2e14a8080 100644 --- a/libgfortran/generated/pow_i4_i8.c +++ b/libgfortran/generated/pow_i4_i8.c @@ -45,7 +45,8 @@ GFC_INTEGER_4 pow_i4_i8 (GFC_INTEGER_4 a, GFC_INTEGER_8 b) { GFC_INTEGER_4 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -60,7 +61,10 @@ pow_i4_i8 (GFC_INTEGER_4 a, GFC_INTEGER_8 b) return (n & 1) ? -1 : 1; return (x == 0) ? 1 / x : 0; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_i8_i16.c b/libgfortran/generated/pow_i8_i16.c index 456c28a95bdf..88713da698e8 100644 --- a/libgfortran/generated/pow_i8_i16.c +++ b/libgfortran/generated/pow_i8_i16.c @@ -45,7 +45,8 @@ GFC_INTEGER_8 pow_i8_i16 (GFC_INTEGER_8 a, GFC_INTEGER_16 b) { GFC_INTEGER_8 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -60,7 +61,10 @@ pow_i8_i16 (GFC_INTEGER_8 a, GFC_INTEGER_16 b) return (n & 1) ? -1 : 1; return (x == 0) ? 1 / x : 0; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_i8_i4.c b/libgfortran/generated/pow_i8_i4.c index 8f85a80c81cb..6746af33d5ba 100644 --- a/libgfortran/generated/pow_i8_i4.c +++ b/libgfortran/generated/pow_i8_i4.c @@ -45,7 +45,8 @@ GFC_INTEGER_8 pow_i8_i4 (GFC_INTEGER_8 a, GFC_INTEGER_4 b) { GFC_INTEGER_8 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -60,7 +61,10 @@ pow_i8_i4 (GFC_INTEGER_8 a, GFC_INTEGER_4 b) return (n & 1) ? -1 : 1; return (x == 0) ? 1 / x : 0; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_i8_i8.c b/libgfortran/generated/pow_i8_i8.c index 8c8f52e54121..3050974036cd 100644 --- a/libgfortran/generated/pow_i8_i8.c +++ b/libgfortran/generated/pow_i8_i8.c @@ -45,7 +45,8 @@ GFC_INTEGER_8 pow_i8_i8 (GFC_INTEGER_8 a, GFC_INTEGER_8 b) { GFC_INTEGER_8 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -60,7 +61,10 @@ pow_i8_i8 (GFC_INTEGER_8 a, GFC_INTEGER_8 b) return (n & 1) ? -1 : 1; return (x == 0) ? 1 / x : 0; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r10_i16.c b/libgfortran/generated/pow_r10_i16.c index ad736641adc9..2377e67ca510 100644 --- a/libgfortran/generated/pow_r10_i16.c +++ b/libgfortran/generated/pow_r10_i16.c @@ -45,7 +45,8 @@ GFC_REAL_10 pow_r10_i16 (GFC_REAL_10 a, GFC_INTEGER_16 b) { GFC_REAL_10 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r10_i16 (GFC_REAL_10 a, GFC_INTEGER_16 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r10_i4.c b/libgfortran/generated/pow_r10_i4.c index 3f2373243b44..d21869b5d2c7 100644 --- a/libgfortran/generated/pow_r10_i4.c +++ b/libgfortran/generated/pow_r10_i4.c @@ -45,7 +45,8 @@ GFC_REAL_10 pow_r10_i4 (GFC_REAL_10 a, GFC_INTEGER_4 b) { GFC_REAL_10 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r10_i4 (GFC_REAL_10 a, GFC_INTEGER_4 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r10_i8.c b/libgfortran/generated/pow_r10_i8.c index 2e99c600bea8..5a5ecffdb449 100644 --- a/libgfortran/generated/pow_r10_i8.c +++ b/libgfortran/generated/pow_r10_i8.c @@ -45,7 +45,8 @@ GFC_REAL_10 pow_r10_i8 (GFC_REAL_10 a, GFC_INTEGER_8 b) { GFC_REAL_10 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r10_i8 (GFC_REAL_10 a, GFC_INTEGER_8 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r16_i16.c b/libgfortran/generated/pow_r16_i16.c index 63d6fa886f21..24313c2df2a2 100644 --- a/libgfortran/generated/pow_r16_i16.c +++ b/libgfortran/generated/pow_r16_i16.c @@ -45,7 +45,8 @@ GFC_REAL_16 pow_r16_i16 (GFC_REAL_16 a, GFC_INTEGER_16 b) { GFC_REAL_16 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r16_i16 (GFC_REAL_16 a, GFC_INTEGER_16 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r16_i4.c b/libgfortran/generated/pow_r16_i4.c index 949f23717491..3901577ecc72 100644 --- a/libgfortran/generated/pow_r16_i4.c +++ b/libgfortran/generated/pow_r16_i4.c @@ -45,7 +45,8 @@ GFC_REAL_16 pow_r16_i4 (GFC_REAL_16 a, GFC_INTEGER_4 b) { GFC_REAL_16 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r16_i4 (GFC_REAL_16 a, GFC_INTEGER_4 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r16_i8.c b/libgfortran/generated/pow_r16_i8.c index 37649d82cb18..e7233729b488 100644 --- a/libgfortran/generated/pow_r16_i8.c +++ b/libgfortran/generated/pow_r16_i8.c @@ -45,7 +45,8 @@ GFC_REAL_16 pow_r16_i8 (GFC_REAL_16 a, GFC_INTEGER_8 b) { GFC_REAL_16 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r16_i8 (GFC_REAL_16 a, GFC_INTEGER_8 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r4_i16.c b/libgfortran/generated/pow_r4_i16.c index 635e627e9d64..e73794952d7b 100644 --- a/libgfortran/generated/pow_r4_i16.c +++ b/libgfortran/generated/pow_r4_i16.c @@ -45,7 +45,8 @@ GFC_REAL_4 pow_r4_i16 (GFC_REAL_4 a, GFC_INTEGER_16 b) { GFC_REAL_4 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r4_i16 (GFC_REAL_4 a, GFC_INTEGER_16 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r4_i4.c b/libgfortran/generated/pow_r4_i4.c index ff0045f913ba..5baa4b17f681 100644 --- a/libgfortran/generated/pow_r4_i4.c +++ b/libgfortran/generated/pow_r4_i4.c @@ -45,7 +45,8 @@ GFC_REAL_4 pow_r4_i4 (GFC_REAL_4 a, GFC_INTEGER_4 b) { GFC_REAL_4 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r4_i4 (GFC_REAL_4 a, GFC_INTEGER_4 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r4_i8.c b/libgfortran/generated/pow_r4_i8.c index 8c6b2ba285f8..0aae60a7d452 100644 --- a/libgfortran/generated/pow_r4_i8.c +++ b/libgfortran/generated/pow_r4_i8.c @@ -45,7 +45,8 @@ GFC_REAL_4 pow_r4_i8 (GFC_REAL_4 a, GFC_INTEGER_8 b) { GFC_REAL_4 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r4_i8 (GFC_REAL_4 a, GFC_INTEGER_8 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r8_i16.c b/libgfortran/generated/pow_r8_i16.c index 9fdcf7592e4e..e527f3a7a1e4 100644 --- a/libgfortran/generated/pow_r8_i16.c +++ b/libgfortran/generated/pow_r8_i16.c @@ -45,7 +45,8 @@ GFC_REAL_8 pow_r8_i16 (GFC_REAL_8 a, GFC_INTEGER_16 b) { GFC_REAL_8 pow, x; - GFC_INTEGER_16 n, u; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r8_i16 (GFC_REAL_8 a, GFC_INTEGER_16 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r8_i4.c b/libgfortran/generated/pow_r8_i4.c index a6afcbe6eb42..8da3b81fdff8 100644 --- a/libgfortran/generated/pow_r8_i4.c +++ b/libgfortran/generated/pow_r8_i4.c @@ -45,7 +45,8 @@ GFC_REAL_8 pow_r8_i4 (GFC_REAL_8 a, GFC_INTEGER_4 b) { GFC_REAL_8 pow, x; - GFC_INTEGER_4 n, u; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r8_i4 (GFC_REAL_8 a, GFC_INTEGER_4 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/generated/pow_r8_i8.c b/libgfortran/generated/pow_r8_i8.c index 3b650f2f0735..b858fab3a29e 100644 --- a/libgfortran/generated/pow_r8_i8.c +++ b/libgfortran/generated/pow_r8_i8.c @@ -45,7 +45,8 @@ GFC_REAL_8 pow_r8_i8 (GFC_REAL_8 a, GFC_INTEGER_8 b) { GFC_REAL_8 pow, x; - GFC_INTEGER_8 n, u; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; n = b; x = a; @@ -55,10 +56,13 @@ pow_r8_i8 (GFC_REAL_8 a, GFC_INTEGER_8 b) if (n < 0) { - n = -n; + u = -n; x = pow / x; } - u = n; + else + { + u = n; + } for (;;) { if (u & 1) diff --git a/libgfortran/m4/pow.m4 b/libgfortran/m4/pow.m4 index ae490040c652..54e2fda03c23 100644 --- a/libgfortran/m4/pow.m4 +++ b/libgfortran/m4/pow.m4 @@ -46,7 +46,8 @@ rtype_name `pow_'rtype_code`_'atype_code (rtype_name a, atype_name b) { rtype_name pow, x; - atype_name n, u; + atype_name n; + `GFC_UINTEGER_'atype_kind` u;' n = b; x = a; @@ -62,11 +63,14 @@ ifelse(rtype_letter,i,`dnl return (n & 1) ? -1 : 1; return (x == 0) ? 1 / x : 0; ',` - n = -n; + u = -n; x = pow / x; ')dnl } - u = n; + else + { + u = n; + } for (;;) { if (u & 1)