about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rw-r--r--iconvdata/iso-2022-cn-ext.c40
-rw-r--r--math/test-tgmath.c16
-rw-r--r--math/tgmath.h20
4 files changed, 63 insertions, 28 deletions
diff --git a/ChangeLog b/ChangeLog
index 3a19eefd03..6638b34edd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2001-05-14  Bruno Haible  <haible@clisp.cons.org>
+
+	* iconvdata/iso-2022-cn-ext.c (BODY for FROM_LOOP): If SO is seen
+	without previous announcement, reject it regularly, don't abort.
+
+2001-05-16  Ulrich Drepper  <drepper@redhat.com>
+
+	* math/tgmath.h: Fix handling of int parameters to binary and
+	ternary functions.  Reported by mitr@volny.cz.
+
+	* math/test-tgmath.c: Add tests for calls with integer parameters.
+
 2001-05-15  Jakub Jelinek  <jakub@redhat.com>
 
 	* sunrpc/rpc_thread.c (rpc_default): Remove.
@@ -13,8 +25,7 @@
 
 2001-05-16  Bruce Mitchener  <bruce@cubik.org>
 
-	* manual/llio.texi:  Many grammar and typo fixes to the section
-	on AIO.
+	* manual/llio.texi: Many grammar and typo fixes to the section on AIO.
 
 2001-05-15  Andreas Jaeger  <aj@suse.de>
 
diff --git a/iconvdata/iso-2022-cn-ext.c b/iconvdata/iso-2022-cn-ext.c
index d6ab2e8bbe..ab8a988550 100644
--- a/iconvdata/iso-2022-cn-ext.c
+++ b/iconvdata/iso-2022-cn-ext.c
@@ -260,21 +260,33 @@ enum
 	   XXX For now I'll default to use GB2312.  If this is not the	      \
 	   best behavior (e.g., we should flag an error) let me know.  */     \
 	++inptr;							      \
-	switch (ann & SO_ann)						      \
+	if ((ann & SO_ann) != 0)					      \
+	  switch (ann & SO_ann)						      \
+	    {								      \
+	    case GB2312_ann:						      \
+	      set = GB2312_set;						      \
+	      break;							      \
+	    case GB12345_ann:						      \
+	      set = GB12345_set;					      \
+	      break;							      \
+	    case CNS11643_1_ann:					      \
+	      set = CNS11643_1_set;					      \
+	      break;							      \
+	    case ISO_IR_165_ann:					      \
+	      set = ISO_IR_165_set;					      \
+	      break;							      \
+	    default:							      \
+	      abort ();							      \
+	    }								      \
+	else								      \
 	  {								      \
-	  case GB2312_ann:						      \
-	    set = GB2312_set;						      \
-	    break;							      \
-	  case GB12345_ann:						      \
-	    set = GB12345_set;						      \
-	    break;							      \
-	  case CNS11643_1_ann:						      \
-	    set = CNS11643_1_set;					      \
-	    break;							      \
-	  default:							      \
-	    assert ((ann & SO_ann) == ISO_IR_165_ann);			      \
-	    set = ISO_IR_165_set;					      \
-	    break;							      \
+	    if (! ignore_errors_p ())					      \
+	      {								      \
+		result = __GCONV_ILLEGAL_INPUT;				      \
+		break;							      \
+	      }								      \
+	    ++inptr;							      \
+	    ++*irreversible;						      \
 	  }								      \
 	continue;							      \
       }									      \
diff --git a/math/test-tgmath.c b/math/test-tgmath.c
index ad63f71737..b6004e573a 100644
--- a/math/test-tgmath.c
+++ b/math/test-tgmath.c
@@ -40,7 +40,8 @@ int count_double;
 int count_float;
 int count_ldouble;
 
-#define NCALLS 115
+#define NCALLS     115
+#define NCALLS_INT 4
 
 int
 main (void)
@@ -59,13 +60,13 @@ main (void)
       puts ("long double function called for double test");
       result = 1;
     }
-  if (count_double < NCALLS)
+  if (count_double < NCALLS + NCALLS_INT)
     {
       printf ("double functions not called often enough (%d)\n",
 	      count_double);
       result = 1;
     }
-  else if (count_double > NCALLS)
+  else if (count_double > NCALLS + NCALLS_INT)
     {
       printf ("double functions called too often (%d)\n",
 	      count_double);
@@ -131,6 +132,7 @@ main (void)
 
 #define F(name) name
 #define TYPE double
+#define TEST_INT 1
 #define x dx
 #define count count_double
 #include "test-tgmath.c"
@@ -217,6 +219,13 @@ F(compile_test) (void)
   b = fmax (fmax (a, x), fmax (c, b));
   a = fmin (fmin (x, a), fmin (c, b));
   b = fma (sin (a), sin (x), sin (c));
+
+#ifdef TEST_INT
+  a = atan2 (i, b);
+  b = remquo (i, a, &i);
+  c = fma (i, b, i);
+  a = pow (i, c);
+#endif
 }
 #undef x
 
@@ -663,4 +672,5 @@ TYPE
 #undef F
 #undef TYPE
 #undef count
+#undef TEST_INT
 #endif
diff --git a/math/tgmath.h b/math/tgmath.h
index 0c02aaa6e7..1c085654c3 100644
--- a/math/tgmath.h
+++ b/math/tgmath.h
@@ -93,8 +93,8 @@
 			 __tgmres = __tgml(Fct) (Val1, Val2);		      \
 		       else if (sizeof (Val1) == sizeof (double)	      \
 				|| sizeof (Val2) == sizeof (double)	      \
-				|| __builtin_classify_type ((Val1)	      \
-							    + (Val2)) != 8)   \
+				|| __builtin_classify_type (Val1) != 8	      \
+				|| __builtin_classify_type (Val2) != 8)	      \
 			 __tgmres = Fct (Val1, Val2);			      \
 		       else						      \
 			 __tgmres = Fct##f (Val1, Val2);		      \
@@ -108,8 +108,8 @@
 			 __tgmres = __tgml(Fct) (Val1, Val2, Val3);	      \
 		       else if (sizeof (Val1) == sizeof (double)	      \
 				|| sizeof (Val2) == sizeof (double)	      \
-				|| __builtin_classify_type ((Val1)	      \
-							    + (Val2)) != 8)   \
+				|| __builtin_classify_type (Val1) != 8	      \
+				|| __builtin_classify_type (Val2) != 8)	      \
 			 __tgmres = Fct (Val1, Val2, Val3);		      \
 		       else						      \
 			 __tgmres = Fct##f (Val1, Val2, Val3);		      \
@@ -126,8 +126,9 @@
 		       else if (sizeof (Val1) == sizeof (double)	      \
 				|| sizeof (Val2) == sizeof (double)	      \
 				|| sizeof (Val3) == sizeof (double)	      \
-				|| __builtin_classify_type ((Val1) + (Val2)   \
-							    + (Val3)) != 8)   \
+				|| __builtin_classify_type (Val1) != 8	      \
+				|| __builtin_classify_type (Val2) != 8	      \
+				|| __builtin_classify_type (Val3) != 8)	      \
 			 __tgmres = Fct (Val1, Val2, Val3);		      \
 		       else						      \
 			 __tgmres = Fct##f (Val1, Val2, Val3);		      \
@@ -194,9 +195,10 @@
 			 }						      \
 		       else if (sizeof (__real__ (Val1)) == sizeof (double)   \
 				|| sizeof (__real__ (Val2)) == sizeof(double) \
-				|| __builtin_classify_type (__real__ (Val1)   \
-							    + __real__ (Val2))\
-				   != 8)				      \
+				|| (__builtin_classify_type (__real__ (Val1)) \
+				    != 8)				      \
+				|| (__builtin_classify_type (__real__ (Val2)) \
+				    != 8))				      \
 			 {						      \
 			   if (sizeof (__real__ (Val1)) == sizeof (Val1)      \
 			       && sizeof (__real__ (Val2)) == sizeof (Val2))  \