]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/30981 ([4.1 only] a ** exp fails for integer exponents if exp is "...
authorThomas Koenig <Thomas.Koenig@online.de>
Sun, 4 Mar 2007 08:03:34 +0000 (08:03 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 4 Mar 2007 08:03:34 +0000 (08:03 +0000)
2007-03-04  Thomas Koenig  <Thomas.Koenig@online.de>

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  <Thomas.Koenig@online.de>

PR libfortran/30981
* gfortran.dg/integer_exponentiation_1.f90:  New test.

From-SVN: r122522

37 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/integer_exponentiation_1.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/generated/pow_c10_i16.c
libgfortran/generated/pow_c10_i4.c
libgfortran/generated/pow_c10_i8.c
libgfortran/generated/pow_c16_i16.c
libgfortran/generated/pow_c16_i4.c
libgfortran/generated/pow_c16_i8.c
libgfortran/generated/pow_c4_i16.c
libgfortran/generated/pow_c4_i4.c
libgfortran/generated/pow_c4_i8.c
libgfortran/generated/pow_c8_i16.c
libgfortran/generated/pow_c8_i4.c
libgfortran/generated/pow_c8_i8.c
libgfortran/generated/pow_i16_i16.c
libgfortran/generated/pow_i16_i4.c
libgfortran/generated/pow_i16_i8.c
libgfortran/generated/pow_i4_i16.c
libgfortran/generated/pow_i4_i4.c
libgfortran/generated/pow_i4_i8.c
libgfortran/generated/pow_i8_i16.c
libgfortran/generated/pow_i8_i4.c
libgfortran/generated/pow_i8_i8.c
libgfortran/generated/pow_r10_i16.c
libgfortran/generated/pow_r10_i4.c
libgfortran/generated/pow_r10_i8.c
libgfortran/generated/pow_r16_i16.c
libgfortran/generated/pow_r16_i4.c
libgfortran/generated/pow_r16_i8.c
libgfortran/generated/pow_r4_i16.c
libgfortran/generated/pow_r4_i4.c
libgfortran/generated/pow_r4_i8.c
libgfortran/generated/pow_r8_i16.c
libgfortran/generated/pow_r8_i4.c
libgfortran/generated/pow_r8_i8.c
libgfortran/m4/pow.m4

index 097016dec5b9454edecb4a9ec367c6e02eba9f99..309ea4ac6e9d22ce26543f6679a5eac641a3fe31 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-04  Thomas Koenig  <Thomas.Koenig@online.de>
+
+       PR libfortran/30981
+       * gfortran.dg/integer_exponentiation_1.f90:  New test.
+
 2007-03-04  Nathan Sidwell  <nathan@codesourcery.com>
 
        * 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 (file)
index 0000000..57d7466
--- /dev/null
@@ -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
index cfa42b23db412b908c183bfa2ca8005906dfbad5..ad71a7e6b2052bde1b6c21dfb8e67f245ec7f266 100644 (file)
@@ -1,3 +1,41 @@
+2007-03-04  Thomas Koenig  <Thomas.Koenig@online.de>
+
+       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  <coudert@clipper.ens.fr>
 
        PR libfortran/31001
index 6332013bdbc59ff77d39e989371931248157f6be..c62d5f47c225ead8392c9656a727e0ec6bad2a9f 100644 (file)
@@ -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)
index ccb1a0c6a2bdf46ceed39ef570f865ef3efcf0c3..aca3e7f1ad78139fffe38831ffb12db315e48482 100644 (file)
@@ -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)
index 0f2b242648112dc5bd0033b5aa701808415e46f2..a4a94526db47fda408f253823722becc84448363 100644 (file)
@@ -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)
index a6d888369b2b8f8cca7b6c7b93d5011f71e54c21..d05580f71d6890cc59daee766dbcbe10d9e0c840 100644 (file)
@@ -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)
index d3960520cf99b2751f6abc842d686e22a876293a..b0576c5ad44fe5fc3898aa93178fbe71dd677d4a 100644 (file)
@@ -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)
index 0a0e94d061313802ec6a99b41dd9a6e769c70fbb..3d991606a401dcc1185a63bf09ea90f0418c6cfb 100644 (file)
@@ -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)
index 1085ad21caf9cc9c93e9298dc44545fb9a455dcd..84309ff63bd2f975e2e9d4c7f4a950a8a211f62f 100644 (file)
@@ -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)
index ca376710fba8555076b1cbd2c7d5bcef7837510d..35597d0df1678de18ce97b278482e90bd83cce30 100644 (file)
@@ -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)
index f9fc849ca19d05287aa7f4b819b53b7d70a82245..bb113df2b47de09d9a179dd75f694842eeea73ae 100644 (file)
@@ -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)
index 0fc162b5014b99df66cae80d18aab6df8813e221..ee4b68e955f11171b5049b1fc9186bbb80bca927 100644 (file)
@@ -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)
index 64b4b3c5b698dbe4c47d88e46981fe9a71787d3a..30c6007879f0811de33ce6dc0796e0a6921d5ba6 100644 (file)
@@ -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)
index 39a5d6b71e0ba8608387499a0ffefcfb5b5c8917..d9b658b4fc4f85dca79d0a808ed403a7d245f45c 100644 (file)
@@ -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)
index eda2fb6dc7c87119778891f20f48272afc73fcd7..b665f5ea2b9ae89f990bdfc774b48b3e506e64e1 100644 (file)
@@ -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)
index 6e4d65c35c4306b294b6b2b1893c6c5bab0efe88..45994a3598e2cd6366318b3cadbf133d37e58b31 100644 (file)
@@ -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)
index d1849511a2971a393d4b731bb1d23e73ef014591..80075051553c489f2c8f0e7c89d2ec2eb218a28d 100644 (file)
@@ -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)
index f515f80359eaaaf3af477bf180caab9dafb7c895..abab476830c885687444066ed323657590780951 100644 (file)
@@ -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)
index 184fe6d986e2e41c96fc864c400e0e316e2851f8..e28cf90b116ac4a3cee1243f32dc3305f7b4eec8 100644 (file)
@@ -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)
index ae24ceb54c2b8de6ed712df2ab8013f6bfb3ca7b..51d2e14a8080efdb8302f56cad35ca17eff7474d 100644 (file)
@@ -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)
index 456c28a95bdfb581eafa620d05bb5499b8173955..88713da698e83b254bf5af807533ce70b0bc10f1 100644 (file)
@@ -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)
index 8f85a80c81cbbf6ad84fe2a2b0652c8a048f9d2c..6746af33d5ba796e5323a4975bbc3de1de8ec905 100644 (file)
@@ -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)
index 8c8f52e541219bc28ce7979a947553399d7e83da..3050974036cd6c2995d808b45b5996e323623847 100644 (file)
@@ -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)
index ad736641adc9694bf653fae859b859b8aa7aee97..2377e67ca510fa816608fd679c4cdfbd61ab0452 100644 (file)
@@ -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)
index 3f2373243b446a5c5a4f530c664ced53e3a8d5cd..d21869b5d2c730371a5550c2e405575dcd75e597 100644 (file)
@@ -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)
index 2e99c600bea822861794338f71aadf03d703c5dd..5a5ecffdb4492821d02511b7d2b97e6b58fed922 100644 (file)
@@ -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)
index 63d6fa886f215a7c0163f340231ce18e5e5c6545..24313c2df2a2b48cf45d8f7af0c9534d27f848e5 100644 (file)
@@ -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)
index 949f23717491804c8a09d6511554a68759922996..3901577ecc72a8c67c6ffb130e23e8ea75637d0d 100644 (file)
@@ -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)
index 37649d82cb18988cb4ec4fb96ecf79eeb42e9313..e7233729b4884dbd28658db1717f965f848a6a95 100644 (file)
@@ -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)
index 635e627e9d64892de6bca1c3a6e6be2b0a05c4b1..e73794952d7b306f045989aad631846cec277dbf 100644 (file)
@@ -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)
index ff0045f913ba66bd378db4cd82befd98b47cdb42..5baa4b17f681ee3ea3b1267b0ac13a0b735ac8d9 100644 (file)
@@ -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)
index 8c6b2ba285f8b3b0df5b3fec3ffb6cd0245f2658..0aae60a7d45236c89804696e1b02590775509691 100644 (file)
@@ -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)
index 9fdcf7592e4e6bef507191a04e58aa2c9bfd6c0b..e527f3a7a1e45ee7de4b6dcd9aaf9fceff86fcaa 100644 (file)
@@ -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)
index a6afcbe6eb42f0a08dc1404dfa857ab8c88410a9..8da3b81fdff85e1e7defc2a091e27babefedd7d8 100644 (file)
@@ -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)
index 3b650f2f0735f22ac49a4e451e59fc0a2af3d1e5..b858fab3a29e877ee1a9b74ac4deb3e2947c619a 100644 (file)
@@ -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)
index ae490040c652ca0571de65f03282b46ea974b41d..54e2fda03c2373fbb56e32b84c24c1d93e50e31e 100644 (file)
@@ -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)