This is the mail archive of the
libc-alpha@sourceware.cygnus.com
mailing list for the glibc project.
Re: (C++) patch: C library fns don't throw
- To: Jason Merrill <jason at cygnus dot com>
- Subject: Re: (C++) patch: C library fns don't throw
- From: Andreas Jaeger <aj at suse dot de>
- Date: 10 Mar 2000 13:37:49 +0100
- Cc: libc-alpha Mailinglist <libc-alpha at sourceware dot cygnus dot com>
- References: <200003101151.DAA20517@casey.cygnus.com>
>>>>> Jason Merrill writes on gcc-patches:
> The standard tells us that functions inherited from the C library
> don't throw, except possibly for bsearch and qsort. Since there are
> 209 such functions, I decided to use gperf to check for a match.
> 2000-03-10 Jason Merrill <jason@casey.cygnus.com>
> C library functions don't throw.
> * Makefile.in (cfns.h): New target.
> (except.o): Depend on it.
> * Make-lang.in (cc1plus): Depend on cfns.gperf.
> * cfns.gperf: New file.
> * cfns.h: Generated.
> * except.c: Include it.
> (nothrow_libfn_p): New fn.
> * decl.c (grokfndecl): Use it.
> * cp-tree.h: Declare it.
Jason, in the development version of glibc 2.2 we currently use for
example:
(from <stdio.h>:
extern FILE *tmpfile (void) __THROW;
and have in <sys/cdefs.h> the following:
/* GCC can always grok prototypes. For C++ programs we add throw()
to help it optimize the function calls. But this works only with
gcc 2.8.x and egcs. */
# if defined __cplusplus && __GNUC_PREREQ (2,8)
# define __THROW throw ()
# else
# define __THROW
# endif
With your changes, the __THROW seems to be not needed anymore for the
209 functions and we could remove them in theory. Unfortunatly, glibc
has more than these functions, so we would need to check for each
function if it's one of those 209.
I do think for glibc we shouldn't change anything and I hope g++ uses
the throw () which is added for all functions. Does anybody see
another solution?
Andreas
P.S. I'm mailing this to libc-alpha and not to gcc-patches since this
is AFAIU a glibc issue.
--
Andreas Jaeger
SuSE Labs aj@suse.de
private aj@arthur.rhein-neckar.de