aboutsummaryrefslogtreecommitdiff
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 3a19eef..6638b34 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 d6ab2e8..ab8a988 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 ad63f71..b6004e5 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 0c02aaa..1c08565 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)) \