gcc/libstdc++-v3/testsuite/util/testsuite_shared.cc
Benjamin Kosnik 3b31a72738 c++config (_GLIBCXX_ABI_TAG_CXX11): Add.
2013-06-10  Benjamin Kosnik  <bkoz@redhat.com>

	* include/bits/c++config (_GLIBCXX_ABI_TAG_CXX11): Add.
	* include/bits/stl_map.h (erase): Use abi_tag when C++11.
	* include/bits/stl_multimap.h: Same.
	* include/bits/stl_multiset.h: Same.
	* include/bits/stl_set.h: Same.
	* include/bits/stl_tree.h: Same.
	* include/std/complex (real, imag): Use macro for abi_tag.

	* testsuite/lib/libstdc++.exp: Disable inlinling with -fno-inline.
	* testsuite/util/testsuite_containers.h (erase_external): New
	declarations.
	(erase_external_iterators): Same.
	(linkage_check_cxx98_cxx11_erase): Same.
	(linkage_check_cxx98_cxx11_erase_iterators): Same.
	* testsuite/util/testsuite_shared.cc: Define.
	* testsuite/23_containers/map/modifiers/erase/abi_tag.cc: New.
	* testsuite/23_containers/map/modifiers/erase/
	dr130-linkage-check.cc: New.
	* testsuite/23_containers/multimap/modifiers/erase/abi_tag.cc: New.
	* testsuite/23_containers/multimap/modifiers/erase/
	dr130-linkage-check.cc: New.
	* testsuite/23_containers/multiset/modifiers/erase/abi_tag.cc: New.
	* testsuite/23_containers/multiset/modifiers/erase/
	dr130-linkage-check.cc: New.
	* testsuite/23_containers/set/modifiers/erase/abi_tag.cc: New.
	* testsuite/23_containers/set/modifiers/erase/dr130-linkage-check.cc:
	New.
	* testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line number.

	* testsuite/23_containers/map/dr130.cc: Move...
	* testsuite/23_containers/map/modifiers/dr130.cc: ...here.
	* testsuite/23_containers/multimap/dr130.cc: Move ...
	* testsuite/23_containers/multimap/modifiers/dr130.cc: ...here.
	* testsuite/23_containers/multiset/dr130.cc: Move...
	* testsuite/23_containers/multiset/modifiers/dr130.cc: ...here.
	* testsuite/23_containers/set/dr130.cc: Move...
	* testsuite/23_containers/set/modifiers/dr130.cc: ...here.

From-SVN: r199924
2013-06-10 23:11:05 +00:00

131 lines
2.9 KiB
C++

// Copyright (C) 2004-2013 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 <string>
#include <stdexcept>
#include <iostream>
#include <sstream>
#include <set>
#include <map>
#include <ext/mt_allocator.h>
#include <bits/functexcept.h>
namespace __gnu_test
{
// libstdc++/22309
extern "C" void
try_allocation()
{
typedef char value_t;
typedef __gnu_cxx::__mt_alloc<value_t> allocator_t;
typedef std::char_traits<value_t> traits_t;
typedef std::basic_string<value_t, traits_t, allocator_t> string_t;
string_t s;
s += "west beach, indiana dunes";
}
// libstdc++/23591
extern "C" void
try_throw_exception()
{
try
{
std::__throw_bad_exception();
}
catch (const std::exception& e)
{ }
}
extern "C" void
try_function_random_fail()
{
long seed = lrand48();
if (seed < 2000)
seed = 2000;
{
std::ostringstream s;
s << "random_throw, seed: " << seed << std::endl;
std::cout << s.str();
}
while (--seed > 0)
{
try_throw_exception();
}
// Randomly throw. See if other threads cleanup.
std::__throw_bad_exception();
}
#if __cplusplus < 201103L
// "must be compiled with C++98"
void
erase_external(std::set<int>& s)
{ s.erase(s.begin()); }
void
erase_external(std::multiset<int>& s)
{ s.erase(s.begin()); }
void
erase_external(std::map<int, int>& s)
{ s.erase(s.begin()); }
void
erase_external(std::multimap<int, int>& s)
{ s.erase(s.begin()); }
void
erase_external_iterators(std::set<int>& s)
{
typedef typename std::set<int>::iterator iterator_type;
iterator_type iter = s.begin();
s.erase(iter, ++iter);
}
void
erase_external_iterators(std::multiset<int>& s)
{
typedef typename std::multiset<int>::iterator iterator_type;
iterator_type iter = s.begin();
s.erase(iter, ++iter);
}
void
erase_external_iterators(std::map<int, int>& s)
{
typedef typename std::map<int, int>::iterator iterator_type;
iterator_type iter = s.begin();
s.erase(iter, ++iter);
}
void
erase_external_iterators(std::multimap<int, int>& s)
{
typedef typename std::multimap<int, int>::iterator iterator_type;
iterator_type iter = s.begin();
s.erase(iter, ++iter);
}
#endif
} // end namepace __gnu_test