public inbox for libc-hacker@sourceware.org
 help / color / mirror / Atom feed
* ilogb in tgmath broken
@ 2003-06-15 16:36 Andreas Jaeger
  2003-06-16  7:53 ` Ulrich Drepper
  0 siblings, 1 reply; 2+ messages in thread
From: Andreas Jaeger @ 2003-06-15 16:36 UTC (permalink / raw)
  To: GNU libc hacker

[-- Attachment #1: Type: text/plain, Size: 4855 bytes --]


Dinkumware pointed out that ilogb is broken:
http://www.dinkumware.com/conform_c.html#glibc230_results

I'm appending a patch and a testcase.

Ok to commit?

Andreas

2003-06-15  Andreas Jaeger  <aj@suse.de>

	* math/Makefile (CFLAGS-test-tgmath-ret.c): New.
	(tests): Add test-tgmath-ret.
	* math/test-tgmath-ret.c: New file.

	* math/tgmath.h (ilogb): Return always an int.

============================================================
Index: math/tgmath.h
--- math/tgmath.h	3 Mar 2003 19:39:31 -0000	1.20
+++ math/tgmath.h	15 Jun 2003 16:18:49 -0000
@@ -400,7 +400,7 @@
      __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbln)
 
 /* Return the binary exponent of X, which must be nonzero.  */
-#define ilogb(Val) __TGMATH_UNARY_REAL_ONLY (Val, ilogb)
+#define ilogb(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, int, ilogb)
 
 
 /* Return positive difference between X and Y.  */
============================================================
Index: math/Makefile
--- math/Makefile	21 Feb 2003 05:37:51 -0000	1.120
+++ math/Makefile	15 Jun 2003 16:18:49 -0000
@@ -87,7 +87,7 @@ distribute += $(filter-out $(generated),
 
 # Rules for the test suite.
 tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
-	test-misc test-fpucw tst-definitions test-tgmath
+	test-misc test-fpucw tst-definitions test-tgmath test-tgmath-ret
 # We do the `long double' tests only if this data type is available and
 # distinct from `double'.
 test-longdouble-yes = test-ldouble test-ildoubl
@@ -126,6 +126,7 @@ CFLAGS-test-float.c = -fno-inline -ffloa
 CFLAGS-test-double.c = -fno-inline -ffloat-store
 CFLAGS-test-ldouble.c = -fno-inline -ffloat-store
 CFLAGS-test-tgmath.c = -fno-builtin
+CFLAGS-test-tgmath-ret.c = -fno-builtin
 CPPFLAGS-test-ifloat.c = -U__LIBC_INTERNAL_MATH_INLINES -D__FAST_MATH__ \
 			 -DTEST_FAST_MATH
 CPPFLAGS-test-idouble.c = -U__LIBC_INTERNAL_MATH_INLINES -D__FAST_MATH__ \
============================================================
Index: math/test-tgmath-ret.c
--- math/test-tgmath-ret.c	created
+++ math/test-tgmath-ret.c	2003-06-15 17:47:36.000000000 +0200	1.1
@@ -0,0 +1,82 @@
+/* Test compilation of tgmath macros.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Andreas Jaeger <aj@suse.de>, 2003.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <math.h>
+#include <complex.h>
+#include <tgmath.h>
+#include <stdio.h>
+
+float fx;
+double dx;
+long double lx;
+int errors = 0;
+
+void
+our_error (const char *c)
+{
+  puts (c);
+  ++errors;
+}
+
+/* First function where the return type is constant.  */
+
+#define CHECK_RET_CONST_TYPE(func, rettype, arg, name)				\
+  if (sizeof (func (arg)) != sizeof (rettype))					\
+    our_error ("Return size of " #func " is wrong with " #name " argument");
+
+#define CHECK_RET_CONST_FLOAT(func, rettype) \
+  CHECK_RET_CONST_TYPE (func, rettype, fx, float)
+#define CHECK_RET_CONST_DOUBLE(func, rettype) \
+  CHECK_RET_CONST_TYPE (func, rettype, dx, double)
+#ifdef NO_LONG_DOUBLE
+# define CHECK_RET_CONST_LDOUBLE(func, rettype)
+#else
+# define CHECK_RET_CONST_LDOUBLE(func, rettype) \
+  CHECK_RET_CONST_TYPE (func, rettype, lx, long double)
+#endif
+
+#define CHECK_RET_CONST(func, rettype)		\
+void						\
+check_return_ ##func (void)			\
+{						\
+  CHECK_RET_CONST_FLOAT (func, rettype)		\
+  CHECK_RET_CONST_DOUBLE (func, rettype)	\
+  CHECK_RET_CONST_LDOUBLE (func, rettype)	\
+}
+
+CHECK_RET_CONST(ilogb, int)
+CHECK_RET_CONST(lrint, long)
+CHECK_RET_CONST(lround, long)
+CHECK_RET_CONST(llrint, long long)
+CHECK_RET_CONST(llround, long long)
+
+int
+main (void)
+{
+  check_return_ilogb ();
+  check_return_lrint ();
+  check_return_lround ();
+  check_return_llrint ();
+  check_return_llround ();
+
+  printf ("%Zd\n", sizeof(carg (lx)));
+
+  return errors != 0;
+}

-- 
 Andreas Jaeger, SuSE Linux AG, aj@suse.de, http://www.suse.de/~aj
  GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: ilogb in tgmath broken
  2003-06-15 16:36 ilogb in tgmath broken Andreas Jaeger
@ 2003-06-16  7:53 ` Ulrich Drepper
  0 siblings, 0 replies; 2+ messages in thread
From: Ulrich Drepper @ 2003-06-16  7:53 UTC (permalink / raw)
  To: Andreas Jaeger; +Cc: GNU libc hacker

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Andreas Jaeger wrote:

> 2003-06-15  Andreas Jaeger  <aj@suse.de>
> 
> 	* math/Makefile (CFLAGS-test-tgmath-ret.c): New.
> 	(tests): Add test-tgmath-ret.
> 	* math/test-tgmath-ret.c: New file.
> 
> 	* math/tgmath.h (ilogb): Return always an int.

I've committed the patch.  Thanks,

- -- 
- --------------.                        ,-.            444 Castro Street
Ulrich Drepper \    ,-----------------'   \ Mountain View, CA 94041 USA
Red Hat         `--' drepper at redhat.com `---------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+7Xca2ijCOnn/RHQRAszIAJ9DZS9nq0y+7P3uDRRWjsqvYvZrNgCeJSJE
tT8PEp0Vd152REbSrvTQMJs=
=92sz
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-06-16  7:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-15 16:36 ilogb in tgmath broken Andreas Jaeger
2003-06-16  7:53 ` Ulrich Drepper

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).