This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[4.2 backport, libfortran] Fix PR 30981


Hello Mark,

this backport fixes a rather nasty bug in libgfortran, where
innocent-looking code used to cause an endless loop on execution.
It is self-contained, and should therefore be reasonably safe
for backporting.

>From the Fortran maintainer's point of view, this is OK to backport.
Is this OK for 4.2 for you at this stage?

	Thomas

2007-03-06  Thomas Koenig  <Thomas.Koenig@online.de>

	PR libfortran/30981
	Backport from trunk.
	* 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-06  Thomas Koenig  <Thomas.Koenig@online.de>

	PR libfortran/30981
	Backport from trunk.
	* gfortran.dg/integer_exponentiation_1.f90:  New test.
Index: pow.m4
===================================================================
--- pow.m4	(revision 122410)
+++ pow.m4	(working copy)
@@ -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)

Attachment: integer_exponentiation_1.f90
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]