From 9c594837086fc3e80adfa989de0a494391ff39a6 Mon Sep 17 00:00:00 2001 From: "Loren J. Rittle" Date: Fri, 18 Apr 2003 09:53:58 +0000 Subject: [PATCH] porting.texi (_GLIBCPP_USE_C99_CHECK): New macro. * docs/html/17_intro/porting.texi (_GLIBCPP_USE_C99_CHECK): New macro. (_GLIBCPP_USE_C99_DYNAMIC): New macro. (_GLIBCPP_USE_C99_LONG_LONG_CHECK): New macro. (_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC): New macro. * config/os/bsd/freebsd/os_defines.h (_GLIBCPP_USE_C99_CHECK): New macro. (_GLIBCPP_USE_C99_DYNAMIC): New macro. (_GLIBCPP_USE_C99_LONG_LONG_CHECK): New macro. (_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC): New macro. * include/c_std/std_cstdlib.h: Use new macros. * include/c_std/std_cstdio.h: Use new macros. * include/c_std/std_cwchar.h: Use new macros. From-SVN: r65778 --- libstdc++-v3/ChangeLog | 13 ++++++++++ .../config/os/bsd/freebsd/os_defines.h | 4 +++ libstdc++-v3/docs/html/17_intro/porting.texi | 22 ++++++++++++++++ libstdc++-v3/include/c_std/std_cstdio.h | 15 ++++++++++- libstdc++-v3/include/c_std/std_cstdlib.h | 26 +++++++++++++++++-- libstdc++-v3/include/c_std/std_cwchar.h | 16 +++++++++++- 6 files changed, 92 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 0237c4a421c..8cba854cc5e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -3,6 +3,19 @@ * include/c_std/std_cmath.h (C99 FP capture): Only undefine said C99 FP macros, if actually captured. + * docs/html/17_intro/porting.texi (_GLIBCPP_USE_C99_CHECK): New macro. + (_GLIBCPP_USE_C99_DYNAMIC): New macro. + (_GLIBCPP_USE_C99_LONG_LONG_CHECK): New macro. + (_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC): New macro. + * config/os/bsd/freebsd/os_defines.h (_GLIBCPP_USE_C99_CHECK): + New macro. + (_GLIBCPP_USE_C99_DYNAMIC): New macro. + (_GLIBCPP_USE_C99_LONG_LONG_CHECK): New macro. + (_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC): New macro. + * include/c_std/std_cstdlib.h: Use new macros. + * include/c_std/std_cstdio.h: Use new macros. + * include/c_std/std_cwchar.h: Use new macros. + 2003-04-17 Benjamin Kosnik PR libstdc++/9555 diff --git a/libstdc++-v3/config/os/bsd/freebsd/os_defines.h b/libstdc++-v3/config/os/bsd/freebsd/os_defines.h index 806add6a154..55040a7ac4b 100644 --- a/libstdc++-v3/config/os/bsd/freebsd/os_defines.h +++ b/libstdc++-v3/config/os/bsd/freebsd/os_defines.h @@ -34,6 +34,10 @@ // System-specific #define, typedefs, corrections, etc, go here. This // file will come before all others. +#define _GLIBCPP_USE_C99_CHECK 1 +#define _GLIBCPP_USE_C99_DYNAMIC (!(__ISO_C_VISIBLE >= 1999)) +#define _GLIBCPP_USE_C99_LONG_LONG_CHECK 1 +#define _GLIBCPP_USE_C99_LONG_LONG_DYNAMIC (_GLIBCPP_USE_C99_DYNAMIC || !defined __LONG_LONG_SUPPORTED) #define _GLIBCPP_USE_C99_FLOAT_TRANSCENDENTALS_CHECK 1 #define _GLIBCPP_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC defined _XOPEN_SOURCE diff --git a/libstdc++-v3/docs/html/17_intro/porting.texi b/libstdc++-v3/docs/html/17_intro/porting.texi index bafa62d1d19..6f3618c637d 100644 --- a/libstdc++-v3/docs/html/17_intro/porting.texi +++ b/libstdc++-v3/docs/html/17_intro/porting.texi @@ -156,6 +156,28 @@ port doesn't use thunks (although it is unclear that this is still useful since libio support isn't currently working and the g++ v3 ABI invalidates the assumption that some ports don't use thunks). +@code{_GLIBCPP_USE_C99_CHECK} may be defined to 1 to check C99 +function declarations (which are not covered by specialization below) +found in system headers against versions found in the library headers +derived from the standard. + +@code{_GLIBCPP_USE_C99_DYNAMIC} may be defined to an expression that +yields 0 if and only if the system headers are exposing proper support +for C99 functions (which are not covered by specialization below). If +defined, it must be 0 while bootstrapping the compiler/rebuilding the +library. + +@code{_GLIBCPP_USE_C99_LONG_LONG_CHECK} may be defined to 1 to check +the set of C99 long long function declarations found in system headers +against versions found in the library headers derived from the +standard. + +@code{_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC} may be defined to an +expression that yields 0 if and only if the system headers are +exposing proper support for the set of C99 long long functions. If +defined, it must be 0 while bootstrapping the compiler/rebuilding the +library. + @code{_GLIBCPP_USE_C99_FP_MACROS_DYNAMIC} may be defined to an expression that yields 0 if and only if the system headers are exposing proper support for the related set of macros. If defined, diff --git a/libstdc++-v3/include/c_std/std_cstdio.h b/libstdc++-v3/include/c_std/std_cstdio.h index 6fb8c79fb3d..3b4a6856739 100644 --- a/libstdc++-v3/include/c_std/std_cstdio.h +++ b/libstdc++-v3/include/c_std/std_cstdio.h @@ -1,6 +1,6 @@ // -*- C++ -*- forwarding header. -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -152,11 +152,24 @@ namespace std namespace __gnu_cxx { +#if _GLIBCPP_USE_C99_CHECK || _GLIBCPP_USE_C99_DYNAMIC + extern "C" int + (snprintf)(char * restrict, size_t, const char * restrict, ...); + extern "C" int + (vfscanf)(FILE * restrict, const char * restrict, __gnuc_va_list); + extern "C" int (vscanf)(const char * restrict, __gnuc_va_list); + extern "C" int + (vsnprintf)(char * restrict, size_t, const char * restrict, __gnuc_va_list); + extern "C" int + (vsscanf)(const char * restrict, const char * restrict, __gnuc_va_list); +#endif +#if !_GLIBCPP_USE_C99_DYNAMIC using ::snprintf; using ::vfscanf; using ::vscanf; using ::vsnprintf; using ::vsscanf; +#endif } namespace std diff --git a/libstdc++-v3/include/c_std/std_cstdlib.h b/libstdc++-v3/include/c_std/std_cstdlib.h index 70fc8d3452e..e1436be1d7a 100644 --- a/libstdc++-v3/include/c_std/std_cstdlib.h +++ b/libstdc++-v3/include/c_std/std_cstdlib.h @@ -1,6 +1,6 @@ // -*- C++ -*- forwarding header. -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -135,8 +135,15 @@ namespace std namespace __gnu_cxx { +#if !_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC using ::lldiv_t; +#endif +#if _GLIBCPP_USE_C99_CHECK || _GLIBCPP_USE_C99_DYNAMIC + extern "C" void (_Exit)(int); +#endif +#if !_GLIBCPP_USE_C99_DYNAMIC using ::_Exit; +#endif inline long long abs(long long __x) { return __x >= 0 ? __x : -__x; } @@ -144,6 +151,7 @@ namespace __gnu_cxx inline long long llabs(long long __x) { return __x >= 0 ? __x : -__x; } +#if !_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC inline lldiv_t div(long long __n, long long __d) { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } @@ -151,22 +159,36 @@ namespace __gnu_cxx inline lldiv_t lldiv(long long __n, long long __d) { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } +#endif +#if _GLIBCPP_USE_C99_LONG_LONG_CHECK || _GLIBCPP_USE_C99_LONG_LONG_DYNAMIC + extern "C" long long int (atoll)(const char *); + extern "C" long long int + (strtoll)(const char * restrict, char ** restrict, int); + extern "C" unsigned long long int + (strtoull)(const char * restrict, char ** restrict, int); +#endif +#if !_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC using ::atoll; - using ::strtof; using ::strtoll; using ::strtoull; +#endif + using ::strtof; using ::strtold; } namespace std { +#if !_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC using __gnu_cxx::lldiv_t; +#endif using __gnu_cxx::_Exit; using __gnu_cxx::abs; using __gnu_cxx::llabs; +#if !_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC using __gnu_cxx::div; using __gnu_cxx::lldiv; +#endif using __gnu_cxx::atoll; using __gnu_cxx::strtof; using __gnu_cxx::strtoll; diff --git a/libstdc++-v3/include/c_std/std_cwchar.h b/libstdc++-v3/include/c_std/std_cwchar.h index f67f00610f5..8b33c52282f 100644 --- a/libstdc++-v3/include/c_std/std_cwchar.h +++ b/libstdc++-v3/include/c_std/std_cwchar.h @@ -1,6 +1,6 @@ // -*- C++ -*- forwarding header. -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -225,9 +225,23 @@ namespace std namespace __gnu_cxx { +#if _GLIBCPP_USE_C99_CHECK || _GLIBCPP_USE_C99_DYNAMIC + extern "C" long double + (wcstold)(const wchar_t * restrict, wchar_t ** restrict); +#endif +#if !_GLIBCPP_USE_C99_DYNAMIC using ::wcstold; +#endif +#if _GLIBCPP_USE_C99_LONG_LONG_CHECK || _GLIBCPP_USE_C99_LONG_LONG_DYNAMIC + extern "C" long long int + (wcstoll)(const wchar_t * restrict, wchar_t ** restrict, int); + extern "C" unsigned long long int + (wcstoull)(const wchar_t * restrict, wchar_t ** restrict, int); +#endif +#if !_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC using ::wcstoll; using ::wcstoull; +#endif } namespace std