This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[v3] tr1/c_compatibility: cstdlib, etc.


Hi,

tested x86-linux and ia64-linux. Committed to mainline.

Paolo.

///////////////////
2006-02-07  Paolo Carlini  <pcarlini@suse.de>

	* include/tr1/cmath: New.
	* include/tr1/cstdlib: Likewise.
	* include/tr1/ctime: Likewise.
	* include/tr1/math.h: Likewise.	
	* include/tr1/stdlib.h: Likewise.
	* include/Makefile.am: Add.
	* acinclude.m4 ([GLIBCXX_CHECK_C99_TR1]): Add <math.h> checks.
	* testsuite/tr1/8_c_compatibility/cmath/functions.cc: New.
	* testsuite/tr1/8_c_compatibility/cstdlib/functions.cc: Likewise.
	* testsuite/tr1/8_c_compatibility/cstdlib/types.cc: Likewise.
	* testsuite/tr1/headers.cc: Update.	

	* include/tr1/cinttypes: Do not provide abs and div, conflicting
	with the above overloads for _Longlong types.
	* include/tr1/inttypes.h: Adjust.
	* testsuite/tr1/8_c_compatibility/cinttypes/functions.cc: Adjust.

	* docs/html/ext/tr1.html: Update.
	
	* testsuite/tr1/8_c_compatibility/cwchar/functions.cc: Tweak.

	* include/Makefile.in: Regenerate.
	* config.h.in: Likewise.
	* configure: Likewise.

Index: include/tr1/cinttypes
===================================================================
--- include/tr1/cinttypes	(revision 110693)
+++ include/tr1/cinttypes	(working copy)
@@ -56,17 +56,18 @@
 
   // functions
   using ::imaxabs;
-  
-  inline intmax_t
-  abs(intmax_t __i)
-  { return imaxabs(__i); }
 
+  // May collide with _Longlong abs(_Longlong), and is not described
+  // anywhere outside the synopsis.  Likely, a defect.
+  //
+  // intmax_t abs(intmax_t)
+
   using ::imaxdiv;
-  
-  inline imaxdiv_t
-  div(intmax_t __numer, intmax_t __denom)
-  { return imaxdiv(__numer, __denom); }
 
+  // Likewise, with lldiv_t div(_Longlong, _Longlong).
+  //
+  // imaxdiv_t div(intmax_t, intmax_t)
+
   using ::strtoimax;
   using ::strtoumax;
 
Index: include/tr1/stdlib.h
===================================================================
--- include/tr1/stdlib.h	(revision 0)
+++ include/tr1/stdlib.h	(revision 0)
@@ -0,0 +1,56 @@
+// TR1 stdlib.h -*- C++ -*-
+
+// Copyright (C) 2006 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This 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 General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+/** @file 
+ *  This is a TR1 C++ Library header. 
+ */
+
+#ifndef _TR1_STDLIB_H
+#define _TR1_STDLIB_H 1
+
+#include <tr1/cstdlib>
+
+#if _GLIBCXX_HOSTED
+
+#if _GLIBCXX_USE_C99
+
+using std::tr1::atoll;
+using std::tr1::strtoll;
+using std::tr1::strtoull;
+
+using std::tr1::abs;
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+using std::tr1::div;
+#endif
+
+#endif
+
+#endif
+
+#endif
Index: include/tr1/math.h
===================================================================
--- include/tr1/math.h	(revision 0)
+++ include/tr1/math.h	(revision 0)
@@ -0,0 +1,39 @@
+// TR1 math.h -*- C++ -*-
+
+// Copyright (C) 2006 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This 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 General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+/** @file 
+ *  This is a TR1 C++ Library header. 
+ */
+
+#ifndef _TR1_MATH_H
+#define _TR1_MATH_H 1
+
+#include <tr1/cmath>
+
+#endif
Index: include/tr1/cstdlib
===================================================================
--- include/tr1/cstdlib	(revision 0)
+++ include/tr1/cstdlib	(revision 0)
@@ -0,0 +1,79 @@
+// TR1 cstdlib -*- C++ -*-
+
+// Copyright (C) 2006 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This 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 General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+/** @file 
+ *  This is a TR1 C++ Library header. 
+ */
+
+#ifndef _TR1_CSTDLIB
+#define _TR1_CSTDLIB 1
+
+#include <bits/c++config.h>
+
+#if _GLIBCXX_HOSTED
+
+#include <cstdlib>
+
+// namespace std::tr1
+namespace std
+{
+_GLIBCXX_BEGIN_NAMESPACE(tr1)
+
+#if _GLIBCXX_USE_C99
+
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+  // types
+  using std::lldiv_t;
+
+  // functions
+  using std::llabs;
+  using std::lldiv;
+#endif
+
+  using std::atoll;
+  using std::strtoll;
+  using std::strtoull;
+
+  using std::strtof;
+  using std::strtold;
+
+  // overloads
+  using std::abs;
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+  using std::div;
+#endif
+
+#endif
+
+_GLIBCXX_END_NAMESPACE
+}
+
+#endif
+
+#endif
Index: include/tr1/cmath
===================================================================
--- include/tr1/cmath	(revision 0)
+++ include/tr1/cmath	(revision 0)
@@ -0,0 +1,298 @@
+// TR1 cmath -*- C++ -*-
+
+// Copyright (C) 2006 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This 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 General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+/** @file 
+ *  This is a TR1 C++ Library header. 
+ */
+
+#ifndef _TR1_CMATH
+#define _TR1_CMATH 1
+
+#include <bits/c++config.h>
+#include <cmath>
+
+#if _GLIBCXX_USE_C99_MATH_TR1
+
+#undef acosh
+#undef acoshf
+#undef acoshl
+#undef asinh
+#undef asinhf
+#undef asinhl
+#undef atanh
+#undef atanhf
+#undef atanhl
+#undef cbrt
+#undef cbrtf
+#undef cbrtl
+#undef copysign
+#undef copysignf
+#undef copysignl
+#undef erf
+#undef erff
+#undef erfl
+#undef erfc
+#undef erfcf
+#undef erfcl
+#undef exp2
+#undef exp2f
+#undef exp2l
+#undef expm1
+#undef expm1f
+#undef expm1l
+#undef fdim
+#undef fdimf
+#undef fdiml
+#undef fma
+#undef fmaf
+#undef fmal
+#undef fmax
+#undef fmaxf
+#undef fmaxl
+#undef fmin
+#undef fminf
+#undef fminl
+#undef hypot
+#undef hypotf
+#undef hypotl
+#undef ilogb
+#undef ilogbf
+#undef ilogbl
+#undef lgamma
+#undef lgammaf
+#undef lgammal
+#undef llrint
+#undef llrintf
+#undef llrintl
+#undef llround
+#undef llroundf
+#undef llroundl
+#undef log1p
+#undef log1pf
+#undef log1pl
+#undef log2
+#undef log2f
+#undef log2l
+#undef logb
+#undef logbf
+#undef logbl
+#undef lrint
+#undef lrintf
+#undef lrintl
+#undef lround
+#undef lroundf
+#undef lroundl
+#undef nan
+#undef nanf
+#undef nanl
+#undef nearbyint
+#undef nearbyintf
+#undef nearbyintl
+#undef nextafter
+#undef nextafterf
+#undef nextafterl
+#undef nexttoward
+#undef nexttowardf
+#undef nexttowardl
+#undef remainder
+#undef remainderf
+#undef remainderl
+#undef remquo
+#undef remquo
+#undef remquo
+#undef rint
+#undef rintf
+#undef rintl
+#undef round
+#undef roundf
+#undef roundl
+#undef scalbln
+#undef scalblnf
+#undef scalblnl
+#undef scalbn
+#undef scalbnf
+#undef scalbnl
+#undef tgamma
+#undef tgammaf
+#undef tgammal
+#undef trunc
+#undef truncf
+#undef truncl
+
+// namespace std::tr1
+namespace std
+{
+_GLIBCXX_BEGIN_NAMESPACE(tr1)
+
+  using ::acosh;
+  using ::acoshf;
+  using ::acoshl;
+
+  using ::asinh;
+  using ::asinhf;
+  using ::asinhl;
+
+  using ::atanh;
+  using ::atanhf;
+  using ::atanhl;
+
+  using ::cbrt;
+  using ::cbrtf;
+  using ::cbrtl;
+
+  using ::copysign;
+  using ::copysignf;
+  using ::copysignl;
+
+  using ::erf;
+  using ::erff;
+  using ::erfl;
+
+  using ::erfc;
+  using ::erfcf;
+  using ::erfcl;
+
+  using ::exp2;
+  using ::exp2f;
+  using ::exp2l;
+
+  using ::expm1;
+  using ::expm1f;
+  using ::expm1l;
+
+  using ::fdim;
+  using ::fdimf;
+  using ::fdiml;
+
+  using ::fma;
+  using ::fmaf;
+  using ::fmal;
+
+  using ::fmax;
+  using ::fmaxf;
+  using ::fmaxl;
+
+  using ::fmin;
+  using ::fminf;
+  using ::fminl;
+
+  using ::hypot;
+  using ::hypotf;
+  using ::hypotl;
+
+  using ::ilogb;
+  using ::ilogbf;
+  using ::ilogbl;
+
+  using ::lgamma;
+  using ::lgammaf;
+  using ::lgammal;
+
+  using ::llrint;
+  using ::llrintf;
+  using ::llrintl;
+
+  using ::llround;
+  using ::llroundf;
+  using ::llroundl;
+
+  using ::log1p;
+  using ::log1pf;
+  using ::log1pl;
+
+  using ::log2;
+  using ::log2f;
+  using ::log2l;
+
+  using ::logb;
+  using ::logbf;
+  using ::logbl;
+
+  using ::lrint;
+  using ::lrintf;
+  using ::lrintl;
+
+  using ::lround;
+  using ::lroundf;
+  using ::lroundl;
+
+  using ::nan;
+  using ::nanf;
+  using ::nanl;
+
+  using ::nearbyint;
+  using ::nearbyintf;
+  using ::nearbyintl;
+
+  using ::nextafter;
+  using ::nextafterf;
+  using ::nextafterl;
+
+  using ::nexttoward;
+  using ::nexttowardf;
+  using ::nexttowardl;
+
+  using ::remainder;
+  using ::remainderf;
+  using ::remainderl;
+
+  using ::remquo;
+  using ::remquo;
+  using ::remquo;
+
+  using ::rint;
+  using ::rintf;
+  using ::rintl;
+
+  using ::round;
+  using ::roundf;
+  using ::roundl;
+
+  using ::scalbln;
+  using ::scalblnf;
+  using ::scalblnl;
+
+  using ::scalbn;
+  using ::scalbnf;
+  using ::scalbnl;
+
+  using ::tgamma;
+  using ::tgammaf;
+  using ::tgammal;
+
+  using ::trunc;
+  using ::truncf;
+  using ::truncl;
+
+_GLIBCXX_END_NAMESPACE
+}
+
+#endif
+
+#endif
Index: include/tr1/ctime
===================================================================
--- include/tr1/ctime	(revision 0)
+++ include/tr1/ctime	(revision 0)
@@ -0,0 +1,39 @@
+// TR1 ctime -*- C++ -*-
+
+// Copyright (C) 2006 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This 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 General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+/** @file 
+ *  This is a TR1 C++ Library header. 
+ */
+
+#ifndef _TR1_CTIME
+#define _TR1_CTIME 1
+
+#include <ctime>
+
+#endif
Index: include/tr1/inttypes.h
===================================================================
--- include/tr1/inttypes.h	(revision 110693)
+++ include/tr1/inttypes.h	(working copy)
@@ -36,11 +36,4 @@
 
 #include <tr1/cinttypes>
 
-#if _GLIBCXX_USE_C99_INTTYPES_TR1
-
-using std::tr1::abs;
-using std::tr1::div;
-
 #endif
-
-#endif
Index: include/Makefile.am
===================================================================
--- include/Makefile.am	(revision 110693)
+++ include/Makefile.am	(working copy)
@@ -489,11 +489,14 @@
 	${tr1_srcdir}/cfloat \
 	${tr1_srcdir}/cinttypes \
 	${tr1_srcdir}/climits \
+	${tr1_srcdir}/cmath \
 	${tr1_srcdir}/common.h \
 	${tr1_srcdir}/complex \
 	${tr1_srcdir}/cstdarg \
 	${tr1_srcdir}/cstdint \
 	${tr1_srcdir}/cstdio \
+	${tr1_srcdir}/cstdlib \
+	${tr1_srcdir}/ctime \
 	${tr1_srcdir}/ctype.h \
 	${tr1_srcdir}/cwchar \
 	${tr1_srcdir}/cwctype \
@@ -504,6 +507,7 @@
 	${tr1_srcdir}/hashtable \
 	${tr1_srcdir}/inttypes.h \
 	${tr1_srcdir}/limits.h \
+	${tr1_srcdir}/math.h \
 	${tr1_srcdir}/memory \
 	${tr1_srcdir}/mu_iterate.h \
 	${tr1_srcdir}/ref_fwd.h \
@@ -512,6 +516,7 @@
 	${tr1_srcdir}/stdarg.h \
 	${tr1_srcdir}/stdint.h \
 	${tr1_srcdir}/stdio.h \
+	${tr1_srcdir}/stdlib.h \
 	${tr1_srcdir}/tuple \
 	${tr1_srcdir}/tuple_iterate.h \
 	${tr1_srcdir}/type_traits \
Index: docs/html/ext/tr1.html
===================================================================
--- docs/html/ext/tr1.html	(revision 110693)
+++ docs/html/ext/tr1.html	(working copy)
@@ -1918,7 +1918,7 @@
       <td>done</td>
       <td></td>
       <td></td>
-      <td></td>
+      <td>abs, div: issue with _Longlong</td>
     </tr>
     <tr>
       <td>8.11.2</td>
@@ -2115,49 +2115,49 @@
     <tr>
       <td>8.25</td>
       <td>Additions to header <code>&lt;cstdlib&gt;</code></td>
+      <td>done</td>
       <td></td>
       <td></td>
-      <td>missing</td>
       <td></td>
     </tr>
     <tr>
       <td>8.25.1</td>
       <td>Synopsis</td>
+      <td>done</td>
       <td></td>
       <td></td>
-      <td>missing</td>
       <td></td>
     </tr>
     <tr>
       <td>8.25.2</td>
       <td>Definitions</td>
+      <td>done</td>
       <td></td>
       <td></td>
-      <td>missing</td>
       <td></td>
     </tr>
     <tr>
       <td>8.25.3</td>
       <td>Function <code>abs</code></td>
+      <td>done</td>
       <td></td>
       <td></td>
-      <td>missing</td>
       <td></td>
     </tr>
     <tr>
       <td>8.25.4</td>
       <td>Function <code>div</code></td>
+      <td>done</td>
       <td></td>
       <td></td>
-      <td>missing</td>
       <td></td>
     </tr>
     <tr>
       <td>8.26</td>
       <td>Additions to header <code>&lt;stdlib.h&gt;</code></td>
+      <td>done</td>
       <td></td>
       <td></td>
-      <td>missing</td>
       <td></td>
     </tr>
     <tr>
@@ -2179,10 +2179,10 @@
     <tr>
       <td>8.29</td>
       <td>Additions to header <code>&lt;ctime&gt;</code></td>
+      <td>done</td>
       <td></td>
       <td></td>
-      <td>missing</td>
-      <td></td>
+      <td>C library responsability</td>
     </tr>
     <tr>
       <td>8.30</td>
@@ -2307,7 +2307,7 @@
 <table width="100%" border="0">
 <tr>
   <td>
-    <!-- IGNORE DIFF -->Last modified 2006-02-05
+    <!-- IGNORE DIFF -->Last modified 2006-02-07
   </td>
   <td align="right" valign="bottom">
     <a href="http://validator.w3.org/check/referer";>
Index: testsuite/tr1/headers.cc
===================================================================
--- testsuite/tr1/headers.cc	(revision 110693)
+++ testsuite/tr1/headers.cc	(working copy)
@@ -26,10 +26,13 @@
 #include <tr1/cfloat>
 #include <tr1/cinttypes>
 #include <tr1/climits>
+#include <tr1/cmath>
 #include <tr1/complex>
 #include <tr1/cstdarg>
 #include <tr1/cstdint>
 #include <tr1/cstdio>
+#include <tr1/cstdlib>
+#include <tr1/ctime>
 #include <tr1/ctype.h>
 #include <tr1/cwchar>
 #include <tr1/cwctype>
@@ -39,10 +42,12 @@
 #include <tr1/hashtable>
 #include <tr1/inttypes.h>
 #include <tr1/limits.h>
+#include <tr1/math.h>
 #include <tr1/memory>
 #include <tr1/stdarg.h>
 #include <tr1/stdint.h>
 #include <tr1/stdio.h>
+#include <tr1/stdlib.h>
 #include <tr1/tuple>
 #include <tr1/type_traits>
 #include <tr1/unordered_set>
Index: testsuite/tr1/8_c_compatibility/cinttypes/functions.cc
===================================================================
--- testsuite/tr1/8_c_compatibility/cinttypes/functions.cc	(revision 110693)
+++ testsuite/tr1/8_c_compatibility/cinttypes/functions.cc	(working copy)
@@ -41,10 +41,10 @@
   std::tr1::imaxdiv_t dret;
 
   ret = std::tr1::imaxabs(i);
-  ret = std::tr1::abs(i);
+  // ret = std::tr1::abs(i);
 
   dret = std::tr1::imaxdiv(numer, denom);
-  dret = std::tr1::div(numer, denom);
+  // dret = std::tr1::div(numer, denom);
 
   ret = std::tr1::strtoimax(s, endptr, base);
   uret = std::tr1::strtoumax(s, endptr, base);
Index: testsuite/tr1/8_c_compatibility/cstdlib/types.cc
===================================================================
--- testsuite/tr1/8_c_compatibility/cstdlib/types.cc	(revision 0)
+++ testsuite/tr1/8_c_compatibility/cstdlib/types.cc	(revision 0)
@@ -0,0 +1,38 @@
+// { dg-do compile }
+
+// 2006-02-07  Paolo Carlini  <pcarlini@suse.de>
+//
+// Copyright (C) 2006 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 8.25 Additions to header <cstdlib>
+
+#include <tr1/cstdlib>
+
+#if _GLIBCXX_HOSTED
+
+void test01()
+{
+#if _GLIBCXX_USE_C99
+
+  typedef std::tr1::lldiv_t     my_lldiv_t;
+  
+#endif
+}
+
+#endif
Index: testsuite/tr1/8_c_compatibility/cstdlib/functions.cc
===================================================================
--- testsuite/tr1/8_c_compatibility/cstdlib/functions.cc	(revision 0)
+++ testsuite/tr1/8_c_compatibility/cstdlib/functions.cc	(revision 0)
@@ -0,0 +1,66 @@
+// { dg-do compile }
+
+// 2006-02-07  Paolo Carlini  <pcarlini@suse.de>
+//
+// Copyright (C) 2006 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 8.25 Additions to header <cstdlib>
+
+#include <tr1/cstdlib>
+
+#if _GLIBCXX_HOSTED
+
+void test01()
+{
+#if _GLIBCXX_USE_C99
+
+  long long i = 0;
+  const char* s = 0;
+  char** endptr = 0;
+  int base = 0;
+
+  long long ret;
+  unsigned long long uret;
+  float fret;
+  long double ldret;
+
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+  long long numer = 0, denom = 0;
+  std::tr1::lldiv_t dret;
+
+  ret = std::tr1::llabs(i);
+  dret = std::tr1::lldiv(numer, denom);
+#endif
+
+  ret = std::tr1::atoll(s);
+  ret = std::tr1::strtoll(s, endptr, base);
+  uret = std::tr1::strtoull(s, endptr, base);
+
+  fret = std::tr1::strtof(s, endptr);
+  ldret = std::tr1::strtold(s, endptr);
+
+  ret = std::tr1::abs(i);
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+  dret = std::tr1::div(numer, denom);
+#endif
+
+#endif
+}
+
+#endif
Index: testsuite/tr1/8_c_compatibility/cwchar/functions.cc
===================================================================
--- testsuite/tr1/8_c_compatibility/cwchar/functions.cc	(revision 110693)
+++ testsuite/tr1/8_c_compatibility/cwchar/functions.cc	(working copy)
@@ -67,15 +67,11 @@
   long double ldret;
   ldret = std::tr1::wcstold(nptr2, endptr2);
 
-#ifdef _GLIBCXX_USE_LONG_LONG
-  const wchar_t* nptr3 = 0;
-  wchar_t** endptr3 = 0;
   int base = 0;
   long long llret;
   unsigned long long ullret;
-  llret = std::tr1::wcstoll(nptr3, endptr3, base);
-  ullret = std::tr1::wcstoull(nptr3, endptr3, base);
-#endif
+  llret = std::tr1::wcstoll(nptr2, endptr2, base);
+  ullret = std::tr1::wcstoull(nptr2, endptr2, base);
 
 #endif
 }
Index: testsuite/tr1/8_c_compatibility/cmath/functions.cc
===================================================================
--- testsuite/tr1/8_c_compatibility/cmath/functions.cc	(revision 0)
+++ testsuite/tr1/8_c_compatibility/cmath/functions.cc	(revision 0)
@@ -0,0 +1,187 @@
+// { dg-do compile }
+
+// 2006-02-07  Paolo Carlini  <pcarlini@suse.de>
+//
+// Copyright (C) 2006 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 8.16 Additions to header <cmath>
+
+#include <tr1/cmath>
+
+void test01()
+{
+#if _GLIBCXX_USE_C99_MATH_TR1
+
+  double d0 = 0.0;
+  float f0 = 0.0f;
+  long double ld0 = 0.0l;
+  const char* str = "NAN";
+  int* pquo = 0;
+  long lex = 0l;
+  int ex = 0;
+
+  double ret;
+  float fret;
+  long double ldret;
+  int iret;
+  long lret;
+  long long llret;
+
+  ret = acosh(d0);
+  fret = acoshf(f0);
+  ldret = acoshl(ld0);
+
+  ret = asinh(d0);
+  fret = asinhf(f0);
+  ldret = asinhl(ld0);
+
+  ret = atanh(d0);
+  fret = atanhf(f0);
+  ldret = atanhl(ld0);
+
+  ret = cbrt(d0);
+  fret = cbrtf(f0);
+  ldret = cbrtl(ld0);
+
+  ret = copysign(d0, d0);
+  fret = copysignf(f0, f0);
+  ldret = copysignl(ld0, ld0);
+
+  ret = erf(d0);
+  fret = erff(f0);
+  ldret = erfl(ld0);
+
+  ret = erfc(d0);
+  fret = erfcf(f0);
+  ldret = erfcl(ld0);
+
+  ret = exp2(d0);
+  fret = exp2f(f0);
+  ldret = exp2l(ld0);
+
+  ret = expm1(d0);
+  fret = expm1f(f0);
+  ldret = expm1l(ld0);
+
+  ret = fdim(d0, d0);
+  fret = fdimf(f0, f0);
+  ldret = fdiml(ld0, ld0);
+
+  ret = fma(d0, d0, d0);
+  fret = fmaf(f0, f0, f0);
+  ldret = fmal(ld0, ld0, ld0);
+
+  ret = fmax(d0, d0);
+  fret = fmaxf(f0, f0);
+  ldret = fmaxl(ld0, ld0);
+
+  ret = fmin(d0, d0);
+  fret = fminf(f0, f0);
+  ldret = fminl(ld0, ld0);
+
+  ret = hypot(d0, d0);
+  fret = hypotf(f0, f0);
+  ldret = hypotl(ld0, ld0);
+
+  iret = ilogb(d0);
+  iret = ilogbf(f0);
+  iret = ilogbl(ld0);
+
+  ret = lgamma(d0);
+  fret = lgammaf(f0);
+  ldret = lgammal(ld0);
+
+  llret = llrint(d0);
+  llret = llrintf(f0);
+  llret = llrintl(ld0);
+
+  llret = llround(d0);
+  llret = llroundf(f0);
+  llret = llroundl(ld0);
+
+  ret = log1p(d0);
+  fret = log1pf(f0);
+  ldret = log1pl(ld0);
+
+  ret = log2(d0);
+  fret = log2f(f0);
+  ldret = log2l(ld0);
+
+  ret = logb(d0);
+  fret = logbf(f0);
+  ldret = logbl(ld0);
+
+  lret = lrint(d0);
+  lret = lrintf(f0);
+  lret = lrintl(ld0);
+
+  lret = lround(d0);
+  lret = lroundf(f0);
+  lret = lroundl(ld0);
+
+  ret = nan(str);
+  fret = nanf(str);
+  ldret = nanl(str);
+
+  ret = nearbyint(d0);
+  fret = nearbyintf(f0);
+  ldret = nearbyintl(ld0);
+
+  ret = nextafter(d0, d0);
+  fret = nextafterf(f0, f0);
+  ldret = nextafterl(ld0, ld0);
+
+  ret = nexttoward(d0, d0);
+  fret = nexttowardf(f0, f0);
+  ldret = nexttowardl(ld0, ld0);
+
+  ret = remainder(d0, d0);
+  fret = remainderf(f0, f0);
+  ldret = remainderl(ld0, ld0);
+
+  ret = remquo(d0, d0, pquo);
+  fret = remquo(f0, f0, pquo);
+  ldret = remquo(ld0, ld0, pquo);
+
+  ret = rint(d0);
+  fret = rintf(f0);
+  ldret = rintl(ld0);
+
+  ret = round(d0);
+  fret = roundf(f0);
+  ldret = roundl(ld0);
+
+  ret = scalbln(d0, lex);
+  fret = scalblnf(f0, lex);
+  ldret = scalblnl(ld0, lex);
+
+  ret = scalbn(d0, ex);
+  fret = scalbnf(f0, ex);
+  ldret = scalbnl(ld0, ex);
+
+  ret = tgamma(d0);
+  fret = tgammaf(f0);
+  ldret = tgammal(ld0);
+
+  ret = trunc(d0);
+  fret = truncf(f0);
+  ldret = truncl(ld0);
+  
+#endif
+}
Index: acinclude.m4
===================================================================
--- acinclude.m4	(revision 110693)
+++ acinclude.m4	(working copy)
@@ -1181,6 +1181,124 @@
 	      <tr1/cstdint> in namespace std::tr1.])
   fi
 
+  # Check for the existence of <math.h> functions.
+  AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
+  AC_CACHE_VAL(ac_c99_math_tr1, [
+  AC_TRY_COMPILE([#include <math.h>],
+	         [acosh(0.0);
+	          acoshf(0.0f);
+	          acoshl(0.0l);
+	          asinh(0.0);
+	          asinhf(0.0f);
+	          asinhl(0.0l);
+	          atanh(0.0);
+	          atanhf(0.0f);
+	          atanhl(0.0l);
+	          cbrt(0.0);
+	          cbrtf(0.0f);
+	          cbrtl(0.0l);
+	          copysign(0.0, 0.0);
+	          copysignf(0.0f, 0.0f);
+	          copysignl(0.0l, 0.0l);
+	          erf(0.0);
+	          erff(0.0f);
+	          erfl(0.0l);
+	          erfc(0.0);
+	          erfcf(0.0f);
+	          erfcl(0.0l);
+	          exp2(0.0);
+	          exp2f(0.0f);
+	          exp2l(0.0l);
+	          expm1(0.0);
+	          expm1f(0.0f);
+	          expm1l(0.0l);
+	          fdim(0.0, 0.0);
+	          fdimf(0.0f, 0.0f);
+	          fdiml(0.0l, 0.0l);
+	          fma(0.0, 0.0, 0.0);
+	          fmaf(0.0f, 0.0f, 0.0f);
+	          fmal(0.0l, 0.0l, 0.0l);
+	          fmax(0.0, 0.0);
+	          fmaxf(0.0f, 0.0f);
+	          fmaxl(0.0l, 0.0l);
+	          fmin(0.0, 0.0);
+	          fminf(0.0f, 0.0f);
+	          fminl(0.0l, 0.0l);
+	          hypot(0.0, 0.0);
+	          hypotf(0.0f, 0.0f);
+	          hypotl(0.0l, 0.0l);
+	          ilogb(0.0);
+	          ilogbf(0.0f);
+	          ilogbl(0.0l);
+	          lgamma(0.0);
+	          lgammaf(0.0f);
+	          lgammal(0.0l);
+	          llrint(0.0);
+	          llrintf(0.0f);
+	          llrintl(0.0l);
+	          llround(0.0);
+	          llroundf(0.0f);
+	          llroundl(0.0l);
+	          log1p(0.0);
+	          log1pf(0.0f);
+	          log1pl(0.0l);
+	          log2(0.0);
+	          log2f(0.0f);
+	          log2l(0.0l);
+	          logb(0.0);
+	          logbf(0.0f);
+	          logbl(0.0l);
+	          lrint(0.0);
+	          lrintf(0.0f);
+	          lrintl(0.0l);
+	          lround(0.0);
+	          lroundf(0.0f);
+	          lroundl(0.0l);
+	          nan(0);
+	          nanf(0);
+	          nanl(0);
+	          nearbyint(0.0);
+	          nearbyintf(0.0f);
+	          nearbyintl(0.0l);
+	          nextafter(0.0, 0.0);
+	          nextafterf(0.0f, 0.0f);
+	          nextafterl(0.0l, 0.0l);
+	          nexttoward(0.0, 0.0);
+	          nexttowardf(0.0f, 0.0f);
+	          nexttowardl(0.0l, 0.0l);
+	          remainder(0.0, 0.0);
+	          remainderf(0.0f, 0.0f);
+	          remainderl(0.0l, 0.0l);
+	          remquo(0.0, 0.0, 0);
+	          remquo(0.0f, 0.0f, 0);
+	          remquo(0.0l, 0.0l, 0);
+	          rint(0.0);
+	          rintf(0.0f);
+	          rintl(0.0l);
+	          round(0.0);
+	          roundf(0.0f);
+	          roundl(0.0l);
+	          scalbln(0.0, 0l);
+	          scalblnf(0.0f, 0l);
+	          scalblnl(0.0l, 0l);
+	          scalbn(0.0, 0);
+	          scalbnf(0.0f, 0);
+	          scalbnl(0.0l, 0);
+	          tgamma(0.0);
+	          tgammaf(0.0f);
+	          tgammal(0.0l);
+	          trunc(0.0);
+	          truncf(0.0f);
+	          truncl(0.0l);
+		 ],[ac_c99_math_tr1=yes], [ac_c99_math_tr1=no])
+  ])
+  AC_MSG_RESULT($ac_c99_math_tr1)
+  if test x"$ac_c99_math_tr1" = x"yes"; then
+    AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
+              [Define if C99 functions or macros in <math.h> should be imported
+              in <tr1/cmath> in namespace std::tr1.])
+  fi
+
   # Check for the existence of <inttypes.h> functions (NB: doesn't make
   # sense if the previous check fails, per C99, 7.8/1).
   ac_c99_inttypes_tr1=no;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]