diff mbox

[C++] Extend the list of implicit noexcept C library symbols for -std=c++11 and -std=c++17 (PR middle-end/78901)

Message ID 20161223160900.GI21933@tucnak
State New
Headers show

Commit Message

Jakub Jelinek Dec. 23, 2016, 4:09 p.m. UTC
On Fri, Dec 23, 2016 at 10:09:05AM -0500, Jason Merrill wrote:
> On Fri, Dec 23, 2016 at 3:48 AM, Jakub Jelinek <jakub@redhat.com> wrote:
> > Hi!
> >
> > C++ says that C library functions are implicitly noexcept, except for those
> > like qsort and bsearch where exceptions can be thrown from the callbacks.
> >
> > We handle this through cfns.gperf, but that contains only list of C89
> > functions, while C++11 and C++14 refer to C99 and C++17 refers to C11.
> >
> > I went through the C99 and C11 standards, gathered all functions from there
> > (not macros nor generic functions) and using gperf %struct-type feature
> > attached the C version next to each symbol, so that e.g. snprintf is
> > noexcept only with -std=c++11 and above and e.g. mbrtoc16 only with
> > -std=c++17.  Without this, we still consider snprintf as potentially
> > throwing, which breaks gimple-ssa-sprintf.c assumptions.  For -std=c++98
> > snprintf is not considered a builtin.
> 
> Let's only be strict about this if flag_iso is set; for C library
> usage it shouldn't usually matter what C++ standard we're using.

So like this?

2016-12-23  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/78901
	* except.c (nothrow_libfn_p): Expect libc_name_p to return
	const struct libc_name_struct *, if it returns NULL, return 0,
	otherwise check c_ver and use flag_isoc99 or flag_isoc11.
	* cfns.gperf: Add %struct-type and libc_name_struct definition.
	For all C89 C library functions add , 89 after the name, add
	C99 C library functions with , 99 and C11 C library functions
	with , 11 suffix.
	* cfns.h: Regenerated.



	Jakub

Comments

Jason Merrill Dec. 24, 2016, 12:52 a.m. UTC | #1
On Fri, Dec 23, 2016 at 11:09 AM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Fri, Dec 23, 2016 at 10:09:05AM -0500, Jason Merrill wrote:
>> On Fri, Dec 23, 2016 at 3:48 AM, Jakub Jelinek <jakub@redhat.com> wrote:
>> > Hi!
>> >
>> > C++ says that C library functions are implicitly noexcept, except for those
>> > like qsort and bsearch where exceptions can be thrown from the callbacks.
>> >
>> > We handle this through cfns.gperf, but that contains only list of C89
>> > functions, while C++11 and C++14 refer to C99 and C++17 refers to C11.
>> >
>> > I went through the C99 and C11 standards, gathered all functions from there
>> > (not macros nor generic functions) and using gperf %struct-type feature
>> > attached the C version next to each symbol, so that e.g. snprintf is
>> > noexcept only with -std=c++11 and above and e.g. mbrtoc16 only with
>> > -std=c++17.  Without this, we still consider snprintf as potentially
>> > throwing, which breaks gimple-ssa-sprintf.c assumptions.  For -std=c++98
>> > snprintf is not considered a builtin.
>>
>> Let's only be strict about this if flag_iso is set; for C library
>> usage it shouldn't usually matter what C++ standard we're using.
>
> So like this?

Yes, OK.

Jason
diff mbox

Patch

--- gcc/cp/except.c.jj	2016-10-31 13:28:11.000000000 +0100
+++ gcc/cp/except.c	2016-12-23 01:29:52.390997316 +0100
@@ -892,8 +892,17 @@  nothrow_libfn_p (const_tree fn)
      unless the system headers are playing rename tricks, and if
      they are, we don't want to be confused by them.  */
   id = DECL_NAME (fn);
-  return !!libc_name::libc_name_p (IDENTIFIER_POINTER (id),
-				   IDENTIFIER_LENGTH (id));
+  const struct libc_name_struct *s
+    = libc_name::libc_name_p (IDENTIFIER_POINTER (id), IDENTIFIER_LENGTH (id));
+  if (s == NULL)
+    return 0;
+  switch (s->c_ver)
+    {
+    case 89: return 1;
+    case 99: return !flag_iso || flag_isoc99;
+    case 11: return !flag_iso || flag_isoc11;
+    default: gcc_unreachable ();
+    }
 }
 
 /* Returns nonzero if an exception of type FROM will be caught by a
--- gcc/cp/cfns.gperf.jj	2016-02-19 23:16:32.000000000 +0100
+++ gcc/cp/cfns.gperf	2016-12-23 01:18:23.377729732 +0100
@@ -1,5 +1,6 @@ 
 %language=C++
 %define class-name libc_name
+%struct-type
 %{
 /* Copyright (C) 2000-2016 Free Software Foundation, Inc.
 
@@ -19,6 +20,7 @@  You should have received a copy of the G
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 %}
+struct libc_name_struct { const char *name; int c_ver; };
 %%
 # The standard C library functions, for feeding to gperf; the result is used
 # by nothrow_libfn_p.
@@ -30,212 +32,505 @@  along with GCC; see the file COPYING3.
 #
 # Specific functions are commented out for the reason noted in each case.
 #
-# abort			-- synchronous exception from SIGABRT handler
-abs
-acos
-asctime
-asin
-atan
-atan2
-atexit
-atof
-atoi
-atol
-#bsearch		-- calls user function which may throw exception
-btowc
-calloc
-ceil
-clearerr
-clock
-cos
-cosh
-ctime
-difftime
-div
-exit
-exp
-fabs
-#fclose			-- POSIX thread cancellation point
-feof
-ferror
-#fflush			-- POSIX thread cancellation point
-#fgetc			-- POSIX thread cancellation point
-#fgetpos		-- POSIX thread cancellation point
-#fgets			-- POSIX thread cancellation point
-#fgetwc			-- POSIX thread cancellation point
-#fgetws			-- POSIX thread cancellation point
-floor
-fmod
-#fopen			-- POSIX thread cancellation point
-#fprintf		-- POSIX thread cancellation point
-#fputc			-- POSIX thread cancellation point
-#fputs			-- POSIX thread cancellation point
-#fputwc			-- POSIX thread cancellation point
-#fputws			-- POSIX thread cancellation point
-#fread			-- POSIX thread cancellation point
-free
-#freopen		-- POSIX thread cancellation point
-frexp
-#fscanf			-- POSIX thread cancellation point
-fseek
-#fsetpos		-- POSIX thread cancellation point
-#ftell			-- POSIX thread cancellation point
-fwide
-#fwprintf		-- POSIX thread cancellation point
-#fwrite			-- POSIX thread cancellation point
-#fwscanf		-- POSIX thread cancellation point
-#getc			-- POSIX thread cancellation point
-#getchar		-- POSIX thread cancellation point
-getenv
-#gets			-- POSIX thread cancellation point
-#getwc			-- POSIX thread cancellation point
-#getwchar		-- POSIX thread cancellation point
-gmtime
-isalnum
-isalpha
-iscntrl
-isdigit
-isgraph
-islower
-isprint
-ispunct
-isspace
-isupper
-iswalnum
-iswalpha
-iswcntrl
-iswctype
-iswdigit
-iswgraph
-iswlower
-iswprint
-iswpunct
-iswspace
-iswupper
-iswxdigit
-isxdigit
-labs
-ldexp
-ldiv
-localeconv
-localtime
-log
-log10
-longjmp
-malloc
-mblen
-mbrlen
-mbrtowc
-mbsinit
-mbsrtowcs
-mbstowcs
-mbtowc
-memchr
-memcmp
-memcpy
-memmove
-memset
-mktime
-modf
-#perror			-- POSIX thread cancellation point
-pow
-#printf			-- POSIX thread cancellation point
-#putc			-- POSIX thread cancellation point
-#putchar		-- POSIX thread cancellation point
-#puts			-- POSIX thread cancellation point
-#putwc			-- POSIX thread cancellation point
-#putwchar		-- POSIX thread cancellation point
-#qsort			-- calls user function which may throw exception
-#raise			-- synchronous exception from signal handler
-rand
-realloc
-#remove			-- POSIX thread cancellation point
-#rename			-- POSIX thread cancellation point
-#rewind			-- POSIX thread cancellation point
-#scanf			-- POSIX thread cancellation point
-setbuf
-setlocale
-setvbuf
-signal
-sin
-sinh
-sprintf
-sqrt
-srand
-sscanf
-strcat
-strchr
-strcmp
-strcoll
-strcpy
-strcspn
-#strerror		-- POSIX thread cancellation point
-strftime
-strlen
-strncat
-strncmp
-strncpy
-strpbrk
-strrchr
-strspn
-strstr
-strtod
-strtok
-strtol
-strtoul
-strxfrm
-swprintf
-swscanf
-#system			-- POSIX thread cancellation point
-tan
-tanh
-time
-#tmpfile		-- POSIX thread cancellation point
-#tmpnam			-- POSIX thread cancellation point
-tolower
-toupper
-towctrans
-towlower
-towupper
-#ungetc			-- POSIX thread cancellation point
-#ungetwc		-- POSIX thread cancellation point
-#vfprintf		-- POSIX thread cancellation point
-#vfwprintf		-- POSIX thread cancellation point
-#vprintf		-- POSIX thread cancellation point
-vsprintf
-vswprintf
-#vwprintf		-- POSIX thread cancellation point
-wcrtomb
-wcscat
-wcschr
-wcscmp
-wcscoll
-wcscpy
-wcscspn
-wcsftime
-wcslen
-wcsncat
-wcsncmp
-wcsncpy
-wcspbrk
-wcsrchr
-wcsrtombs
-wcsspn
-wcsstr
-wcstod
-wcstok
-wcstol
-wcstombs
-wcstoul
-wcsxfrm
-wctob
-wctomb
-wctrans
-wctype
-wmemchr
-wmemcmp
-wmemcpy
-wmemmove
-wmemset
-#wprintf		-- POSIX thread cancellation point
-#wscanf			-- POSIX thread cancellation point
+#abort, 89		-- synchronous exception from SIGABRT handler
+abs, 89
+acos, 89
+asctime, 89
+asin, 89
+atan, 89
+atan2, 89
+atexit, 89
+atof, 89
+atoi, 89
+atol, 89
+#bsearch, 89		-- calls user function which may throw exception
+btowc, 89
+calloc, 89
+ceil, 89
+clearerr, 89
+clock, 89
+cos, 89
+cosh, 89
+ctime, 89
+difftime, 89
+div, 89
+exit, 89
+exp, 89
+fabs, 89
+#fclose, 89		-- POSIX thread cancellation point
+feof, 89
+ferror, 89
+#fflush, 89		-- POSIX thread cancellation point
+#fgetc, 89		-- POSIX thread cancellation point
+#fgetpos, 89		-- POSIX thread cancellation point
+#fgets, 89		-- POSIX thread cancellation point
+#fgetwc, 89		-- POSIX thread cancellation point
+#fgetws, 89		-- POSIX thread cancellation point
+floor, 89
+fmod, 89
+#fopen, 89		-- POSIX thread cancellation point
+#fprintf, 89		-- POSIX thread cancellation point
+#fputc, 89		-- POSIX thread cancellation point
+#fputs, 89		-- POSIX thread cancellation point
+#fputwc, 89		-- POSIX thread cancellation point
+#fputws, 89		-- POSIX thread cancellation point
+#fread, 89		-- POSIX thread cancellation point
+free, 89
+#freopen, 89		-- POSIX thread cancellation point
+frexp, 89
+#fscanf, 89		-- POSIX thread cancellation point
+fseek, 89
+#fsetpos, 89		-- POSIX thread cancellation point
+#ftell, 89		-- POSIX thread cancellation point
+fwide, 89
+#fwprintf, 89		-- POSIX thread cancellation point
+#fwrite, 89		-- POSIX thread cancellation point
+#fwscanf, 89		-- POSIX thread cancellation point
+#getc, 89		-- POSIX thread cancellation point
+#getchar, 89		-- POSIX thread cancellation point
+getenv, 89
+#gets, 89		-- POSIX thread cancellation point
+#getwc, 89		-- POSIX thread cancellation point
+#getwchar, 89		-- POSIX thread cancellation point
+gmtime, 89
+isalnum, 89
+isalpha, 89
+iscntrl, 89
+isdigit, 89
+isgraph, 89
+islower, 89
+isprint, 89
+ispunct, 89
+isspace, 89
+isupper, 89
+iswalnum, 89
+iswalpha, 89
+iswcntrl, 89
+iswctype, 89
+iswdigit, 89
+iswgraph, 89
+iswlower, 89
+iswprint, 89
+iswpunct, 89
+iswspace, 89
+iswupper, 89
+iswxdigit, 89
+isxdigit, 89
+labs, 89
+ldexp, 89
+ldiv, 89
+localeconv, 89
+localtime, 89
+log, 89
+log10, 89
+longjmp, 89
+malloc, 89
+mblen, 89
+mbrlen, 89
+mbrtowc, 89
+mbsinit, 89
+mbsrtowcs, 89
+mbstowcs, 89
+mbtowc, 89
+memchr, 89
+memcmp, 89
+memcpy, 89
+memmove, 89
+memset, 89
+mktime, 89
+modf, 89
+#perror, 89		-- POSIX thread cancellation point
+pow, 89
+#printf, 89		-- POSIX thread cancellation point
+#putc, 89		-- POSIX thread cancellation point
+#putchar, 89		-- POSIX thread cancellation point
+#puts, 89		-- POSIX thread cancellation point
+#putwc, 89		-- POSIX thread cancellation point
+#putwchar, 89		-- POSIX thread cancellation point
+#qsort, 89		-- calls user function which may throw exception
+#raise, 89		-- synchronous exception from signal handler
+rand, 89
+realloc, 89
+#remove, 89		-- POSIX thread cancellation point
+#rename, 89		-- POSIX thread cancellation point
+#rewind, 89		-- POSIX thread cancellation point
+#scanf, 89		-- POSIX thread cancellation point
+setbuf, 89
+setlocale, 89
+setvbuf, 89
+signal, 89
+sin, 89
+sinh, 89
+sprintf, 89
+sqrt, 89
+srand, 89
+sscanf, 89
+strcat, 89
+strchr, 89
+strcmp, 89
+strcoll, 89
+strcpy, 89
+strcspn, 89
+#strerror, 89		-- POSIX thread cancellation point
+strftime, 89
+strlen, 89
+strncat, 89
+strncmp, 89
+strncpy, 89
+strpbrk, 89
+strrchr, 89
+strspn, 89
+strstr, 89
+strtod, 89
+strtok, 89
+strtol, 89
+strtoul, 89
+strxfrm, 89
+swprintf, 89
+swscanf, 89
+#system, 89		-- POSIX thread cancellation point
+tan, 89
+tanh, 89
+time, 89
+#tmpfile, 89		-- POSIX thread cancellation point
+#tmpnam, 89		-- POSIX thread cancellation point
+tolower, 89
+toupper, 89
+towctrans, 89
+towlower, 89
+towupper, 89
+#ungetc, 89		-- POSIX thread cancellation point
+#ungetwc, 89		-- POSIX thread cancellation point
+#vfprintf, 89		-- POSIX thread cancellation point
+#vfwprintf, 89		-- POSIX thread cancellation point
+#vprintf, 89		-- POSIX thread cancellation point
+vsprintf, 89
+vswprintf, 89
+#vwprintf, 89		-- POSIX thread cancellation point
+wcrtomb, 89
+wcscat, 89
+wcschr, 89
+wcscmp, 89
+wcscoll, 89
+wcscpy, 89
+wcscspn, 89
+wcsftime, 89
+wcslen, 89
+wcsncat, 89
+wcsncmp, 89
+wcsncpy, 89
+wcspbrk, 89
+wcsrchr, 89
+wcsrtombs, 89
+wcsspn, 89
+wcsstr, 89
+wcstod, 89
+wcstok, 89
+wcstol, 89
+wcstombs, 89
+wcstoul, 89
+wcsxfrm, 89
+wctob, 89
+wctomb, 89
+wctrans, 89
+wctype, 89
+wmemchr, 89
+wmemcmp, 89
+wmemcpy, 89
+wmemmove, 89
+wmemset, 89
+#wprintf, 89		-- POSIX thread cancellation point
+#wscanf, 89		-- POSIX thread cancellation point
+cacos, 99
+cacosf, 99
+cacosl, 99
+casin, 99
+casinf, 99
+casinl, 99
+catan, 99
+catanf, 99
+catanl, 99
+ccos, 99
+ccosf, 99
+ccosl, 99
+csin, 99
+csinf, 99
+csinl, 99
+ctan, 99
+ctanf, 99
+ctanl, 99
+cacosh, 99
+cacoshf, 99
+cacoshl, 99
+casinh, 99
+casinhf, 99
+casinhl, 99
+catanh, 99
+catanhf, 99
+catanhl, 99
+ccosh, 99
+ccoshf, 99
+ccoshl, 99
+csinh, 99
+csinhf, 99
+csinhl, 99
+ctanh, 99
+ctanhf, 99
+ctanhl, 99
+cexp, 99
+cexpf, 99
+cexpl, 99
+clog, 99
+clogf, 99
+clogl, 99
+cabs, 99
+cabsf, 99
+cabsl, 99
+cpow, 99
+cpowf, 99
+cpowl, 99
+csqrt, 99
+csqrtf, 99
+csqrtl, 99
+carg, 99
+cargf, 99
+cargl, 99
+cimag, 99
+cimagf, 99
+cimagl, 99
+conj, 99
+conjf, 99
+conjl, 99
+cproj, 99
+cprojf, 99
+cprojl, 99
+creal, 99
+crealf, 99
+creall, 99
+isblank, 99
+feclearexcept, 99
+fegetexceptflag, 99
+feraiseexcept, 99
+fesetexceptflag, 99
+fetestexcept, 99
+fegetround, 99
+fesetround, 99
+fegetenv, 99
+feholdexcept, 99
+fesetenv, 99
+feupdateenv, 99
+imaxabs, 99
+imaxdiv, 99
+strtoimax, 99
+strtoumax, 99
+wcstoimax, 99
+wcstoumax, 99
+acosf, 99
+acosl, 99
+asinf, 99
+asinl, 99
+atanf, 99
+atanl, 99
+atan2f, 99
+atan2l, 99
+cosf, 99
+cosl, 99
+sinf, 99
+sinl, 99
+tanf, 99
+tanl, 99
+acosh, 99
+acoshf, 99
+acoshl, 99
+asinh, 99
+asinhf, 99
+asinhl, 99
+atanh, 99
+atanhf, 99
+atanhl, 99
+coshf, 99
+coshl, 99
+sinhf, 99
+sinhl, 99
+tanhf, 99
+tanhl, 99
+expf, 99
+expl, 99
+exp2, 99
+exp2f, 99
+exp2l, 99
+expm1, 99
+expm1f, 99
+expm1l, 99
+frexpf, 99
+frexpl, 99
+ilogb, 99
+ilogbf, 99
+ilogbl, 99
+ldexpf, 99
+ldexpl, 99
+logf, 99
+logl, 99
+log10f, 99
+log10l, 99
+log1p, 99
+log1pf, 99
+log1pl, 99
+log2, 99
+log2f, 99
+log2l, 99
+logb, 99
+logbf, 99
+logbl, 99
+modff, 99
+modfl, 99
+scalbn, 99
+scalbnf, 99
+scalbnl, 99
+scalbln, 99
+scalblnf, 99
+scalblnl, 99
+cbrt, 99
+cbrtf, 99
+cbrtl, 99
+fabsf, 99
+fabsl, 99
+hypot, 99
+hypotf, 99
+hypotl, 99
+powf, 99
+powl, 99
+sqrtf, 99
+sqrtl, 99
+erf, 99
+erff, 99
+erfl, 99
+erfc, 99
+erfcf, 99
+erfcl, 99
+lgamma, 99
+lgammaf, 99
+lgammal, 99
+tgamma, 99
+tgammaf, 99
+tgammal, 99
+ceilf, 99
+ceill, 99
+floorf, 99
+floorl, 99
+nearbyint, 99
+nearbyintf, 99
+nearbyintl, 99
+rint, 99
+rintf, 99
+rintl, 99
+lrint, 99
+lrintf, 99
+lrintl, 99
+llrint, 99
+llrintf, 99
+llrintl, 99
+round, 99
+roundf, 99
+roundl, 99
+lround, 99
+lroundf, 99
+lroundl, 99
+llround, 99
+llroundf, 99
+llroundl, 99
+trunc, 99
+truncf, 99
+truncl, 99
+fmodf, 99
+fmodl, 99
+remainder, 99
+remainderf, 99
+remainderl, 99
+remquo, 99
+remquof, 99
+remquol, 99
+copysign, 99
+copysignf, 99
+copysignl, 99
+nan, 99
+nanf, 99
+nanl, 99
+nextafter, 99
+nextafterf, 99
+nextafterl, 99
+nexttoward, 99
+nexttowardf, 99
+nexttowardl, 99
+fdim, 99
+fdimf, 99
+fdiml, 99
+fmax, 99
+fmaxf, 99
+fmaxl, 99
+fmin, 99
+fminf, 99
+fminl, 99
+fma, 99
+fmaf, 99
+fmal, 99
+snprintf, 99
+#vfscanf, 99		-- POSIX thread cancellation point
+#vscanf, 99		-- POSIX thread cancellation point
+vsnprintf, 99
+vsscanf, 99
+atoll, 99
+strtof, 99
+strtold, 99
+strtoll, 99
+strtoull, 99
+_Exit, 99
+llabs, 99
+lldiv, 99
+#vfwscanf, 99		-- POSIX thread cancellation point
+vswscanf, 99
+#vwscanf, 99		-- POSIX thread cancellation point
+wcstof, 99
+wcstold, 99
+wcstoll, 99
+wcstoull, 99
+iswblank, 99
+#atomic_thread_fence, 11	-- usually implemented as a macro
+#atomic_signal_fence, 11	-- usually implemented as a macro
+#atomic_flag_test_and_set, 11	-- usually implemented as a macro
+#atomic_flag_test_and_set_explicit, 11	-- usually implemented as a macro
+#atomic_flag_clear, 11		-- usually implemented as a macro
+#atomic_flag_clear_explicit, 11	-- usually implemented as a macro
+aligned_alloc, 11
+at_quick_exit, 11
+quick_exit, 11
+#call_once, 11		-- C11 threads
+#cnd_broadcast, 11	-- C11 threads
+#cnd_destroy, 11	-- C11 threads
+#cnd_init, 11		-- C11 threads
+#cnd_signal, 11		-- C11 threads
+#cnd_timedwait, 11	-- C11 threads
+#cnd_wait, 11		-- C11 threads
+#mtx_destroy, 11	-- C11 threads
+#mtx_init, 11		-- C11 threads
+#mtx_lock, 11		-- C11 threads
+#mtx_timedlock, 11	-- C11 threads
+#mtx_trylock, 11	-- C11 threads
+#mtx_unlock, 11		-- C11 threads
+#thrd_create, 11	-- C11 threads
+#thrd_current, 11	-- C11 threads
+#thrd_detach, 11	-- C11 threads
+#thrd_equal, 11		-- C11 threads
+#thrd_exit, 11		-- C11 threads
+#thrd_join, 11		-- C11 threads
+#thrd_sleep, 11		-- C11 threads
+#thrd_yield, 11		-- C11 threads
+#tss_create, 11		-- C11 threads
+#tss_delete, 11		-- C11 threads
+#tss_get, 11		-- C11 threads
+#tss_set, 11		-- C11 threads
+timespec_get, 11
+mbrtoc16, 11
+c16rtomb, 11
+mbrtoc32, 11
+c32rtomb, 11
--- gcc/cp/cfns.h.jj	2016-02-19 23:16:32.000000000 +0100
+++ gcc/cp/cfns.h	2016-12-23 01:23:23.225929805 +0100
@@ -28,7 +28,7 @@ 
 #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
 #endif
 
-#line 3 "cfns.gperf"
+#line 4 "cfns.gperf"
 
 /* Copyright (C) 2000-2016 Free Software Foundation, Inc.
 
@@ -47,14 +47,16 @@  for more details.
 You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
-/* maximum key range = 391, duplicates = 0 */
+#line 23 "cfns.gperf"
+struct libc_name_struct { const char *name; int c_ver; };
+/* maximum key range = 1478, duplicates = 0 */
 
 class libc_name
 {
 private:
   static inline unsigned int hash (const char *str, unsigned int len);
 public:
-  static const char *libc_name_p (const char *str, unsigned int len);
+  static const struct libc_name_struct *libc_name_p (const char *str, unsigned int len);
 };
 
 inline unsigned int
@@ -62,32 +64,32 @@  libc_name::hash (register const char *st
 {
   static const unsigned short asso_values[] =
     {
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400,   0,   0,
-        1, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400,  28,  90,   0,
-       95,   0,  51,  93, 114,  26, 109, 124,   5,   1,
-        6,  13,  37, 128,   3,   0,   0,  49,  38,   0,
-      104,  45,   0, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-      400, 400, 400, 400, 400, 400, 400
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,    0,    1,
+        82, 1488,    4, 1488,    1, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+         0, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488,    0,    0,   29,    7,    6,
+       228,  136,    0,  284,  232,   17,  447,   31,    2,   51,
+         0,   78,  358,  433,   31,    0,   17,   52,  356,  230,
+       377,    5,   89, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488,
+      1488, 1488, 1488, 1488, 1488, 1488, 1488
     };
   register int hval = len;
 
@@ -106,7 +108,7 @@  libc_name::hash (register const char *st
         hval += asso_values[(unsigned char)str[2]];
       /*FALLTHROUGH*/
       case 2:
-        hval += asso_values[(unsigned char)str[1]];
+        hval += asso_values[(unsigned char)str[1]+1];
       /*FALLTHROUGH*/
       case 1:
         hval += asso_values[(unsigned char)str[0]];
@@ -115,220 +117,1001 @@  libc_name::hash (register const char *st
   return hval + asso_values[(unsigned char)str[len - 1]];
 }
 
-const char *
+const struct libc_name_struct *
 libc_name::libc_name_p (register const char *str, register unsigned int len)
 {
   enum
     {
-      TOTAL_KEYWORDS = 156,
+      TOTAL_KEYWORDS = 414,
       MIN_WORD_LENGTH = 3,
-      MAX_WORD_LENGTH = 10,
-      MIN_HASH_VALUE = 9,
-      MAX_HASH_VALUE = 399
+      MAX_WORD_LENGTH = 15,
+      MIN_HASH_VALUE = 10,
+      MAX_HASH_VALUE = 1487
     };
 
-  static const char * const wordlist[] =
+  static const struct libc_name_struct wordlist[] =
     {
-      "wcsstr",
-      "strstr",
-      "cos",
-      "towctrans",
-      "memmove",
-      "wcstol",
-      "wcscoll",
-      "wcstombs",
-      "strtol",
-      "strcoll",
-      "wcslen",
-      "time",
-      "ctime",
-      "strlen",
-      "iswctype",
-      "wmemchr",
-      "wcsrchr",
-      "ceil",
-      "sin",
-      "strrchr",
-      "tan",
-      "iscntrl",
-      "acos",
-      "wmemmove",
-      "wcsrtombs",
-      "wctrans",
-      "wmemcmp",
-      "pow",
-      "atol",
-      "wcsncmp",
-      "memset",
-      "free",
-      "strncmp",
-      "wmemset",
-      "wcsspn",
-      "wcstoul",
-      "strspn",
-      "strtoul",
-      "asctime",
-      "atan2",
-      "asin",
-      "atan",
-      "ferror",
-      "iswalnum",
-      "wcscat",
-      "realloc",
-      "strcat",
-      "wcscpy",
-      "memcpy",
-      "strcpy",
-      "tolower",
-      "floor",
-      "iswcntrl",
-      "atoi",
-      "clearerr",
-      "swscanf",
-      "wcsncat",
-      "islower",
-      "strncat",
-      "btowc",
-      "localtime",
-      "wctomb",
-      "isalnum",
-      "isprint",
-      "mblen",
-      "wcstod",
-      "log10",
-      "strtod",
-      "wcrtomb",
-      "abs",
-      "setlocale",
-      "wcschr",
-      "mbrlen",
-      "memchr",
-      "strchr",
-      "labs",
-      "iswpunct",
-      "exit",
-      "sqrt",
-      "swprintf",
-      "wctype",
-      "mbsrtowcs",
-      "wcscspn",
-      "getenv",
-      "strcspn",
-      "towlower",
-      "atof",
-      "wcstok",
-      "localeconv",
-      "strtok",
-      "calloc",
-      "malloc",
-      "isalpha",
-      "iswlower",
-      "iswspace",
-      "wcsxfrm",
-      "signal",
-      "strxfrm",
-      "wcsftime",
-      "feof",
-      "strftime",
-      "wcscmp",
-      "fabs",
-      "memcmp",
-      "strcmp",
-      "vsprintf",
-      "fwide",
-      "gmtime",
-      "sprintf",
-      "exp",
-      "wmemcpy",
-      "iswprint",
-      "sscanf",
-      "wcsncpy",
-      "strncpy",
-      "isspace",
-      "toupper",
-      "wctob",
-      "div",
-      "mbtowc",
-      "ldiv",
-      "log",
-      "mktime",
-      "isupper",
-      "atexit",
-      "modf",
-      "mbstowcs",
-      "mbrtowc",
-      "ispunct",
-      "iswalpha",
-      "setvbuf",
-      "rand",
-      "srand",
-      "frexp",
-      "towupper",
-      "mbsinit",
-      "cosh",
-      "vswprintf",
-      "iswupper",
-      "wcspbrk",
-      "fmod",
-      "strpbrk",
-      "sinh",
-      "tanh",
-      "iswdigit",
-      "clock",
-      "longjmp",
-      "ldexp",
-      "setbuf",
-      "fseek",
-      "iswgraph",
-      "difftime",
-      "iswxdigit",
-      "isdigit",
-      "isxdigit",
-      "isgraph"
+#line 456 "cfns.gperf"
+      {"nan", 99},
+#line 457 "cfns.gperf"
+      {"nanf", 99},
+#line 458 "cfns.gperf"
+      {"nanl", 99},
+#line 59 "cfns.gperf"
+      {"fabs", 89},
+#line 396 "cfns.gperf"
+      {"fabsf", 99},
+#line 119 "cfns.gperf"
+      {"labs", 89},
+#line 471 "cfns.gperf"
+      {"fmin", 99},
+#line 472 "cfns.gperf"
+      {"fminf", 99},
+#line 397 "cfns.gperf"
+      {"fabsl", 99},
+#line 286 "cfns.gperf"
+      {"cabs", 99},
+#line 287 "cfns.gperf"
+      {"cabsf", 99},
+#line 473 "cfns.gperf"
+      {"fminl", 99},
+#line 192 "cfns.gperf"
+      {"tan", 89},
+#line 340 "cfns.gperf"
+      {"tanf", 99},
+#line 288 "cfns.gperf"
+      {"cabsl", 99},
+#line 417 "cfns.gperf"
+      {"ceilf", 99},
+#line 49 "cfns.gperf"
+      {"ceil", 89},
+#line 341 "cfns.gperf"
+      {"tanl", 99},
+#line 475 "cfns.gperf"
+      {"fmaf", 99},
+#line 418 "cfns.gperf"
+      {"ceill", 99},
+#line 247 "cfns.gperf"
+      {"casin", 99},
+#line 476 "cfns.gperf"
+      {"fmal", 99},
+#line 36 "cfns.gperf"
+      {"abs", 89},
+#line 256 "cfns.gperf"
+      {"csin", 99},
+#line 257 "cfns.gperf"
+      {"csinf", 99},
+#line 258 "cfns.gperf"
+      {"csinl", 99},
+#line 266 "cfns.gperf"
+      {"casinhf", 99},
+#line 267 "cfns.gperf"
+      {"casinhl", 99},
+#line 427 "cfns.gperf"
+      {"lrint", 99},
+#line 474 "cfns.gperf"
+      {"fma", 99},
+#line 250 "cfns.gperf"
+      {"catan", 99},
+#line 394 "cfns.gperf"
+      {"cbrtf", 99},
+#line 98 "cfns.gperf"
+      {"iscntrl", 89},
+#line 39 "cfns.gperf"
+      {"asin", 89},
+#line 330 "cfns.gperf"
+      {"asinf", 99},
+#line 395 "cfns.gperf"
+      {"cbrtl", 99},
+#line 331 "cfns.gperf"
+      {"asinl", 99},
+#line 393 "cfns.gperf"
+      {"cbrt", 99},
+#line 61 "cfns.gperf"
+      {"feof", 89},
+#line 269 "cfns.gperf"
+      {"catanhf", 99},
+#line 403 "cfns.gperf"
+      {"sqrtf", 99},
+#line 270 "cfns.gperf"
+      {"catanhl", 99},
+#line 442 "cfns.gperf"
+      {"trunc", 99},
+#line 404 "cfns.gperf"
+      {"sqrtl", 99},
+#line 249 "cfns.gperf"
+      {"casinl", 99},
+#line 259 "cfns.gperf"
+      {"ctan", 99},
+#line 260 "cfns.gperf"
+      {"ctanf", 99},
+#line 488 "cfns.gperf"
+      {"llabs", 99},
+#line 429 "cfns.gperf"
+      {"lrintl", 99},
+#line 261 "cfns.gperf"
+      {"ctanl", 99},
+#line 165 "cfns.gperf"
+      {"sqrt", 89},
+#line 244 "cfns.gperf"
+      {"cacos", 99},
+#line 40 "cfns.gperf"
+      {"atan", 89},
+#line 332 "cfns.gperf"
+      {"atanf", 99},
+#line 252 "cfns.gperf"
+      {"catanl", 99},
+#line 333 "cfns.gperf"
+      {"atanl", 99},
+#line 177 "cfns.gperf"
+      {"strncat", 89},
+#line 263 "cfns.gperf"
+      {"cacoshf", 99},
+#line 264 "cfns.gperf"
+      {"cacoshl", 99},
+#line 313 "cfns.gperf"
+      {"feraiseexcept", 99},
+#line 444 "cfns.gperf"
+      {"truncl", 99},
+#line 183 "cfns.gperf"
+      {"strstr", 89},
+#line 405 "cfns.gperf"
+      {"erf", 99},
+#line 406 "cfns.gperf"
+      {"erff", 99},
+#line 407 "cfns.gperf"
+      {"erfl", 99},
+#line 409 "cfns.gperf"
+      {"erfcf", 99},
+#line 410 "cfns.gperf"
+      {"erfcl", 99},
+#line 408 "cfns.gperf"
+      {"erfc", 99},
+#line 246 "cfns.gperf"
+      {"cacosl", 99},
+#line 431 "cfns.gperf"
+      {"llrintf", 99},
+#line 432 "cfns.gperf"
+      {"llrintl", 99},
+#line 43 "cfns.gperf"
+      {"atof", 89},
+#line 422 "cfns.gperf"
+      {"nearbyintf", 99},
+#line 45 "cfns.gperf"
+      {"atol", 89},
+#line 423 "cfns.gperf"
+      {"nearbyintl", 99},
+#line 482 "cfns.gperf"
+      {"atoll", 99},
+#line 181 "cfns.gperf"
+      {"strrchr", 89},
+#line 430 "cfns.gperf"
+      {"llrint", 99},
+#line 62 "cfns.gperf"
+      {"ferror", 89},
+#line 307 "cfns.gperf"
+      {"creal", 99},
+#line 311 "cfns.gperf"
+      {"feclearexcept", 99},
+#line 421 "cfns.gperf"
+      {"nearbyint", 99},
+#line 310 "cfns.gperf"
+      {"isblank", 99},
+#line 168 "cfns.gperf"
+      {"strcat", 89},
+#line 57 "cfns.gperf"
+      {"exit", 89},
+#line 44 "cfns.gperf"
+      {"atoi", 89},
+#line 128 "cfns.gperf"
+      {"mblen", 89},
+#line 51 "cfns.gperf"
+      {"clock", 89},
+#line 466 "cfns.gperf"
+      {"fdimf", 99},
+#line 467 "cfns.gperf"
+      {"fdiml", 99},
+#line 448 "cfns.gperf"
+      {"remainderf", 99},
+#line 185 "cfns.gperf"
+      {"strtok", 89},
+#line 449 "cfns.gperf"
+      {"remainderl", 99},
+#line 171 "cfns.gperf"
+      {"strcoll", 89},
+#line 38 "cfns.gperf"
+      {"asctime", 89},
+#line 309 "cfns.gperf"
+      {"creall", 99},
+#line 315 "cfns.gperf"
+      {"fetestexcept", 99},
+#line 186 "cfns.gperf"
+      {"strtol", 89},
+#line 485 "cfns.gperf"
+      {"strtoll", 99},
+#line 447 "cfns.gperf"
+      {"remainder", 99},
+#line 335 "cfns.gperf"
+      {"atan2l", 99},
+#line 465 "cfns.gperf"
+      {"fdim", 99},
+#line 355 "cfns.gperf"
+      {"tanhf", 99},
+#line 356 "cfns.gperf"
+      {"tanhl", 99},
+#line 69 "cfns.gperf"
+      {"floor", 89},
+#line 437 "cfns.gperf"
+      {"lroundf", 99},
+#line 438 "cfns.gperf"
+      {"lroundl", 99},
+#line 41 "cfns.gperf"
+      {"atan2", 89},
+#line 140 "cfns.gperf"
+      {"mktime", 89},
+#line 265 "cfns.gperf"
+      {"casinh", 99},
+#line 50 "cfns.gperf"
+      {"clearerr", 89},
+#line 420 "cfns.gperf"
+      {"floorl", 99},
+#line 440 "cfns.gperf"
+      {"llroundf", 99},
+#line 441 "cfns.gperf"
+      {"llroundl", 99},
+#line 176 "cfns.gperf"
+      {"strlen", 89},
+#line 129 "cfns.gperf"
+      {"mbrlen", 89},
+#line 445 "cfns.gperf"
+      {"fmodf", 99},
+#line 139 "cfns.gperf"
+      {"memset", 89},
+#line 268 "cfns.gperf"
+      {"catanh", 99},
+#line 446 "cfns.gperf"
+      {"fmodl", 99},
+#line 253 "cfns.gperf"
+      {"ccos", 99},
+#line 254 "cfns.gperf"
+      {"ccosf", 99},
+#line 497 "cfns.gperf"
+      {"iswblank", 99},
+#line 248 "cfns.gperf"
+      {"casinf", 99},
+#line 255 "cfns.gperf"
+      {"ccosl", 99},
+#line 390 "cfns.gperf"
+      {"scalbln", 99},
+#line 391 "cfns.gperf"
+      {"scalblnf", 99},
+#line 428 "cfns.gperf"
+      {"lrintf", 99},
+#line 392 "cfns.gperf"
+      {"scalblnl", 99},
+#line 276 "cfns.gperf"
+      {"csinhl", 99},
+#line 108 "cfns.gperf"
+      {"iswcntrl", 89},
+#line 296 "cfns.gperf"
+      {"cargf", 99},
+#line 48 "cfns.gperf"
+      {"calloc", 89},
+#line 297 "cfns.gperf"
+      {"cargl", 99},
+#line 37 "cfns.gperf"
+      {"acos", 89},
+#line 328 "cfns.gperf"
+      {"acosf", 99},
+#line 167 "cfns.gperf"
+      {"sscanf", 89},
+#line 329 "cfns.gperf"
+      {"acosl", 99},
+#line 251 "cfns.gperf"
+      {"catanf", 99},
+#line 387 "cfns.gperf"
+      {"scalbn", 99},
+#line 388 "cfns.gperf"
+      {"scalbnf", 99},
+#line 262 "cfns.gperf"
+      {"cacosh", 99},
+#line 389 "cfns.gperf"
+      {"scalbnl", 99},
+#line 347 "cfns.gperf"
+      {"asinhl", 99},
+#line 82 "cfns.gperf"
+      {"fseek", 89},
+#line 169 "cfns.gperf"
+      {"strchr", 89},
+#line 443 "cfns.gperf"
+      {"truncf", 99},
+#line 158 "cfns.gperf"
+      {"setbuf", 89},
+#line 52 "cfns.gperf"
+      {"cos", 89},
+#line 336 "cfns.gperf"
+      {"cosf", 99},
+#line 337 "cfns.gperf"
+      {"cosl", 99},
+#line 135 "cfns.gperf"
+      {"memchr", 89},
+#line 279 "cfns.gperf"
+      {"ctanhl", 99},
+#line 412 "cfns.gperf"
+      {"lgammaf", 99},
+#line 127 "cfns.gperf"
+      {"malloc", 89},
+#line 413 "cfns.gperf"
+      {"lgammal", 99},
+#line 101 "cfns.gperf"
+      {"islower", 89},
+#line 47 "cfns.gperf"
+      {"btowc", 89},
+#line 245 "cfns.gperf"
+      {"cacosf", 99},
+#line 317 "cfns.gperf"
+      {"fesetround", 99},
+#line 415 "cfns.gperf"
+      {"tgammaf", 99},
+#line 416 "cfns.gperf"
+      {"tgammal", 99},
+#line 504 "cfns.gperf"
+      {"aligned_alloc", 11},
+#line 350 "cfns.gperf"
+      {"atanhl", 99},
+#line 54 "cfns.gperf"
+      {"ctime", 89},
+#line 411 "cfns.gperf"
+      {"lgamma", 99},
+#line 469 "cfns.gperf"
+      {"fmaxf", 99},
+#line 78 "cfns.gperf"
+      {"free", 89},
+#line 470 "cfns.gperf"
+      {"fmaxl", 99},
+#line 533 "cfns.gperf"
+      {"mbrtoc16", 11},
+#line 414 "cfns.gperf"
+      {"tgamma", 99},
+#line 284 "cfns.gperf"
+      {"clogf", 99},
+#line 285 "cfns.gperf"
+      {"clogl", 99},
+#line 106 "cfns.gperf"
+      {"iswalnum", 89},
+#line 487 "cfns.gperf"
+      {"_Exit", 99},
+#line 153 "cfns.gperf"
+      {"realloc", 89},
+#line 241 "cfns.gperf"
+      {"wmemset", 89},
+#line 367 "cfns.gperf"
+      {"ilogb", 99},
+#line 162 "cfns.gperf"
+      {"sin", 89},
+#line 338 "cfns.gperf"
+      {"sinf", 99},
+#line 314 "cfns.gperf"
+      {"fesetexceptflag", 99},
+#line 178 "cfns.gperf"
+      {"strncmp", 89},
+#line 339 "cfns.gperf"
+      {"sinl", 99},
+#line 308 "cfns.gperf"
+      {"crealf", 99},
+#line 484 "cfns.gperf"
+      {"strtold", 99},
+#line 322 "cfns.gperf"
+      {"imaxabs", 99},
+#line 483 "cfns.gperf"
+      {"strtof", 99},
+#line 159 "cfns.gperf"
+      {"setlocale", 89},
+#line 132 "cfns.gperf"
+      {"mbsrtowcs", 89},
+#line 97 "cfns.gperf"
+      {"isalpha", 89},
+#line 319 "cfns.gperf"
+      {"feholdexcept", 99},
+#line 237 "cfns.gperf"
+      {"wmemchr", 89},
+#line 96 "cfns.gperf"
+      {"isalnum", 89},
+#line 334 "cfns.gperf"
+      {"atan2f", 99},
+#line 180 "cfns.gperf"
+      {"strpbrk", 89},
+#line 166 "cfns.gperf"
+      {"srand", 89},
+#line 193 "cfns.gperf"
+      {"tanh", 89},
+#line 481 "cfns.gperf"
+      {"vsscanf", 99},
+#line 219 "cfns.gperf"
+      {"wcsncat", 89},
+#line 369 "cfns.gperf"
+      {"ilogbl", 99},
+#line 190 "cfns.gperf"
+      {"swscanf", 89},
+#line 152 "cfns.gperf"
+      {"rand", 89},
+#line 425 "cfns.gperf"
+      {"rintf", 99},
+#line 535 "cfns.gperf"
+      {"mbrtoc32", 11},
+#line 436 "cfns.gperf"
+      {"lround", 99},
+#line 357 "cfns.gperf"
+      {"expf", 99},
+#line 426 "cfns.gperf"
+      {"rintl", 99},
+#line 358 "cfns.gperf"
+      {"expl", 99},
+#line 274 "cfns.gperf"
+      {"csinh", 99},
+#line 534 "cfns.gperf"
+      {"c16rtomb", 11},
+#line 95 "cfns.gperf"
+      {"gmtime", 89},
+#line 226 "cfns.gperf"
+      {"wcsstr", 89},
+#line 536 "cfns.gperf"
+      {"c32rtomb", 11},
+#line 424 "cfns.gperf"
+      {"rint", 99},
+#line 320 "cfns.gperf"
+      {"fesetenv", 99},
+#line 188 "cfns.gperf"
+      {"strxfrm", 89},
+#line 109 "cfns.gperf"
+      {"iswctype", 89},
+#line 182 "cfns.gperf"
+      {"strspn", 89},
+#line 292 "cfns.gperf"
+      {"csqrt", 99},
+#line 439 "cfns.gperf"
+      {"llround", 99},
+#line 419 "cfns.gperf"
+      {"floorf", 99},
+#line 173 "cfns.gperf"
+      {"strcspn", 89},
+#line 345 "cfns.gperf"
+      {"asinh", 99},
+#line 179 "cfns.gperf"
+      {"strncpy", 89},
+#line 133 "cfns.gperf"
+      {"mbstowcs", 89},
+#line 70 "cfns.gperf"
+      {"fmod", 89},
+#line 164 "cfns.gperf"
+      {"sprintf", 89},
+#line 102 "cfns.gperf"
+      {"isprint", 89},
+#line 187 "cfns.gperf"
+      {"strtoul", 89},
+#line 486 "cfns.gperf"
+      {"strtoull", 99},
+#line 131 "cfns.gperf"
+      {"mbsinit", 89},
+#line 172 "cfns.gperf"
+      {"strcpy", 89},
+#line 184 "cfns.gperf"
+      {"strtod", 89},
+#line 223 "cfns.gperf"
+      {"wcsrchr", 89},
+#line 277 "cfns.gperf"
+      {"ctanh", 99},
+#line 362 "cfns.gperf"
+      {"expm1", 99},
+#line 230 "cfns.gperf"
+      {"wcstombs", 89},
+#line 275 "cfns.gperf"
+      {"csinhf", 99},
+#line 294 "cfns.gperf"
+      {"csqrtl", 99},
+#line 137 "cfns.gperf"
+      {"memcpy", 89},
+#line 211 "cfns.gperf"
+      {"wcscat", 89},
+#line 477 "cfns.gperf"
+      {"snprintf", 99},
+#line 233 "cfns.gperf"
+      {"wctob", 89},
+#line 130 "cfns.gperf"
+      {"mbrtowc", 89},
+#line 348 "cfns.gperf"
+      {"atanh", 99},
+#line 346 "cfns.gperf"
+      {"asinhf", 99},
+#line 360 "cfns.gperf"
+      {"exp2f", 99},
+#line 361 "cfns.gperf"
+      {"exp2l", 99},
+#line 228 "cfns.gperf"
+      {"wcstok", 89},
+#line 123 "cfns.gperf"
+      {"localtime", 89},
+#line 210 "cfns.gperf"
+      {"wcrtomb", 89},
+#line 351 "cfns.gperf"
+      {"coshf", 99},
+#line 214 "cfns.gperf"
+      {"wcscoll", 89},
+#line 273 "cfns.gperf"
+      {"ccoshl", 99},
+#line 138 "cfns.gperf"
+      {"memmove", 89},
+#line 352 "cfns.gperf"
+      {"coshl", 99},
+#line 278 "cfns.gperf"
+      {"ctanhf", 99},
+#line 364 "cfns.gperf"
+      {"expm1l", 99},
+#line 229 "cfns.gperf"
+      {"wcstol", 89},
+#line 495 "cfns.gperf"
+      {"wcstoll", 99},
+#line 295 "cfns.gperf"
+      {"carg", 99},
+#line 235 "cfns.gperf"
+      {"wctrans", 89},
+#line 134 "cfns.gperf"
+      {"mbtowc", 89},
+#line 234 "cfns.gperf"
+      {"wctomb", 89},
+#line 491 "cfns.gperf"
+      {"vswscanf", 99},
+#line 344 "cfns.gperf"
+      {"acoshl", 99},
+#line 349 "cfns.gperf"
+      {"atanhf", 99},
+#line 199 "cfns.gperf"
+      {"towctrans", 89},
+#line 141 "cfns.gperf"
+      {"modf", 89},
+#line 385 "cfns.gperf"
+      {"modff", 99},
+#line 386 "cfns.gperf"
+      {"modfl", 99},
+#line 372 "cfns.gperf"
+      {"logf", 99},
+#line 125 "cfns.gperf"
+      {"log10", 89},
+#line 373 "cfns.gperf"
+      {"logl", 99},
+#line 383 "cfns.gperf"
+      {"logbf", 99},
+#line 384 "cfns.gperf"
+      {"logbl", 99},
+#line 382 "cfns.gperf"
+      {"logb", 99},
+#line 359 "cfns.gperf"
+      {"exp2", 99},
+#line 316 "cfns.gperf"
+      {"fegetround", 99},
+#line 218 "cfns.gperf"
+      {"wcslen", 89},
+#line 353 "cfns.gperf"
+      {"sinhf", 99},
+#line 42 "cfns.gperf"
+      {"atexit", 89},
+#line 354 "cfns.gperf"
+      {"sinhl", 99},
+#line 175 "cfns.gperf"
+      {"strftime", 89},
+#line 103 "cfns.gperf"
+      {"ispunct", 89},
+#line 375 "cfns.gperf"
+      {"log10l", 99},
+#line 283 "cfns.gperf"
+      {"clog", 99},
+#line 460 "cfns.gperf"
+      {"nextafterf", 99},
+#line 461 "cfns.gperf"
+      {"nextafterl", 99},
+#line 197 "cfns.gperf"
+      {"tolower", 89},
+#line 368 "cfns.gperf"
+      {"ilogbf", 99},
+#line 435 "cfns.gperf"
+      {"roundl", 99},
+#line 380 "cfns.gperf"
+      {"log2f", 99},
+#line 212 "cfns.gperf"
+      {"wcschr", 89},
+#line 381 "cfns.gperf"
+      {"log2l", 99},
+#line 312 "cfns.gperf"
+      {"fegetexceptflag", 99},
+#line 160 "cfns.gperf"
+      {"setvbuf", 89},
+#line 281 "cfns.gperf"
+      {"cexpf", 99},
+#line 459 "cfns.gperf"
+      {"nextafter", 99},
+#line 282 "cfns.gperf"
+      {"cexpl", 99},
+#line 290 "cfns.gperf"
+      {"cpowf", 99},
+#line 291 "cfns.gperf"
+      {"cpowl", 99},
+#line 112 "cfns.gperf"
+      {"iswlower", 89},
+#line 122 "cfns.gperf"
+      {"localeconv", 89},
+#line 107 "cfns.gperf"
+      {"iswalpha", 89},
+#line 110 "cfns.gperf"
+      {"iswdigit", 89},
+#line 115 "cfns.gperf"
+      {"iswspace", 89},
+#line 114 "cfns.gperf"
+      {"iswpunct", 89},
+#line 463 "cfns.gperf"
+      {"nexttowardf", 99},
+#line 271 "cfns.gperf"
+      {"ccosh", 99},
+#line 464 "cfns.gperf"
+      {"nexttowardl", 99},
+#line 468 "cfns.gperf"
+      {"fmax", 99},
+#line 238 "cfns.gperf"
+      {"wmemcmp", 89},
+#line 194 "cfns.gperf"
+      {"time", 89},
+#line 104 "cfns.gperf"
+      {"isspace", 89},
+#line 293 "cfns.gperf"
+      {"csqrtf", 99},
+#line 398 "cfns.gperf"
+      {"hypot", 99},
+#line 318 "cfns.gperf"
+      {"fegetenv", 99},
+#line 342 "cfns.gperf"
+      {"acosh", 99},
+#line 379 "cfns.gperf"
+      {"log2", 99},
+#line 302 "cfns.gperf"
+      {"conjf", 99},
+#line 161 "cfns.gperf"
+      {"signal", 89},
+#line 303 "cfns.gperf"
+      {"conjl", 99},
+#line 111 "cfns.gperf"
+      {"iswgraph", 89},
+#line 220 "cfns.gperf"
+      {"wcsncmp", 89},
+#line 53 "cfns.gperf"
+      {"cosh", 89},
+#line 400 "cfns.gperf"
+      {"hypotl", 99},
+#line 272 "cfns.gperf"
+      {"ccoshf", 99},
+#line 494 "cfns.gperf"
+      {"wcstold", 99},
+#line 105 "cfns.gperf"
+      {"isupper", 89},
+#line 363 "cfns.gperf"
+      {"expm1f", 99},
+#line 493 "cfns.gperf"
+      {"wcstof", 99},
+#line 343 "cfns.gperf"
+      {"acoshf", 99},
+#line 58 "cfns.gperf"
+      {"exp", 89},
+#line 222 "cfns.gperf"
+      {"wcspbrk", 89},
+#line 207 "cfns.gperf"
+      {"vsprintf", 89},
+#line 239 "cfns.gperf"
+      {"wmemcpy", 89},
+#line 189 "cfns.gperf"
+      {"swprintf", 89},
+#line 506 "cfns.gperf"
+      {"quick_exit", 11},
+#line 121 "cfns.gperf"
+      {"ldiv", 89},
+#line 224 "cfns.gperf"
+      {"wcsrtombs", 89},
+#line 300 "cfns.gperf"
+      {"cimagl", 99},
+#line 232 "cfns.gperf"
+      {"wcsxfrm", 89},
+#line 85 "cfns.gperf"
+      {"fwide", 89},
+#line 225 "cfns.gperf"
+      {"wcsspn", 89},
+#line 433 "cfns.gperf"
+      {"round", 99},
+#line 216 "cfns.gperf"
+      {"wcscspn", 89},
+#line 221 "cfns.gperf"
+      {"wcsncpy", 89},
+#line 118 "cfns.gperf"
+      {"isxdigit", 89},
+#line 163 "cfns.gperf"
+      {"sinh", 89},
+#line 231 "cfns.gperf"
+      {"wcstoul", 89},
+#line 496 "cfns.gperf"
+      {"wcstoull", 99},
+#line 325 "cfns.gperf"
+      {"strtoumax", 99},
+#line 215 "cfns.gperf"
+      {"wcscpy", 89},
+#line 227 "cfns.gperf"
+      {"wcstod", 89},
+#line 366 "cfns.gperf"
+      {"frexpl", 99},
+#line 124 "cfns.gperf"
+      {"log", 89},
+#line 451 "cfns.gperf"
+      {"remquof", 99},
+#line 452 "cfns.gperf"
+      {"remquol", 99},
+#line 374 "cfns.gperf"
+      {"log10f", 99},
+#line 170 "cfns.gperf"
+      {"strcmp", 89},
+#line 401 "cfns.gperf"
+      {"powf", 99},
+#line 402 "cfns.gperf"
+      {"powl", 99},
+#line 136 "cfns.gperf"
+      {"memcmp", 89},
+#line 434 "cfns.gperf"
+      {"roundf", 99},
+#line 240 "cfns.gperf"
+      {"wmemmove", 89},
+#line 236 "cfns.gperf"
+      {"wctype", 89},
+#line 289 "cfns.gperf"
+      {"cpow", 99},
+#line 462 "cfns.gperf"
+      {"nexttoward", 99},
+#line 450 "cfns.gperf"
+      {"remquo", 99},
+#line 324 "cfns.gperf"
+      {"strtoimax", 99},
+#line 321 "cfns.gperf"
+      {"feupdateenv", 99},
+#line 489 "cfns.gperf"
+      {"lldiv", 99},
+#line 91 "cfns.gperf"
+      {"getenv", 89},
+#line 99 "cfns.gperf"
+      {"isdigit", 89},
+#line 505 "cfns.gperf"
+      {"at_quick_exit", 11},
+#line 100 "cfns.gperf"
+      {"isgraph", 89},
+#line 306 "cfns.gperf"
+      {"cprojl", 99},
+#line 378 "cfns.gperf"
+      {"log1pl", 99},
+#line 399 "cfns.gperf"
+      {"hypotf", 99},
+#line 217 "cfns.gperf"
+      {"wcsftime", 89},
+#line 371 "cfns.gperf"
+      {"ldexpl", 99},
+#line 200 "cfns.gperf"
+      {"towlower", 89},
+#line 280 "cfns.gperf"
+      {"cexp", 99},
+#line 298 "cfns.gperf"
+      {"cimag", 99},
+#line 299 "cfns.gperf"
+      {"cimagf", 99},
+#line 532 "cfns.gperf"
+      {"timespec_get", 11},
+#line 113 "cfns.gperf"
+      {"iswprint", 89},
+#line 116 "cfns.gperf"
+      {"iswupper", 89},
+#line 365 "cfns.gperf"
+      {"frexpf", 99},
+#line 143 "cfns.gperf"
+      {"pow", 89},
+#line 198 "cfns.gperf"
+      {"toupper", 89},
+#line 453 "cfns.gperf"
+      {"copysign", 99},
+#line 454 "cfns.gperf"
+      {"copysignf", 99},
+#line 455 "cfns.gperf"
+      {"copysignl", 99},
+#line 480 "cfns.gperf"
+      {"vsnprintf", 99},
+#line 80 "cfns.gperf"
+      {"frexp", 89},
+#line 301 "cfns.gperf"
+      {"conj", 99},
+#line 55 "cfns.gperf"
+      {"difftime", 89},
+#line 305 "cfns.gperf"
+      {"cprojf", 99},
+#line 377 "cfns.gperf"
+      {"log1pf", 99},
+#line 327 "cfns.gperf"
+      {"wcstoumax", 99},
+#line 370 "cfns.gperf"
+      {"ldexpf", 99},
+#line 213 "cfns.gperf"
+      {"wcscmp", 89},
+#line 117 "cfns.gperf"
+      {"iswxdigit", 89},
+#line 376 "cfns.gperf"
+      {"log1p", 99},
+#line 120 "cfns.gperf"
+      {"ldexp", 89},
+#line 326 "cfns.gperf"
+      {"wcstoimax", 99},
+#line 56 "cfns.gperf"
+      {"div", 89},
+#line 304 "cfns.gperf"
+      {"cproj", 99},
+#line 208 "cfns.gperf"
+      {"vswprintf", 89},
+#line 126 "cfns.gperf"
+      {"longjmp", 89},
+#line 323 "cfns.gperf"
+      {"imaxdiv", 99},
+#line 201 "cfns.gperf"
+      {"towupper", 89}
     };
 
   static const short lookup[] =
     {
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,
-       -1,  -1,   1,  -1,  -1,  -1,   2,  -1,  -1,  -1,
-       -1,  -1,   3,   4,  -1,   5,   6,   7,   8,   9,
-       10,  11,  12,  13,  14,  -1,  -1,  -1,  15,  16,
-       17,  18,  19,  20,  21,  22,  -1,  -1,  23,  24,
-       -1,  25,  26,  27,  -1,  28,  29,  30,  31,  32,
-       33,  -1,  34,  35,  -1,  36,  37,  38,  -1,  39,
-       40,  -1,  41,  -1,  -1,  -1,  -1,  -1,  -1,  42,
-       -1,  43,  -1,  44,  -1,  45,  46,  -1,  47,  -1,
-       48,  49,  50,  51,  52,  -1,  -1,  53,  54,  55,
-       -1,  -1,  -1,  56,  -1,  57,  58,  -1,  59,  60,
-       61,  62,  63,  64,  65,  -1,  66,  67,  -1,  68,
-       -1,  69,  70,  71,  72,  73,  74,  75,  -1,  -1,
-       -1,  -1,  -1,  76,  77,  78,  -1,  -1,  79,  80,
-       81,  82,  -1,  83,  84,  -1,  85,  86,  87,  -1,
-       88,  89,  90,  91,  -1,  -1,  -1,  92,  -1,  93,
-       -1,  94,  -1,  95,  -1,  96,  97,  -1,  98,  -1,
-       99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
-       -1, 109, 110, 111, 112,  -1, 113,  -1,  -1, 114,
-       -1,  -1,  -1, 115,  -1,  -1,  -1, 116, 117,  -1,
-      118,  -1,  -1,  -1,  -1, 119, 120, 121,  -1, 122,
-      123,  -1,  -1, 124,  -1, 125, 126,  -1, 127,  -1,
-      128,  -1,  -1, 129, 130,  -1,  -1,  -1,  -1,  -1,
-       -1, 131, 132,  -1,  -1,  -1,  -1, 133, 134, 135,
-       -1,  -1,  -1,  -1,  -1, 136,  -1, 137,  -1,  -1,
-       -1, 138,  -1,  -1,  -1,  -1,  -1,  -1, 139, 140,
-       -1, 141,  -1,  -1, 142,  -1, 143,  -1,  -1, 144,
-       -1, 145,  -1,  -1,  -1,  -1, 146,  -1,  -1,  -1,
-       -1,  -1,  -1, 147,  -1,  -1,  -1,  -1,  -1, 148,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1, 149,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1, 150,  -1,  -1,  -1,  -1,  -1,
-      151,  -1,  -1, 152,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1, 153,  -1,  -1,  -1,
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 154,  -1,  -1,  -1,  -1,  -1,  -1,
+        0,   1,  -1,  -1,  -1,   2,  -1,  -1,   3,   4,
+        5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
+       15,  16,  17,  18,  19,  20,  -1,  21,  22,  -1,
+       -1,  -1,  -1,  -1,  23,  24,  -1,  -1,  -1,  25,
+       -1,  -1,  -1,  -1,  26,  -1,  27,  -1,  28,  -1,
+       -1,  29,  -1,  -1,  30,  31,  32,  33,  34,  35,
+       -1,  -1,  36,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  37,  38,  39,  40,  41,  42,  -1,  43,  44,
+       -1,  45,  46,  -1,  47,  48,  49,  -1,  -1,  -1,
+       50,  -1,  51,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  52,  53,  -1,  -1,  54,  55,
+       56,  57,  -1,  58,  59,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  60,  -1,  -1,  61,  -1,  62,
+       63,  -1,  -1,  -1,  64,  -1,  -1,  65,  -1,  -1,
+       -1,  66,  67,  -1,  -1,  -1,  68,  -1,  -1,  -1,
+       69,  -1,  70,  71,  -1,  -1,  72,  73,  74,  -1,
+       75,  -1,  -1,  -1,  -1,  76,  77,  78,  -1,  -1,
+       79,  80,  81,  -1,  -1,  -1,  -1,  -1,  82,  -1,
+       -1,  -1,  -1,  83,  -1,  -1,  84,  85,  -1,  -1,
+       86,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  87,  88,
+       -1,  -1,  -1,  89,  -1,  -1,  90,  91,  92,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  93,  -1,  94,
+       -1,  -1,  95,  -1,  96,  -1,  -1,  97,  98,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  99,  -1,  -1,  -1,
+       -1, 100,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 101,
+       -1, 102,  -1,  -1,  -1, 103,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 104, 105,  -1, 106,  -1, 107,
+      108,  -1,  -1,  -1,  -1, 109,  -1,  -1,  -1,  -1,
+       -1,  -1, 110,  -1,  -1,  -1,  -1, 111,  -1,  -1,
+      112,  -1, 113,  -1,  -1, 114,  -1,  -1,  -1,  -1,
+      115, 116,  -1, 117, 118, 119, 120, 121,  -1, 122,
+      123, 124,  -1,  -1, 125, 126, 127, 128,  -1,  -1,
+       -1, 129, 130, 131,  -1, 132,  -1, 133,  -1, 134,
+      135,  -1, 136,  -1, 137,  -1,  -1,  -1,  -1, 138,
+      139, 140, 141, 142, 143,  -1, 144,  -1, 145,  -1,
+       -1,  -1,  -1,  -1,  -1, 146, 147, 148, 149,  -1,
+       -1,  -1, 150,  -1,  -1,  -1,  -1, 151, 152, 153,
+      154, 155, 156,  -1, 157,  -1,  -1, 158,  -1,  -1,
+       -1, 159,  -1,  -1, 160,  -1, 161,  -1,  -1,  -1,
+      162, 163,  -1, 164,  -1,  -1,  -1, 165,  -1,  -1,
+       -1, 166, 167,  -1,  -1, 168,  -1,  -1,  -1,  -1,
+      169,  -1, 170,  -1, 171,  -1,  -1,  -1, 172,  -1,
+       -1,  -1, 173, 174,  -1, 175,  -1,  -1,  -1,  -1,
+       -1, 176,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 177,
+      178, 179, 180,  -1, 181, 182,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1, 183, 184, 185,  -1,  -1, 186,  -1,
+      187,  -1, 188,  -1,  -1,  -1, 189, 190, 191, 192,
+       -1,  -1, 193,  -1,  -1,  -1, 194,  -1,  -1,  -1,
+      195,  -1, 196, 197,  -1, 198, 199, 200, 201,  -1,
+      202, 203, 204, 205, 206,  -1,  -1, 207,  -1, 208,
+      209, 210, 211, 212,  -1,  -1, 213, 214, 215,  -1,
+      216,  -1,  -1,  -1,  -1, 217, 218, 219, 220, 221,
+       -1,  -1, 222,  -1, 223,  -1,  -1, 224, 225,  -1,
+      226,  -1, 227, 228, 229, 230,  -1, 231, 232,  -1,
+      233,  -1,  -1,  -1,  -1,  -1, 234, 235,  -1,  -1,
+       -1, 236, 237, 238,  -1,  -1, 239,  -1, 240,  -1,
+      241,  -1, 242, 243,  -1,  -1,  -1,  -1,  -1, 244,
+       -1,  -1,  -1,  -1,  -1, 245, 246,  -1,  -1,  -1,
+      247,  -1, 248,  -1, 249,  -1,  -1,  -1, 250,  -1,
+       -1, 251, 252, 253, 254, 255,  -1,  -1,  -1, 256,
+      257,  -1, 258, 259,  -1,  -1, 260,  -1,  -1,  -1,
+      261,  -1, 262, 263, 264,  -1, 265,  -1,  -1,  -1,
+       -1,  -1, 266,  -1,  -1,  -1,  -1, 267,  -1,  -1,
+       -1, 268, 269,  -1,  -1,  -1, 270,  -1, 271,  -1,
+      272,  -1, 273,  -1,  -1,  -1, 274,  -1,  -1,  -1,
+      275,  -1, 276,  -1,  -1,  -1,  -1, 277,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1, 278,  -1,  -1,  -1,  -1,
+      279,  -1,  -1,  -1, 280,  -1, 281,  -1, 282,  -1,
+       -1, 283,  -1,  -1,  -1,  -1, 284,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 285,  -1,  -1, 286,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1, 287,  -1, 288,
+       -1,  -1,  -1, 289,  -1,  -1,  -1, 290, 291,  -1,
+       -1, 292,  -1, 293,  -1, 294, 295,  -1,  -1,  -1,
+       -1,  -1,  -1, 296,  -1,  -1, 297, 298,  -1,  -1,
+      299,  -1, 300,  -1,  -1,  -1, 301,  -1,  -1,  -1,
+      302,  -1,  -1, 303,  -1, 304, 305,  -1,  -1,  -1,
+       -1,  -1,  -1, 306,  -1,  -1,  -1, 307,  -1,  -1,
+      308, 309, 310,  -1,  -1,  -1,  -1, 311, 312,  -1,
+       -1, 313, 314,  -1, 315,  -1, 316,  -1,  -1,  -1,
+       -1, 317,  -1,  -1, 318,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 319,  -1,  -1,  -1, 320,  -1,  -1, 321,
+      322,  -1,  -1,  -1,  -1,  -1, 323,  -1,  -1, 324,
+       -1,  -1, 325, 326, 327,  -1,  -1,  -1,  -1, 328,
+      329, 330,  -1, 331,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1, 332,  -1,  -1,
+      333, 334,  -1,  -1,  -1, 335,  -1,  -1, 336, 337,
+      338, 339,  -1, 340,  -1,  -1, 341,  -1,  -1,  -1,
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 155
+       -1,  -1,  -1, 342,  -1,  -1,  -1,  -1,  -1, 343,
+      344,  -1, 345,  -1, 346,  -1,  -1,  -1,  -1, 347,
+       -1,  -1,  -1, 348,  -1, 349,  -1,  -1, 350, 351,
+      352,  -1, 353, 354,  -1,  -1,  -1,  -1,  -1,  -1,
+      355, 356, 357,  -1, 358, 359,  -1, 360,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+      361,  -1,  -1,  -1, 362,  -1, 363,  -1,  -1, 364,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+      365,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+      366, 367,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1, 368,  -1, 369,
+       -1, 370, 371,  -1,  -1, 372,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 373,
+       -1,  -1,  -1,  -1, 374,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1, 375,  -1,  -1,  -1,  -1,  -1,  -1,
+      376,  -1,  -1,  -1, 377,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 378,  -1, 379,  -1, 380,  -1, 381,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1, 382,  -1, 383,  -1,  -1, 384, 385,  -1,  -1,
+       -1,  -1,  -1, 386,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1, 387,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1, 388,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1, 389,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 390,
+       -1, 391, 392, 393,  -1, 394,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 395,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 396,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 397,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1, 398,  -1, 399,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1, 400,  -1, 401,  -1,  -1,  -1, 402,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 403,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 404,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1, 405,  -1,  -1,  -1,
+       -1,  -1, 406,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1, 407,  -1,  -1,  -1,
+      408,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1, 409, 410,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1, 411,  -1,  -1,  -1,
+       -1, 412,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1, 413
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
@@ -341,10 +1124,10 @@  libc_name::libc_name_p (register const c
 
           if (index >= 0)
             {
-              register const char *s = wordlist[index];
+              register const char *s = wordlist[index].name;
 
               if (*str == *s && !strcmp (str + 1, s + 1))
-                return s;
+                return &wordlist[index];
             }
         }
     }