re PR libstdc++/31481 (GCC 4.2.0 incompatible with STLport 5.1.3)

2007-04-07  Paolo Carlini  <pcarlini@suse.de>

	PR libstdc++/31481
	* include/ext/type_traits.h (__numeric_traits): Move...
	* include/ext/numeric_traits.h: ... here; fix type of
	__max_digits10.
	* include/Makefile.am: Add.
	* include/ext/pb_ds/detail/type_utils.hpp: Include 
	<ext/numeric_traits.h> too.
	* include/tr1/random: Likewise.
	* testsuite/ext/type_traits/numeric_traits.cc: Move...
	* testsuite/ext/numeric_traits/numeric_traits.cc: ... here.
	* include/Makefile.in: Regenerate.
	* testsuite/ext/type_traits/remove_unsigned_integer_neg.cc:
	Adjust dg-error line number.
	* testsuite/ext/type_traits/add_unsigned_floating_neg.cc:
	Likewise.
	* testsuite/ext/type_traits/remove_unsigned_floating_neg.cc:
	Likewise.
	* testsuite/ext/type_traits/add_unsigned_integer_neg.cc:
	Likewise.

From-SVN: r123637
This commit is contained in:
Paolo Carlini
2007-04-07 08:38:39 +00:00
committed by Paolo Carlini
parent 858e05a663
commit f5294c77ff
12 changed files with 134 additions and 57 deletions

View File

@@ -1,3 +1,25 @@
2007-04-07 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/31481
* include/ext/type_traits.h (__numeric_traits): Move...
* include/ext/numeric_traits.h: ... here; fix type of
__max_digits10.
* include/Makefile.am: Add.
* include/ext/pb_ds/detail/type_utils.hpp: Include
<ext/numeric_traits.h> too.
* include/tr1/random: Likewise.
* testsuite/ext/type_traits/numeric_traits.cc: Move...
* testsuite/ext/numeric_traits/numeric_traits.cc: ... here.
* include/Makefile.in: Regenerate.
* testsuite/ext/type_traits/remove_unsigned_integer_neg.cc:
Adjust dg-error line number.
* testsuite/ext/type_traits/add_unsigned_floating_neg.cc:
Likewise.
* testsuite/ext/type_traits/remove_unsigned_floating_neg.cc:
Likewise.
* testsuite/ext/type_traits/add_unsigned_integer_neg.cc:
Likewise.
2007-04-03 Paolo Carlini <pcarlini@suse.de>
* include/bits/stl_map.h (map<>::insert(iterator, const value_type&):

View File

@@ -534,6 +534,7 @@ ext_headers = \
${ext_srcdir}/mt_allocator.h \
${ext_srcdir}/new_allocator.h \
${ext_srcdir}/numeric \
${ext_srcdir}/numeric_traits.h \
${ext_srcdir}/pod_char_traits.h \
${ext_srcdir}/pool_allocator.h \
${ext_srcdir}/rb_tree \

View File

@@ -756,6 +756,7 @@ ext_headers = \
${ext_srcdir}/mt_allocator.h \
${ext_srcdir}/new_allocator.h \
${ext_srcdir}/numeric \
${ext_srcdir}/numeric_traits.h \
${ext_srcdir}/pod_char_traits.h \
${ext_srcdir}/pool_allocator.h \
${ext_srcdir}/rb_tree \

View File

@@ -0,0 +1,98 @@
// -*- C++ -*-
// Copyright (C) 2007 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 ext/numeric_traits.h
* This file is a GNU extension to the Standard C++ Library.
*/
#ifndef _EXT_NUMERIC_TRAITS
#define _EXT_NUMERIC_TRAITS 1
#pragma GCC system_header
#include <limits>
#include <bits/cpp_type_traits.h>
#include <ext/type_traits.h>
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
// Compile time constants for builtin types.
// Sadly std::numeric_limits member functions cannot be used for this.
#define __glibcxx_signed(_Tp) ((_Tp)(-1) < 0)
#define __glibcxx_digits(_Tp) \
(sizeof(_Tp) * __CHAR_BIT__ - __glibcxx_signed(_Tp))
#define __glibcxx_min(_Tp) \
(__glibcxx_signed(_Tp) ? (_Tp)1 << __glibcxx_digits(_Tp) : (_Tp)0)
#define __glibcxx_max(_Tp) \
(__glibcxx_signed(_Tp) ? \
(((((_Tp)1 << (__glibcxx_digits(_Tp) - 1)) - 1) << 1) + 1) : ~(_Tp)0)
template<typename _Value>
struct __numeric_traits_integer
{
// Only integers for initialization of member constant.
static const _Value __min = __glibcxx_min(_Value);
static const _Value __max = __glibcxx_max(_Value);
};
template<typename _Value>
const _Value __numeric_traits_integer<_Value>::__min;
template<typename _Value>
const _Value __numeric_traits_integer<_Value>::__max;
template<typename _Value>
struct __numeric_traits_floating
{
// Only floating point types. See N1822.
static const int __max_digits10 =
2 + std::numeric_limits<_Value>::digits * 3010/10000;
};
template<typename _Value>
const int __numeric_traits_floating<_Value>::__max_digits10;
template<typename _Value>
struct __numeric_traits
: public __conditional_type<std::__is_integer<_Value>::__value,
__numeric_traits_integer<_Value>,
__numeric_traits_floating<_Value> >::__type
{ };
_GLIBCXX_END_NAMESPACE
#undef __glibcxx_signed
#undef __glibcxx_min
#undef __glibcxx_max
#undef __glibcxx_digits
#endif

View File

@@ -52,6 +52,7 @@
#include <utility>
#include <tr1/type_traits>
#include <ext/type_traits.h>
#include <ext/numeric_traits.h>
namespace pb_ds
{

View File

@@ -1,6 +1,6 @@
// -*- C++ -*-
// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
// Copyright (C) 2005, 2006, 2007 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
@@ -39,8 +39,6 @@
#include <cstddef>
#include <utility>
#include <limits>
#include <iosfwd> // std::streamsize
#include <bits/cpp_type_traits.h>
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
@@ -150,51 +148,6 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
template<>
struct __remove_unsigned<wchar_t>;
// Compile time constants for builtin types.
// Sadly std::numeric_limits member functions cannot be used for this.
#define __glibcxx_signed(_Tp) ((_Tp)(-1) < 0)
#define __glibcxx_digits(_Tp) \
(sizeof(_Tp) * __CHAR_BIT__ - __glibcxx_signed(_Tp))
#define __glibcxx_min(_Tp) \
(__glibcxx_signed(_Tp) ? (_Tp)1 << __glibcxx_digits(_Tp) : (_Tp)0)
#define __glibcxx_max(_Tp) \
(__glibcxx_signed(_Tp) ? ((_Tp)1 << __glibcxx_digits(_Tp)) - 1 : ~(_Tp)0)
template<typename _Value>
struct __numeric_traits_integer
{
// Only integers for initialization of member constant.
static const _Value __min = __glibcxx_min(_Value);
static const _Value __max = __glibcxx_max(_Value);
};
template<typename _Value>
const _Value __numeric_traits_integer<_Value>::__min;
template<typename _Value>
const _Value __numeric_traits_integer<_Value>::__max;
template<typename _Value>
struct __numeric_traits_floating
{
// Only floating point types. See N1822.
static const std::streamsize __max_digits10 =
2 + std::numeric_limits<_Value>::digits * 3010/10000;
};
template<typename _Value>
const std::streamsize __numeric_traits_floating<_Value>::__max_digits10;
template<typename _Value>
struct __numeric_traits
: public __conditional_type<std::__is_integer<_Value>::__value,
__numeric_traits_integer<_Value>,
__numeric_traits_floating<_Value> >::__type
{ };
_GLIBCXX_END_NAMESPACE
#endif

View File

@@ -43,6 +43,7 @@
#include <tr1/type_traits>
#include <tr1/cmath>
#include <ext/type_traits.h>
#include <ext/numeric_traits.h>
#include <bits/concept_check.h>
#include <debug/debug.h>

View File

@@ -20,7 +20,7 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
#include <ext/type_traits.h>
#include <ext/numeric_traits.h>
using __gnu_cxx::__numeric_traits;
template struct __numeric_traits<short>;

View File

@@ -1,7 +1,7 @@
// { dg-do compile }
// -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc.
// Copyright (C) 2006, 2007 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
@@ -36,5 +36,5 @@ int main()
}
// { dg-error "instantiated from" "" { target *-*-* } 29 }
// { dg-error "no type" "" { target *-*-* } 76 }
// { dg-error "no type" "" { target *-*-* } 74 }
// { dg-excess-errors "In instantiation of" }

View File

@@ -1,7 +1,7 @@
// { dg-do compile }
// -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc.
// Copyright (C) 2006, 2007 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
@@ -37,4 +37,4 @@ int main()
}
// { dg-error "invalid use of incomplete" "" { target *-*-* } 29 }
// { dg-error "declaration of" "" { target *-*-* } 71 }
// { dg-error "declaration of" "" { target *-*-* } 69 }

View File

@@ -1,7 +1,7 @@
// { dg-do compile }
// -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc.
// Copyright (C) 2006, 2007 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
@@ -36,5 +36,5 @@ int main()
}
// { dg-error "instantiated from" "" { target *-*-* } 29 }
// { dg-error "no type" "" { target *-*-* } 119 }
// { dg-error "no type" "" { target *-*-* } 117 }
// { dg-excess-errors "In instantiation of" }

View File

@@ -1,7 +1,7 @@
// { dg-do compile }
// -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc.
// Copyright (C) 2006, 2007 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
@@ -37,4 +37,4 @@ int main()
}
// { dg-error "invalid use of incomplete" "" { target *-*-* } 29 }
// { dg-error "declaration of" "" { target *-*-* } 114 }
// { dg-error "declaration of" "" { target *-*-* } 112 }