OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/gnu-stable/gcc-4.5.1/libstdc++-v3/testsuite/18_support
    from Rev 816 to Rev 826
    Reverse comparison

Rev 816 → Rev 826

/numeric_limits/lowest.cc
0,0 → 1,83
// { dg-options "-std=gnu++0x" }
// { dg-add-options ieee }
// { dg-do run { xfail { ! wchar } } }
 
// 2010-02-25 Ed Smith-Rowland
 
// Copyright (C) 2010 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <type_traits>
#include <testsuite_hooks.h>
 
template<typename T>
void
do_test(std::true_type)
{
bool test __attribute__((unused)) = true;
T limits_min = std::numeric_limits<T>::min();
VERIFY( std::numeric_limits<T>::lowest() == limits_min );
}
 
template<typename T>
void
do_test(std::false_type)
{
bool test __attribute__((unused)) = true;
T limits_max = std::numeric_limits<T>::max();
VERIFY( std::numeric_limits<T>::lowest() == -limits_max );
}
 
template<typename Tp>
void
do_test()
{ do_test<Tp>(typename std::is_integral<Tp>::type()); }
 
void test01()
{
do_test<char>();
do_test<signed char>();
do_test<unsigned char>();
do_test<wchar_t>();
do_test<char16_t>();
do_test<char32_t>();
 
do_test<short>();
do_test<unsigned short>();
 
do_test<int>();
do_test<unsigned int>();
 
do_test<long>();
do_test<unsigned long>();
 
do_test<long long>();
do_test<unsigned long long>();
 
do_test<float>();
do_test<double>();
do_test<long double>();
}
 
int main()
{
test01();
return 0;
}
/numeric_limits/is_iec559.cc
0,0 → 1,79
// { dg-add-options ieee }
 
// 1999-08-23 bkoz
 
// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <limits.h>
#include <float.h>
#include <cwchar>
#include <testsuite_hooks.h>
 
template<typename T>
void
test_is_iec559()
{
bool test;
 
if (std::numeric_limits<T>::is_iec559)
{
// IEC 559 requires all of the following.
test = (std::numeric_limits<T>::has_infinity
&& std::numeric_limits<T>::has_quiet_NaN
&& std::numeric_limits<T>::has_signaling_NaN);
}
else
{
// If we had all of the following, why didn't we set IEC 559?
test = (!std::numeric_limits<T>::has_infinity
|| !std::numeric_limits<T>::has_quiet_NaN
|| !std::numeric_limits<T>::has_signaling_NaN);
}
 
VERIFY (test);
}
 
// libstdc++/8949
bool test04()
{
bool test __attribute__((unused)) = true;
 
VERIFY( !std::numeric_limits<short>::is_iec559 );
VERIFY( !std::numeric_limits<unsigned short>::is_iec559 );
VERIFY( !std::numeric_limits<int>::is_iec559 );
VERIFY( !std::numeric_limits<unsigned int>::is_iec559 );
VERIFY( !std::numeric_limits<long>::is_iec559 );
VERIFY( !std::numeric_limits<unsigned long>::is_iec559 );
VERIFY( !std::numeric_limits<long long>::is_iec559 );
VERIFY( !std::numeric_limits<unsigned long long>::is_iec559 );
return test;
}
 
int main()
{
test_is_iec559<float>();
test_is_iec559<double>();
test_is_iec559<long double>();
 
test04();
 
return 0;
}
/numeric_limits/requirements/explicit_instantiation/1.cc
0,0 → 1,41
// { dg-do compile }
 
// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
 
// This file tests explicit instantiation of library containers.
 
#include <limits>
 
template<typename T>
struct A
{
int key;
public:
A(int i = 0): key(i) { }
bool
operator==(int i) { return i == key; }
};
 
struct B
{
B(int = 0) { }
};
 
// XXX Should this work for POD types?
template class std::numeric_limits<A<B> >;
/numeric_limits/specialization_default_values.cc
0,0 → 1,106
// { dg-add-options ieee }
 
// 1999-08-23 bkoz
 
// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2009
// Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <limits.h>
#include <float.h>
#include <cwchar>
#include <testsuite_hooks.h>
 
template<typename T>
struct A
{
int key;
public:
A(int i = 0): key(i) { }
bool
operator==(int i) { return i == key; }
};
 
struct B
{
B(int = 0) { }
};
 
 
bool test01()
{
bool test __attribute__((unused)) = true;
std::numeric_limits< A<B> > obj;
 
VERIFY( !obj.is_specialized );
VERIFY( obj.min() == 0 );
VERIFY( obj.max() == 0 );
VERIFY( obj.digits == 0 );
VERIFY( obj.digits10 == 0 );
VERIFY( !obj.is_signed );
VERIFY( !obj.is_integer );
VERIFY( !obj.is_exact );
VERIFY( obj.radix == 0 );
VERIFY( obj.epsilon() == 0 );
VERIFY( obj.round_error() == 0 );
VERIFY( obj.min_exponent == 0 );
VERIFY( obj.min_exponent10 == 0 );
VERIFY( obj.max_exponent == 0 );
VERIFY( obj.max_exponent10 == 0 );
VERIFY( !obj.has_infinity );
VERIFY( !obj.has_quiet_NaN );
VERIFY( !obj.has_signaling_NaN );
VERIFY( !obj.has_denorm );
VERIFY( !obj.has_denorm_loss );
VERIFY( obj.infinity() == 0 );
VERIFY( obj.quiet_NaN() == 0 );
VERIFY( obj.signaling_NaN() == 0 );
VERIFY( obj.denorm_min() == 0 );
VERIFY( !obj.is_iec559 );
VERIFY( !obj.is_bounded );
VERIFY( !obj.is_modulo );
VERIFY( !obj.traps );
VERIFY( !obj.tinyness_before );
VERIFY( obj.round_style == std::round_toward_zero );
return test;
}
 
// test linkage of the generic bits
template struct std::numeric_limits<B>;
 
void test02()
{
typedef std::numeric_limits<B> b_nl_type;
// Should probably do all of them...
const int* __attribute__((unused)) pi1 = &b_nl_type::digits;
const int* __attribute__((unused)) pi2 = &b_nl_type::digits10;
const int* __attribute__((unused)) pi3 = &b_nl_type::max_exponent10;
const bool* __attribute__((unused)) pb1 = &b_nl_type::traps;
}
 
 
int main()
{
test01();
test02();
 
return 0;
}
/numeric_limits/29989.cc
0,0 → 1,22
// { dg-do compile }
 
// Copyright (C) 2006, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// libstdc++/29989
#define max(a,b) quirk
#include <limits>
/numeric_limits/is_signed.cc
0,0 → 1,58
// { dg-add-options ieee }
 
// 1999-08-23 bkoz
 
// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <limits.h>
#include <float.h>
#include <cwchar>
#include <testsuite_hooks.h>
 
#ifdef __CHAR_UNSIGNED__
#define char_is_signed false
#else
#define char_is_signed true
#endif
 
void test_sign()
{
bool test __attribute__((unused)) = true;
VERIFY( std::numeric_limits<char>::is_signed == char_is_signed );
VERIFY( std::numeric_limits<signed char>::is_signed == true );
VERIFY( std::numeric_limits<unsigned char>::is_signed == false );
VERIFY( std::numeric_limits<short>::is_signed == true );
VERIFY( std::numeric_limits<unsigned short>::is_signed == false );
VERIFY( std::numeric_limits<int>::is_signed == true );
VERIFY( std::numeric_limits<unsigned>::is_signed == false );
VERIFY( std::numeric_limits<long>::is_signed == true );
VERIFY( std::numeric_limits<unsigned long>::is_signed == false );
VERIFY( std::numeric_limits<float>::is_signed == true );
VERIFY( std::numeric_limits<double>::is_signed == true );
VERIFY( std::numeric_limits<long double>::is_signed == true );
}
 
int main()
{
test_sign();
 
return 0;
}
/numeric_limits/dr559.cc
0,0 → 1,102
// { dg-options "-std=gnu++0x" }
 
// 2010-02-17 Paolo Carlini <paolo.carlini@oracle.com>
//
// Copyright (C) 2010 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <limits>
#include <type_traits>
#include <testsuite_hooks.h>
 
template<typename T>
void do_test_aux()
{
bool test __attribute__((unused)) = true;
typedef std::numeric_limits<T> cv_limits;
typedef std::numeric_limits<typename std::remove_cv<T>::type> limits;
 
VERIFY( cv_limits::is_specialized == limits::is_specialized );
VERIFY( cv_limits::min() == limits::min() );
VERIFY( cv_limits::max() == limits::max() );
VERIFY( cv_limits::lowest() == limits::lowest() );
VERIFY( cv_limits::digits == limits::digits );
VERIFY( cv_limits::digits10 == limits::digits10 );
VERIFY( cv_limits::max_digits10 == limits::max_digits10 );
VERIFY( cv_limits::is_signed == limits::is_signed );
VERIFY( cv_limits::is_integer == limits::is_integer );
VERIFY( cv_limits::is_exact == limits::is_exact );
VERIFY( cv_limits::radix == limits::radix );
VERIFY( cv_limits::epsilon() == limits::epsilon() );
VERIFY( cv_limits::round_error() == limits::round_error() );
VERIFY( cv_limits::min_exponent == limits::min_exponent );
VERIFY( cv_limits::min_exponent10 == limits::min_exponent10 );
VERIFY( cv_limits::max_exponent == limits::max_exponent );
VERIFY( cv_limits::max_exponent10 == limits::max_exponent10 );
VERIFY( cv_limits::has_infinity == limits::has_infinity );
VERIFY( cv_limits::has_quiet_NaN == limits::has_quiet_NaN );
VERIFY( cv_limits::has_signaling_NaN == limits::has_signaling_NaN );
VERIFY( cv_limits::has_denorm == limits::has_denorm );
VERIFY( cv_limits::has_denorm_loss == limits::has_denorm_loss );
VERIFY( cv_limits::infinity() == limits::infinity() );
if (!std::is_floating_point<T>::value)
{
VERIFY( cv_limits::quiet_NaN() == limits::quiet_NaN() );
VERIFY( cv_limits::signaling_NaN() == limits::signaling_NaN() );
}
VERIFY( cv_limits::denorm_min() == limits::denorm_min() );
VERIFY( cv_limits::is_iec559 == limits::is_iec559 );
VERIFY( cv_limits::is_bounded == limits::is_bounded );
VERIFY( cv_limits::is_modulo == limits::is_modulo );
VERIFY( cv_limits::traps == limits::traps );
VERIFY( cv_limits::tinyness_before == limits::tinyness_before );
VERIFY( cv_limits::round_style == limits::round_style );
}
 
template<typename T>
void
do_test()
{
do_test_aux<T>();
do_test_aux<const T>();
do_test_aux<volatile T>();
do_test_aux<const volatile T>();
}
 
// DR 559.
int main()
{
do_test<bool>();
do_test<char>();
do_test<signed char>();
do_test<unsigned char>();
do_test<wchar_t>();
do_test<char16_t>();
do_test<char32_t>();
do_test<short>();
do_test<unsigned short>();
do_test<int>();
do_test<unsigned int>();
do_test<long>();
do_test<unsigned long>();
do_test<long long>();
do_test<unsigned long long>();
do_test<float>();
do_test<double>();
do_test<long double>();
return 0;
}
/numeric_limits/epsilon.cc
0,0 → 1,47
// { dg-add-options ieee }
 
// 1999-08-23 bkoz
 
// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <limits.h>
#include <float.h>
#include <cwchar>
#include <testsuite_hooks.h>
 
template<typename T>
void test_epsilon()
{
bool test __attribute__((unused)) = true;
T epsilon = std::numeric_limits<T>::epsilon();
T one = 1;
 
VERIFY( one != (one + epsilon) );
}
 
int main()
{
test_epsilon<float>();
test_epsilon<double>();
test_epsilon<long double>();
 
return 0;
}
/numeric_limits/char16_32_t.cc
0,0 → 1,77
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
 
// 2008-05-20 Paolo Carlini <paolo.carlini@oracle.com>
//
// Copyright (C) 2008, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <cstdint>
#include <testsuite_hooks.h>
 
// Test specializations for char16_t and char32_t, in C++0x.
template<typename T, typename R>
void
do_test()
{
bool test __attribute__((unused)) = true;
 
typedef std::numeric_limits<T> char_type;
typedef std::numeric_limits<R> impl_type;
 
VERIFY( char_type::is_specialized == impl_type::is_specialized );
VERIFY( char_type::min() == impl_type::min() );
VERIFY( char_type::max() == impl_type::max() );
VERIFY( char_type::digits == impl_type::digits );
VERIFY( char_type::digits10 == impl_type::digits10 );
VERIFY( char_type::is_signed == impl_type::is_signed );
VERIFY( char_type::is_integer == impl_type::is_integer );
VERIFY( char_type::is_exact == impl_type::is_exact );
VERIFY( char_type::radix == impl_type::radix );
VERIFY( char_type::epsilon() == impl_type::epsilon() );
VERIFY( char_type::round_error() == impl_type::round_error() );
VERIFY( char_type::min_exponent == impl_type::min_exponent );
VERIFY( char_type::min_exponent10 == impl_type::min_exponent10 );
VERIFY( char_type::max_exponent == impl_type::max_exponent );
VERIFY( char_type::max_exponent10 == impl_type::max_exponent10 );
VERIFY( char_type::has_infinity == impl_type::has_infinity );
VERIFY( char_type::has_quiet_NaN == impl_type::has_quiet_NaN );
VERIFY( char_type::has_signaling_NaN == impl_type::has_signaling_NaN );
VERIFY( char_type::has_denorm == impl_type::has_denorm );
VERIFY( char_type::has_denorm_loss == impl_type::has_denorm_loss );
VERIFY( char_type::infinity() == impl_type::infinity() );
VERIFY( char_type::quiet_NaN() == impl_type::quiet_NaN() );
VERIFY( char_type::signaling_NaN() == impl_type::signaling_NaN() );
VERIFY( char_type::denorm_min() == impl_type::denorm_min() );
VERIFY( char_type::is_iec559 == impl_type::is_iec559 );
VERIFY( char_type::is_bounded == impl_type::is_bounded );
VERIFY( char_type::is_modulo == impl_type::is_modulo );
VERIFY( char_type::traps == impl_type::traps );
VERIFY( char_type::tinyness_before == impl_type::tinyness_before );
VERIFY( char_type::round_style == impl_type::round_style );
}
 
int main()
{
do_test<char16_t, uint_least16_t>();
do_test<char32_t, uint_least32_t>();
 
return 0;
}
/numeric_limits/quiet_NaN.cc
0,0 → 1,54
// { dg-add-options ieee }
 
// 1999-08-23 bkoz
 
// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <limits.h>
#include <float.h>
#include <cwchar>
#include <testsuite_hooks.h>
 
template<typename T>
void
test_qnan()
{
bool test;
 
if (std::numeric_limits<T>::has_quiet_NaN)
{
T nan = std::numeric_limits<T>::quiet_NaN();
test = (nan != nan);
}
else
test = true;
 
VERIFY (test);
}
 
int main()
{
test_qnan<float>();
test_qnan<double>();
test_qnan<long double>();
 
return 0;
}
/numeric_limits/digits10.cc
0,0 → 1,64
// { dg-add-options ieee }
 
// 1999-08-23 bkoz
 
// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <limits.h>
#include <float.h>
#include <cwchar>
#include <testsuite_hooks.h>
 
// libstdc++/5045
bool test03()
{
bool test __attribute__((unused)) = true;
 
VERIFY( std::numeric_limits<bool>::digits10 == 0 );
if (__CHAR_BIT__ == 8)
{
VERIFY( std::numeric_limits<signed char>::digits10 == 2 );
VERIFY( std::numeric_limits<unsigned char>::digits10 == 2 );
}
if (__CHAR_BIT__ * sizeof(short) == 16)
{
VERIFY( std::numeric_limits<signed short>::digits10 == 4 );
VERIFY( std::numeric_limits<unsigned short>::digits10 == 4 );
}
if (__CHAR_BIT__ * sizeof(int) == 32)
{
VERIFY( std::numeric_limits<signed int>::digits10 == 9 );
VERIFY( std::numeric_limits<unsigned int>::digits10 == 9 );
}
if (__CHAR_BIT__ * sizeof(long long) == 64)
{
VERIFY( std::numeric_limits<signed long long>::digits10 == 18 );
VERIFY( std::numeric_limits<unsigned long long>::digits10 == 19 );
}
return test;
}
 
int main()
{
test03();
 
return 0;
}
/numeric_limits/denorm_min.cc
0,0 → 1,54
// { dg-add-options ieee }
 
// 1999-08-23 bkoz
 
// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <limits.h>
#include <float.h>
#include <cwchar>
#include <testsuite_hooks.h>
 
template<typename T>
void
test_denorm_min()
{
bool test;
 
if (std::numeric_limits<T>::has_denorm == std::denorm_present)
{
T denorm = std::numeric_limits<T>::denorm_min();
test = (denorm > 0);
}
else
test = true;
 
VERIFY (test);
}
 
int main()
{
test_denorm_min<float>();
test_denorm_min<double>();
test_denorm_min<long double>();
 
return 0;
}
/numeric_limits/min_max.cc
0,0 → 1,93
// { dg-add-options ieee }
 
// 1999-08-23 bkoz
 
// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <limits.h>
#include <float.h>
#include <cwchar>
#include <testsuite_hooks.h>
 
template<typename T>
struct extrema {
static T min;
static T max;
};
 
 
#define DEFINE_EXTREMA(T, m, M) \
template<> T extrema<T>::min = m; \
template<> T extrema<T>::max = M
 
DEFINE_EXTREMA(char, CHAR_MIN, CHAR_MAX);
DEFINE_EXTREMA(signed char, SCHAR_MIN, SCHAR_MAX);
DEFINE_EXTREMA(unsigned char, 0, UCHAR_MAX);
DEFINE_EXTREMA(short, SHRT_MIN, SHRT_MAX);
DEFINE_EXTREMA(unsigned short, 0, USHRT_MAX);
DEFINE_EXTREMA(int, INT_MIN, INT_MAX);
DEFINE_EXTREMA(unsigned, 0U, UINT_MAX);
DEFINE_EXTREMA(long, LONG_MIN, LONG_MAX);
DEFINE_EXTREMA(unsigned long, 0UL, ULONG_MAX);
 
#if _GLIBCXX_USE_WCHAR_T
DEFINE_EXTREMA(wchar_t, WCHAR_MIN, WCHAR_MAX);
#endif //_GLIBCXX_USE_WCHAR_T
 
DEFINE_EXTREMA(float, FLT_MIN, FLT_MAX);
DEFINE_EXTREMA(double, DBL_MIN, DBL_MAX);
DEFINE_EXTREMA(long double, LDBL_MIN, LDBL_MAX);
 
#undef DEFINE_EXTREMA
 
template<typename T>
void test_extrema()
{
bool test __attribute__((unused)) = true;
T limits_min = std::numeric_limits<T>::min();
T limits_max = std::numeric_limits<T>::max();
T extrema_min = extrema<T>::min;
T extrema_max = extrema<T>::max;
VERIFY( extrema_min == limits_min );
VERIFY( extrema_max == limits_max );
}
 
int main()
{
test_extrema<char>();
test_extrema<signed char>();
test_extrema<unsigned char>();
test_extrema<short>();
test_extrema<unsigned short>();
 
test_extrema<int>();
test_extrema<unsigned>();
 
test_extrema<long>();
test_extrema<unsigned long>();
 
test_extrema<float>();
test_extrema<double>();
test_extrema<long double>();
 
return 0;
}
/numeric_limits/infinity.cc
0,0 → 1,54
// { dg-add-options ieee }
 
// 1999-08-23 bkoz
 
// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <limits.h>
#include <float.h>
#include <cwchar>
#include <testsuite_hooks.h>
 
template<typename T>
void
test_infinity()
{
bool test;
 
if (std::numeric_limits<T>::has_infinity)
{
T inf = std::numeric_limits<T>::infinity();
test = (inf + inf == inf);
}
else
test = true;
 
VERIFY (test);
}
 
int main()
{
test_infinity<float>();
test_infinity<double>();
test_infinity<long double>();
 
return 0;
}
/numeric_limits/max_digits10.cc
0,0 → 1,67
// { dg-options "-std=gnu++0x" }
// { dg-add-options ieee }
 
// 2010-02-25 Ed Smith-Rowland
 
// Copyright (C) 2010 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <cmath>
#include <testsuite_hooks.h>
 
void
test01()
{
bool test __attribute__((unused)) = true;
 
VERIFY( std::numeric_limits<bool>::max_digits10 == 0 );
VERIFY( std::numeric_limits<char>::max_digits10 == 0 );
VERIFY( std::numeric_limits<signed char>::max_digits10 == 0 );
VERIFY( std::numeric_limits<unsigned char>::max_digits10 == 0 );
VERIFY( std::numeric_limits<wchar_t>::max_digits10 == 0 );
VERIFY( std::numeric_limits<short>::max_digits10 == 0 );
VERIFY( std::numeric_limits<unsigned short>::max_digits10 == 0 );
VERIFY( std::numeric_limits<int>::max_digits10 == 0 );
VERIFY( std::numeric_limits<unsigned int>::max_digits10 == 0 );
VERIFY( std::numeric_limits<long>::max_digits10 == 0 );
VERIFY( std::numeric_limits<unsigned long>::max_digits10 == 0 );
VERIFY( std::numeric_limits<long long>::max_digits10 == 0 );
VERIFY( std::numeric_limits<unsigned long long>::max_digits10 == 0 );
VERIFY( std::numeric_limits<char16_t>::max_digits10 == 0 );
VERIFY( std::numeric_limits<char32_t>::max_digits10 == 0 );
 
const int f_max_digits10 = (2 + std::numeric_limits<float>::digits
* 643 / 2136);
VERIFY( std::numeric_limits<float>::max_digits10 == f_max_digits10 );
 
const int d_max_digits10 = (2 + std::numeric_limits<double>::digits
* 643 / 2136);
VERIFY( std::numeric_limits<double>::max_digits10 == d_max_digits10 );
 
const int ld_max_digits10 = (2 + std::numeric_limits<long double>::digits
* 643 / 2136);
VERIFY( std::numeric_limits<long double>::max_digits10 == ld_max_digits10 );
}
 
int main()
{
test01();
return 0;
}
/numeric_limits/traps.cc
0,0 → 1,61
// { dg-add-options ieee }
 
// Copyright (C) 2005, 2009 Free Software Foundation
//
// 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// 18.2.1.1 template class numeric_limits
 
#include <limits>
#include <testsuite_hooks.h>
 
template<typename T>
void
test_traps(T r = T(0))
{
typedef T value_type;
volatile value_type i(5);
volatile value_type j(0);
if (!std::numeric_limits<value_type>::traps)
r = i / j;
}
 
// libstdc++/22203
int main()
{
test_traps<int>();
test_traps<unsigned int>();
test_traps<long>();
test_traps<unsigned long>();
test_traps<long long>();
test_traps<unsigned long long>();
/*
For floating points, trapping is a different, more complicated
story. If is_iecxxx is true, then division by zero would not trap
(infinity). If is_iecxxx is false, we don't know (VAX may trap for
0/0 -- I have to check). For most cases (i.e. IEE-754), trapping
for floating points have to do with whether there is a support for
signaling NaN.
- Gaby.
*/
// test_traps<float>();
// test_traps<double>();
// test_traps<long double>();
 
return 0;
}
/bad_alloc/cons_virtual_derivation.cc
0,0 → 1,28
// 2007-05-29 Benjamin Kosnik <bkoz@redhat.com>
 
// Copyright (C) 2007, 2008, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <new>
#include <testsuite_api.h>
 
int main()
{
typedef std::bad_alloc test_type;
__gnu_test::diamond_derivation<test_type, true>::test();
return 0;
}
/bad_alloc/what.cc
0,0 → 1,40
// 2007-01-30 Paolo Carlini <pcarlini@suse.de>
 
// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <new>
#include <typeinfo>
#include <exception>
#include <cstring>
#include <testsuite_hooks.h>
 
// libstdc++/14493
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
bad_alloc ba;
VERIFY( !strcmp(ba.what(), "std::bad_alloc") );
}
 
int main()
{
test01();
return 0;
}
/bad_cast/cons_virtual_derivation.cc
0,0 → 1,28
// 2007-05-29 Benjamin Kosnik <bkoz@redhat.com>
 
// Copyright (C) 2007, 2008, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <typeinfo>
#include <testsuite_api.h>
 
int main()
{
typedef std::bad_cast test_type;
__gnu_test::diamond_derivation<test_type, true>::test();
return 0;
}
/bad_cast/what.cc
0,0 → 1,40
// 2007-01-30 Paolo Carlini <pcarlini@suse.de>
 
// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <new>
#include <typeinfo>
#include <exception>
#include <cstring>
#include <testsuite_hooks.h>
 
// libstdc++/14493
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
bad_cast bc;
VERIFY( !strcmp(bc.what(), "std::bad_cast") );
}
 
int main()
{
test01();
return 0;
}
/nested_exception/rethrow_nested.cc
0,0 → 1,53
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
 
// Copyright (C) 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <exception>
#include <testsuite_hooks.h>
 
void test01()
{
bool test __attribute__((unused)) = false;
 
try
{
try
{
throw 42;
}
catch (...)
{
std::nested_exception e;
e.rethrow_nested();
}
}
catch(const int& i)
{
test = true;
VERIFY( i == 42 );
}
 
VERIFY( test );
}
 
int main()
{
test01();
return 0;
}
/nested_exception/throw_with_nested.cc
0,0 → 1,80
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
 
// Copyright (C) 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <exception>
#include <testsuite_hooks.h>
 
struct derived : std::nested_exception { };
 
struct not_derived { virtual ~not_derived(); };
inline not_derived::~not_derived() = default;
 
void test01()
{
bool test __attribute__((unused)) = false;
 
try
{
std::throw_with_nested(derived());
}
catch (const std::nested_exception& e)
{
VERIFY( e.nested_ptr() == 0 );
try
{
throw;
}
catch (const derived&)
{
test = true;
}
}
VERIFY( test );
}
 
void test02()
{
bool test __attribute__((unused)) = false;
 
try
{
std::throw_with_nested(not_derived());
}
catch (const std::nested_exception& e)
{
VERIFY( e.nested_ptr() == 0 );
try
{
throw;
}
catch (const not_derived&)
{
test = true;
}
}
VERIFY( test );
}
 
int main()
{
test01();
test02();
return 0;
}
/nested_exception/cons.cc
0,0 → 1,53
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
 
// Copyright (C) 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <exception>
#include <testsuite_hooks.h>
 
void test01()
{
bool test __attribute__((unused)) = true;
 
std::nested_exception e;
 
VERIFY( e.nested_ptr() == 0 );
}
 
void test02()
{
bool test __attribute__((unused)) = true;
 
try
{
throw 42;
}
catch (...)
{
std::nested_exception e;
VERIFY( e.nested_ptr() == std::current_exception() );
}
}
 
int main()
{
test01();
test02();
return 0;
}
/nested_exception/nested_ptr.cc
0,0 → 1,71
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
 
// Copyright (C) 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <exception>
#include <testsuite_hooks.h>
 
void test01()
{
bool test __attribute__((unused)) = true;
 
try
{
throw std::nested_exception();
}
catch (const std::nested_exception& e)
{
VERIFY( e.nested_ptr() == 0 );
}
}
 
void test02()
{
bool test __attribute__((unused)) = true;
 
try
{
throw 42;
}
catch (...)
{
try
{
throw std::nested_exception();
}
catch (const std::nested_exception& e)
{
try
{
std::rethrow_exception( e.nested_ptr() );
}
catch(const int& i)
{
VERIFY( i == 42 );
}
}
}
}
 
int main()
{
test01();
test02();
return 0;
}
/nested_exception/rethrow_if_nested.cc
0,0 → 1,111
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
 
// Copyright (C) 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <exception>
#include <testsuite_hooks.h>
 
struct derived : std::nested_exception { };
 
struct base { virtual ~base(); };
inline base::~base() = default;
 
struct derived2 : base, std::nested_exception { };
 
void test01()
{
bool test __attribute__((unused)) = false;
 
try
{
throw 42;
}
catch (...)
{
derived d;
try
{
std::rethrow_if_nested(d);
}
catch (const int& i)
{
test = true;
VERIFY( i == 42 );
}
}
 
VERIFY( test );
}
 
void test02()
{
bool test __attribute__((unused)) = false;
 
try
{
throw base();
}
catch (const base& b)
{
std::rethrow_if_nested(b);
test = true;
}
 
VERIFY( test );
}
 
void test03()
{
bool test __attribute__((unused)) = false;
 
try
{
throw 42;
}
catch (...)
{
try
{
throw derived2();
}
catch (const base& b)
{
try
{
std::rethrow_if_nested(b);
}
catch (const int& i)
{
VERIFY( i == 42 );
test = true;
}
}
}
 
VERIFY( test );
}
 
 
int main()
{
test01();
test02();
test03();
return 0;
}
/exception_ptr/current_exception.cc
0,0 → 1,91
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
 
// 2008-05-25 Sebastian Redl <sebastian.redl@getdesigned.at>
 
// Copyright (C) 2008, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// current_exception() under various conditions.
 
#include <exception>
#include <testsuite_hooks.h>
 
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
exception_ptr ep = current_exception();
VERIFY( ep == 0 );
}
 
void test02()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
try {
throw 0;
} catch(...) {
exception_ptr ep = current_exception();
VERIFY( ep != 0 );
}
}
 
void test03()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
try {
throw exception();
} catch(std::exception&) {
exception_ptr ep = current_exception();
VERIFY( ep != 0 );
}
}
 
void test04()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
try {
throw 0;
} catch(...) {
exception_ptr ep1 = current_exception();
try {
throw 0;
} catch(...) {
exception_ptr ep2 = current_exception();
VERIFY( ep1 != ep2 );
}
exception_ptr ep3 = current_exception();
// Not guaranteed by standard, but by this implementation.
VERIFY( ep1 == ep3 );
}
}
 
int main()
{
test01();
test02();
test03();
test04();
return 0;
}
/exception_ptr/lifespan.cc
0,0 → 1,189
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
 
// 2008-05-25 Sebastian Redl <sebastian.redl@getdesigned.at>
 
// Copyright (C) 2008, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// Tests the life span of the exception object.
 
#include <exception>
#include <testsuite_hooks.h>
 
bool may_destruct = false;
 
class destructing
{
mutable bool copied;
 
public:
destructing() : copied(false) { }
destructing(const destructing &o) : copied(false) { o.copied = true; }
~destructing() { VERIFY( copied || may_destruct ); }
};
 
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
may_destruct = false;
 
// Test the destructing class.
{
destructing *d = new destructing;
destructing d2(*d);
delete d;
may_destruct = true;
}
may_destruct = false;
}
 
void test02()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
may_destruct = false;
 
try {
throw destructing();
} catch(...) {
may_destruct = true;
}
may_destruct = false;
}
 
void test03()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
may_destruct = false;
 
try {
throw destructing();
} catch(...) {
{
exception_ptr ep = current_exception();
}
may_destruct = true;
}
may_destruct = false;
}
 
void test04()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
may_destruct = false;
 
{
exception_ptr ep;
try {
throw destructing();
} catch(...) {
ep = current_exception();
}
may_destruct = true;
}
may_destruct = false;
}
 
void test05_helper()
{
using namespace std;
try {
throw destructing();
} catch(...) {
exception_ptr ep = current_exception();
rethrow_exception(ep);
}
}
 
void test05()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
may_destruct = false;
 
try {
test05_helper();
} catch(...) {
may_destruct = true;
}
may_destruct = false;
}
 
void test06_helper()
{
using namespace std;
try {
throw destructing();
} catch(...) {
exception_ptr ep = current_exception();
throw;
}
}
 
void test06()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
may_destruct = false;
 
try {
test06_helper();
} catch(...) {
may_destruct = true;
}
may_destruct = false;
}
 
std::exception_ptr gep;
 
void test99()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
may_destruct = false;
 
try {
throw destructing();
} catch(...) {
gep = current_exception();
}
}
 
int main()
{
test01();
test02();
test03();
test04();
test05();
test06();
 
test99();
may_destruct = true;
return 0;
}
/exception_ptr/40296.cc
0,0 → 1,30
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
 
// Copyright (C) 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <exception>
 
// libstdc++/40296
bool test01()
{
std::exception_ptr p;
 
return (p == 0);
}
/exception_ptr/move.cc
0,0 → 1,45
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
 
// Copyright (C) 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <exception>
#include <utility>
#include <testsuite_hooks.h>
 
// Verify move construction and assignment are efficient and do not copy.
// This behaviour is a GNU extension provided for efficiency.
void test01()
{
bool test = true;
std::exception_ptr p1 = std::copy_exception(test);
std::exception_ptr p2 = std::move(p1);
VERIFY( p1 == 0 );
VERIFY( !(p2 == 0) );
 
p1 = std::move(p2);
VERIFY( !(p1 == 0) );
VERIFY( p2 == 0 );
}
 
int main()
{
test01();
return 0;
}
/exception_ptr/rethrow_exception.cc
0,0 → 1,114
// { dg-options "-std=gnu++0x" }
// { dg-require-atomic-builtins "" }
 
// 2008-05-25 Sebastian Redl <sebastian.redl@getdesigned.at>
 
// Copyright (C) 2008, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
// rethrow_exception() and preservation of data
 
#include <exception>
#include <typeinfo>
#include <cstring>
#include <stdexcept>
#include <testsuite_hooks.h>
 
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
try {
rethrow_exception(copy_exception(0));
} catch(...) {
}
}
 
void test02()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
try {
rethrow_exception(copy_exception(runtime_error("test")));
} catch(exception &e) {
VERIFY( typeid(e) == typeid(runtime_error) );
VERIFY( strcmp(e.what(), "test") == 0 );
}
}
 
void test03()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
exception_ptr ep;
try {
throw 0;
} catch(...) {
ep = current_exception();
}
try {
rethrow_exception(ep);
} catch(...) {
}
}
 
void test04()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
// Weave the exceptions in an attempt to confuse the machinery.
try {
throw 0;
} catch(...) {
exception_ptr ep1 = current_exception();
try {
throw 1;
} catch(...) {
exception_ptr ep2 = current_exception();
try {
rethrow_exception(ep1);
} catch(...) {
try {
rethrow_exception(ep2);
} catch(...) {
try {
rethrow_exception(ep1);
} catch(...) {
}
try {
rethrow_exception(ep2);
} catch(...) {
}
}
}
}
}
}
 
int main()
{
test01();
test02();
test03();
test04();
 
return 0;
}
/bad_exception/cons_virtual_derivation.cc
0,0 → 1,28
// 2007-05-29 Benjamin Kosnik <bkoz@redhat.com>
 
// Copyright (C) 2007, 2008, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <exception>
#include <testsuite_api.h>
 
int main()
{
typedef std::bad_exception test_type;
__gnu_test::diamond_derivation<test_type, true>::test();
return 0;
}
/bad_exception/what.cc
0,0 → 1,40
// 2007-01-30 Paolo Carlini <pcarlini@suse.de>
 
// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <new>
#include <typeinfo>
#include <exception>
#include <cstring>
#include <testsuite_hooks.h>
 
// libstdc++/14493
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
 
bad_exception be;
VERIFY( !strcmp(be.what(), "std::bad_exception") );
}
 
int main()
{
test01();
return 0;
}
/bad_exception/23591_thread-1.c
0,0 → 1,62
// { dg-require-sharedlib "" }
// { dg-options "-g -O2 -pthread -ldl -x c" { target *-*-linux* } }
 
// Copyright (C) 2005, 2009 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 3, 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 COPYING3. If not see
// <http://www.gnu.org/licenses/>.
 
#include <pthread.h>
#include <dlfcn.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
 
// NB: This must be compiled and linked as a "C" executable.
static void* run(void* arg)
{
typedef void (*function_type) (void);
void* lib;
void (*cb)();
 
lib = dlopen("./testsuite_shared.so", RTLD_NOW);
if (lib == NULL)
{
printf("dlopen failed: %s\n", strerror(errno));
return NULL;
}
cb = (function_type) dlsym(lib, "try_throw_exception");
if (cb == NULL)
{
printf("dlsym failed: %s\n", strerror(errno));
return NULL;
}
cb();
dlclose(lib);
return NULL;
}
 
// libstdc++/23591
int main(void)
{
pthread_t pt;
 
if (pthread_create(&pt, NULL, &run, NULL) != 0)
return 1;
if (pthread_join(pt, NULL) != 0)
return 1;
 
return 0;
}
bad_exception/23591_thread-1.c Property changes : Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Id \ No newline at end of property Index: bad_typeid/cons_virtual_derivation.cc =================================================================== --- bad_typeid/cons_virtual_derivation.cc (nonexistent) +++ bad_typeid/cons_virtual_derivation.cc (revision 826) @@ -0,0 +1,28 @@ +// 2007-05-29 Benjamin Kosnik + +// Copyright (C) 2007, 2008, 2009 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 3, 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 COPYING3. If not see +// . + +#include +#include + +int main() +{ + typedef std::bad_typeid test_type; + __gnu_test::diamond_derivation::test(); + return 0; +} Index: bad_typeid/what.cc =================================================================== --- bad_typeid/what.cc (nonexistent) +++ bad_typeid/what.cc (revision 826) @@ -0,0 +1,40 @@ +// 2007-01-30 Paolo Carlini + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include +#include +#include +#include +#include + +// libstdc++/14493 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + bad_typeid bt; + VERIFY( !strcmp(bt.what(), "std::bad_typeid") ); +} + +int main() +{ + test01(); + return 0; +} Index: new_delete_placement.cc =================================================================== --- new_delete_placement.cc (nonexistent) +++ new_delete_placement.cc (revision 826) @@ -0,0 +1,39 @@ +// 2002-07-24 Benjamin Kosnik + +// Copyright (C) 2002, 2004, 2009 Free Software Foundation +// +// 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 3, 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 COPYING3. If not see +// . + +// 18.4.1.3 - Placement forms + +#include +#include + +// libstdc++/7286 +void test01() +{ + void* pc = new char; + void* pa = new char[10]; + void* tmp = NULL; + operator delete(pc, tmp); + operator delete[](pa, tmp); +} + +int main() +{ + test01(); + return 0; +} Index: headers/csignal/types_std.cc =================================================================== --- headers/csignal/types_std.cc (nonexistent) +++ headers/csignal/types_std.cc (revision 826) @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + std::sig_atomic_t s; +} Index: headers/csignal/functions_std.cc =================================================================== --- headers/csignal/functions_std.cc (nonexistent) +++ headers/csignal/functions_std.cc (revision 826) @@ -0,0 +1,26 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + using std::raise; + using std::signal; +} Index: headers/csignal/macros.cc =================================================================== --- headers/csignal/macros.cc (nonexistent) +++ headers/csignal/macros.cc (revision 826) @@ -0,0 +1,55 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ +#ifndef SIGABRT + #error "SIGABRT_must_be_a_macro" +#endif + +#ifndef SIGILL + #error "SIGILL_must_be_a_macro" +#endif + +#ifndef SIGSEGV + #error "SIGSEGV_must_be_a_macro" +#endif + +#ifndef SIG_DFL + #error "SIG_DFL_must_be_a_macro" +#endif + +#ifndef SIGFPE + #error "SIGFPE_must_be_a_macro" +#endif + +#ifndef SIGINT + #error "SIGINT_must_be_a_macro" +#endif + +#ifndef SIGTERM + #error "SIGTERM_must_be_a_macro" +#endif + +#ifndef SIG_ERR + #error "SIG_ERR_must_be_a_macro" +#endif +} Index: headers/ctime/types_std.cc =================================================================== --- headers/ctime/types_std.cc (nonexistent) +++ headers/ctime/types_std.cc (revision 826) @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + std::clock_t c; +} Index: headers/ctime/functions_std.cc =================================================================== --- headers/ctime/functions_std.cc (nonexistent) +++ headers/ctime/functions_std.cc (revision 826) @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + using std::clock; +} Index: headers/ctime/macros.cc =================================================================== --- headers/ctime/macros.cc (nonexistent) +++ headers/ctime/macros.cc (revision 826) @@ -0,0 +1,27 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ +#ifndef CLOCKS_PER_SEC + #error "CLOCKS_PER_SEC_must_be_a_macro" +#endif +} Index: headers/limits/synopsis.cc =================================================================== --- headers/limits/synopsis.cc (nonexistent) +++ headers/limits/synopsis.cc (revision 826) @@ -0,0 +1,47 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace std { + template class numeric_limits; + +#if 0 + enum float_round_style; + enum float_denorm_style; +#endif + + template<> class numeric_limits; + + template<> class numeric_limits; + template<> class numeric_limits; + template<> class numeric_limits; + template<> class numeric_limits; + + template<> class numeric_limits; + template<> class numeric_limits; + template<> class numeric_limits; + template<> class numeric_limits; + template<> class numeric_limits; + template<> class numeric_limits; + + template<> class numeric_limits; + template<> class numeric_limits; + template<> class numeric_limits; +} Index: headers/climits/values.cc =================================================================== --- headers/climits/values.cc (nonexistent) +++ headers/climits/values.cc (revision 826) @@ -0,0 +1,52 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + // char + char c1 = CHAR_BIT; + char c2 = CHAR_MAX; + char c3 = CHAR_MIN; + + // int + int i2 = INT_MAX; + int i3 = INT_MIN; + + // short + short s2 = SHRT_MAX; + short s3 = SHRT_MIN; + + // long + long l2 = LONG_MAX; + long l3 = LONG_MIN; + + unsigned long mb = MB_LEN_MAX; + + // signed char + signed char sc1 = SCHAR_MIN; + signed char sc2 = SCHAR_MAX; + + // unsigned + unsigned int ui = UINT_MAX; + unsigned short us = USHRT_MAX; + unsigned long ul = ULONG_MAX; + +} Index: headers/cstdlib/functions_std.cc =================================================================== --- headers/cstdlib/functions_std.cc (nonexistent) +++ headers/cstdlib/functions_std.cc (revision 826) @@ -0,0 +1,30 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + using std::abort; + using std::atexit; + using std::exit; + + using std::getenv; + using std::system; +} Index: headers/cstdlib/macros.cc =================================================================== --- headers/cstdlib/macros.cc (nonexistent) +++ headers/cstdlib/macros.cc (revision 826) @@ -0,0 +1,32 @@ +// { dg-do compile } +// 2001-02-06 Benjamin Kosnik + +// Copyright (C) 2001, 2003, 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ +#ifndef EXIT_FAILURE + #error "EXIT_FAILURE_must_be_a_macro" +#endif + +#ifndef EXIT_SUCCESS + #error "EXIT_SUCCESS_must_be_a_macro" +#endif +} Index: headers/csetjmp/types_std.cc =================================================================== --- headers/csetjmp/types_std.cc (nonexistent) +++ headers/csetjmp/types_std.cc (revision 826) @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + std::jmp_buf j; +} Index: headers/csetjmp/functions_std.cc =================================================================== --- headers/csetjmp/functions_std.cc (nonexistent) +++ headers/csetjmp/functions_std.cc (revision 826) @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + using std::longjmp; +} Index: headers/csetjmp/macros.cc =================================================================== --- headers/csetjmp/macros.cc (nonexistent) +++ headers/csetjmp/macros.cc (revision 826) @@ -0,0 +1,27 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ +#ifndef setjmp + #error "setjmp_must_be_a_macro" +#endif +} Index: headers/cstdarg/types_std.cc =================================================================== --- headers/cstdarg/types_std.cc (nonexistent) +++ headers/cstdarg/types_std.cc (revision 826) @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + std::va_list v; +} Index: headers/cstdarg/macros.cc =================================================================== --- headers/cstdarg/macros.cc (nonexistent) +++ headers/cstdarg/macros.cc (revision 826) @@ -0,0 +1,35 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ +#ifndef va_arg + #error "va_arg_must_be_a_macro" +#endif + +#ifndef va_start + #error "va_start_must_be_a_macro" +#endif + +#ifndef va_end + #error "va_end_must_be_a_macro" +#endif +} Index: headers/cfloat/values.cc =================================================================== --- headers/cfloat/values.cc (nonexistent) +++ headers/cfloat/values.cc (revision 826) @@ -0,0 +1,53 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + double d1 = DBL_DIG; + double d2 = DBL_EPSILON; + double d3 = DBL_MANT_DIG; + double d4 = DBL_MAX; + double d5 = DBL_MAX_10_EXP; + double d6 = DBL_MAX_EXP; + double d7 = DBL_MIN; + double d8 = DBL_MIN_10_EXP; + double d9 = DBL_MIN_EXP; + + float f1 = FLT_DIG; + float f2 = FLT_EPSILON; + float f3 = FLT_MANT_DIG; + float f4 = FLT_MAX; + float f5 = FLT_MAX_10_EXP; + float f6 = FLT_MAX_EXP; + float f7 = FLT_MIN; + float f8 = FLT_MIN_10_EXP; + float f9 = FLT_MIN_EXP; + + long double ld1 = LDBL_DIG; + long double ld2 = LDBL_EPSILON; + long double ld3 = LDBL_MANT_DIG; + long double ld4 = LDBL_MAX; + long double ld5 = LDBL_MAX_10_EXP; + long double ld6 = LDBL_MAX_EXP; + long double ld7 = LDBL_MIN; + long double ld8 = LDBL_MIN_10_EXP; + long double ld9 = LDBL_MIN_EXP; +} Index: headers/cstdint/types_std_c++0x.cc =================================================================== --- headers/cstdint/types_std_c++0x.cc (nonexistent) +++ headers/cstdint/types_std_c++0x.cc (revision 826) @@ -0,0 +1,54 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } +// { dg-require-cstdint "" } + +// Copyright (C) 2007, 2008, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +void test01() +{ + typedef std::int8_t my_int8_t; + typedef std::int16_t my_int16_t; + typedef std::int32_t my_int32_t; + typedef std::int64_t my_int64_t; + typedef std::int_fast8_t my_int_fast8_t; + typedef std::int_fast16_t my_int_fast16_t; + typedef std::int_fast32_t my_int_fast32_t; + typedef std::int_fast64_t my_int_fast64_t; + typedef std::int_least8_t my_int_least8_t; + typedef std::int_least16_t my_int_least16_t; + typedef std::int_least32_t my_int_least32_t; + typedef std::int_least64_t my_int_least64_t; + typedef std::intmax_t my_intmax_t; + typedef std::intptr_t my_intptr_t; + typedef std::uint8_t my_uint8_t; + typedef std::uint16_t my_uint16_t; + typedef std::uint32_t my_uint32_t; + typedef std::uint64_t my_uint64_t; + typedef std::uint_fast8_t my_uint_fast8_t; + typedef std::uint_fast16_t my_uint_fast16_t; + typedef std::uint_fast32_t my_uint_fast32_t; + typedef std::uint_fast64_t my_uint_fast64_t; + typedef std::uint_least8_t my_uint_least8_t; + typedef std::uint_least16_t my_uint_least16_t; + typedef std::uint_least32_t my_uint_least32_t; + typedef std::uint_least64_t my_uint_least64_t; + typedef std::uintmax_t my_uintmax_t; + typedef std::uintptr_t my_uintptr_t; +} Index: headers/cstdint/std_c++0x_neg.cc =================================================================== --- headers/cstdint/std_c++0x_neg.cc (nonexistent) +++ headers/cstdint/std_c++0x_neg.cc (revision 826) @@ -0,0 +1,26 @@ +// { dg-do compile } +// { dg-options "-std=gnu++98" } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include // { dg-excess-errors "In file included from" } + +// { dg-error "upcoming ISO" "" { target *-*-* } 31 } + + + Index: headers/cstdbool/std_c++0x_neg.cc =================================================================== --- headers/cstdbool/std_c++0x_neg.cc (nonexistent) +++ headers/cstdbool/std_c++0x_neg.cc (revision 826) @@ -0,0 +1,26 @@ +// { dg-do compile } +// { dg-options "-std=gnu++98" } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include // { dg-excess-errors "In file included from" } + +// { dg-error "upcoming ISO" "" { target *-*-* } 31 } + + + Index: headers/new/types_std.cc =================================================================== --- headers/new/types_std.cc (nonexistent) +++ headers/new/types_std.cc (revision 826) @@ -0,0 +1,28 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + typedef std::bad_alloc t1; + typedef std::nothrow_t t2; + + typedef std::new_handler t3; +} Index: headers/new/synopsis.cc =================================================================== --- headers/new/synopsis.cc (nonexistent) +++ headers/new/synopsis.cc (revision 826) @@ -0,0 +1,42 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace std { + class bad_alloc; + struct nothrow_t; + extern const nothrow_t nothrow; + typedef void (*new_handler)(); + new_handler set_new_handler(new_handler new_p) throw(); +} + +void* operator new(std::size_t size) throw(std::bad_alloc); +void* operator new(std::size_t size, const std::nothrow_t&) throw(); +void operator delete(void* ptr) throw(); +void operator delete(void* ptr, const std::nothrow_t&) throw(); +void* operator new[](std::size_t size) throw(std::bad_alloc); +void* operator new[](std::size_t size, const std::nothrow_t&) throw(); +void operator delete[](void* ptr) throw(); +void operator delete[](void* ptr, const std::nothrow_t&) throw(); + +void* operator new (std::size_t size, void* ptr) throw(); +void* operator new[](std::size_t size, void* ptr) throw(); +void operator delete (void* ptr, void*) throw(); +void operator delete[](void* ptr, void*) throw(); Index: headers/cstddef/types_std.cc =================================================================== --- headers/cstddef/types_std.cc (nonexistent) +++ headers/cstddef/types_std.cc (revision 826) @@ -0,0 +1,26 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + std::size_t s; + std::ptrdiff_t p; +} Index: headers/cstddef/macros.cc =================================================================== --- headers/cstddef/macros.cc (nonexistent) +++ headers/cstddef/macros.cc (revision 826) @@ -0,0 +1,52 @@ +// { dg-do compile } +// { dg-options "-Wno-conversion-null" } +// 2001-02-06 Benjamin Kosnik + +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 +// 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + struct test_type + { + int i; + int j; + }; + + // offsetof + void test01() + { + std::size_t i __attribute__((unused)) = offsetof(struct test_type, i); +#ifndef offsetof + #error "offsetof_must_be_a_macro" +#endif + } + + // NULL + void test02() + { + // Must not be (void*)0 + const int j __attribute__((unused)) = NULL; + +#ifndef NULL + #error "NULL_must_be_a_macro" +#endif + } +} Index: headers/typeinfo/types_std.cc =================================================================== --- headers/typeinfo/types_std.cc (nonexistent) +++ headers/typeinfo/types_std.cc (revision 826) @@ -0,0 +1,28 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + typedef std::type_info t1; + typedef std::bad_cast t2; + + typedef std::bad_typeid t3; +} Index: headers/typeinfo/synopsis.cc =================================================================== --- headers/typeinfo/synopsis.cc (nonexistent) +++ headers/typeinfo/synopsis.cc (revision 826) @@ -0,0 +1,26 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace std { + class type_info; + class bad_cast; + class bad_typeid; +} Index: headers/exception/types_std.cc =================================================================== --- headers/exception/types_std.cc (nonexistent) +++ headers/exception/types_std.cc (revision 826) @@ -0,0 +1,26 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace gnu +{ + typedef std::exception t1; + typedef std::bad_exception t2; +} Index: headers/exception/synopsis.cc =================================================================== --- headers/exception/synopsis.cc (nonexistent) +++ headers/exception/synopsis.cc (revision 826) @@ -0,0 +1,35 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include + +namespace std { + class exception; + class bad_exception; + + typedef void (*unexpected_handler)(); + unexpected_handler set_unexpected(unexpected_handler f ) throw(); + void unexpected(); + + typedef void (*terminate_handler)(); + terminate_handler set_terminate(terminate_handler f ) throw(); + void terminate() throw(); + + bool uncaught_exception() throw(); +} Index: uncaught_exception/14026.cc =================================================================== --- uncaught_exception/14026.cc (nonexistent) +++ uncaught_exception/14026.cc (revision 826) @@ -0,0 +1,53 @@ +// Copyright (C) 2004, 2007, 2009 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 3, 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 COPYING3. If not see +// . + +// PR 14026 +// 18.6.4 uncaught_exception + +#include +#include +#include + +static void +no_uncaught () +{ + if (std::uncaught_exception()) + abort(); +} + +int +main() +{ + try + { + throw 1; + } + catch (...) + { + try + { + throw; + } + catch (...) + { + no_uncaught (); + } + } + no_uncaught(); + + return 0; +} Index: pthread_guard.cc =================================================================== --- pthread_guard.cc (nonexistent) +++ pthread_guard.cc (revision 826) @@ -0,0 +1,65 @@ +// +// Copyright (C) 2007, 2008, 2009 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 3, 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 COPYING3. If not see +// . + +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-darwin* alpha*-*-osf* } } + +#include +#include + +// This used to deadlock with the old libstdc++ because there is only one +// global mutex guarding initialization of statics and it is held during by +// the initializer thread of a static until the variable is completely +// initialized. If the initializer thread creates and waits for another thread +// which also initializes a static variable, there will be a deadlock because +// the first thread is holding the mutex and waiting for the second thread, +// which is blocked when it is acquiring the mutex. + +int +get_bar (void) +{ + return 1; +} + +void* +do_something (void *arg) +{ + static int bar __attribute__((unused)) = get_bar (); + return NULL; +} + +int +get_foo (void) +{ + pthread_t new_thread; + + if (pthread_create (&new_thread, NULL, do_something, NULL) != 0) + std::abort (); + + if (pthread_join (new_thread, NULL) != 0) + std::abort (); + + return 1; +} + +int +main (int argc, char **argv) +{ + static int foo __attribute__((unused)) = get_foo (); + return 0; +} Index: exception/what.cc =================================================================== --- exception/what.cc (nonexistent) +++ exception/what.cc (revision 826) @@ -0,0 +1,40 @@ +// 2007-01-30 Paolo Carlini + +// Copyright (C) 2007, 2009 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 3, 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 COPYING3. If not see +// . + +#include +#include +#include +#include +#include + +// libstdc++/14493 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + exception e; + VERIFY( !strcmp(e.what(), "std::exception") ); +} + +int main() +{ + test01(); + return 0; +} Index: exception/38732.cc =================================================================== --- exception/38732.cc (nonexistent) +++ exception/38732.cc (revision 826) @@ -0,0 +1,92 @@ +// Copyright (C) 2009 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 3, 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 COPYING3. If not see +// . + +#include +#include +#include +#include "unwind.h" +#include + +// Before exception_ptr was introduced, some programs copied +// part of unwind-cxx.h and used __cxa_get_globals to get at the +// current exceptionType. __cxa_exception structure is described in the +// C++ ABI, so they have the right to assume it works. +// Ensure it is true. + +struct __cxa_exception +{ + std::type_info *exceptionType; + void (*exceptionDestructor)(void *); + std::unexpected_handler unexpectedHandler; + std::terminate_handler terminateHandler; + __cxa_exception *nextException; + int handlerCount; +#ifdef __ARM_EABI_UNWINDER__ + __cxa_exception* nextPropagatingException; + int propagationCount; +#else + int handlerSwitchValue; + const unsigned char *actionRecord; + const unsigned char *languageSpecificData; + _Unwind_Ptr catchTemp; + void *adjustedPtr; +#endif + _Unwind_Exception unwindHeader; +}; + +struct __cxa_eh_globals +{ + __cxa_exception *caughtExceptions; + unsigned int uncaughtExceptions; +#ifdef __ARM_EABI_UNWINDER__ + __cxa_exception* propagatingExceptions; +#endif +}; + +extern "C" __cxa_eh_globals *__cxa_get_globals () throw(); + +// PR libstdc++/38732 +void test01 () +{ + bool test __attribute__((unused)) = true; + try { + throw 0; + } catch(...) { + __cxa_exception *exc = __cxa_get_globals()->caughtExceptions; + VERIFY ( exc != NULL ); + VERIFY ( typeid(int) == *exc->exceptionType ); + } + try { + throw 0LL; + } catch(...) { + __cxa_exception *exc = __cxa_get_globals()->caughtExceptions; + VERIFY ( exc != NULL ); + VERIFY ( typeid(long long int) == *exc->exceptionType ); + } + try { + throw 0.0; + } catch(...) { + __cxa_exception *exc = __cxa_get_globals()->caughtExceptions; + VERIFY ( exc != NULL ); + VERIFY ( typeid(double) == *exc->exceptionType ); + } +} + +int main () +{ + test01 (); +} Index: initializer_list/requirements/typedefs.cc =================================================================== --- initializer_list/requirements/typedefs.cc (nonexistent) +++ initializer_list/requirements/typedefs.cc (revision 826) @@ -0,0 +1,34 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } +// 2009-05-27 Benjamin Kosnik + +// Copyright (C) 2009 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 3, 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 COPYING3. If not see +// . + +#include + +void test01() +{ + // Check for required typedefs + typedef std::initializer_list test_type; + typedef test_type::value_type type1; + typedef test_type::size_type type2; + typedef test_type::reference type3; + typedef test_type::const_reference type4; + typedef test_type::iterator type5; + typedef test_type::const_iterator type5; +} Index: initializer_list/requirements/explicit_instantiation.cc =================================================================== --- initializer_list/requirements/explicit_instantiation.cc (nonexistent) +++ initializer_list/requirements/explicit_instantiation.cc (revision 826) @@ -0,0 +1,24 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } +// 2009-05-27 Benjamin Kosnik + +// Copyright (C) 2009 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 3, 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 COPYING3. If not see +// . + +#include + +template class std::initializer_list;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.