diff options
Diffstat (limited to 'libstdc++-v3/testsuite/thread/pthread7-rope.cc')
-rw-r--r-- | libstdc++-v3/testsuite/thread/pthread7-rope.cc | 103 |
1 files changed, 0 insertions, 103 deletions
diff --git a/libstdc++-v3/testsuite/thread/pthread7-rope.cc b/libstdc++-v3/testsuite/thread/pthread7-rope.cc deleted file mode 100644 index 93bfe08..0000000 --- a/libstdc++-v3/testsuite/thread/pthread7-rope.cc +++ /dev/null @@ -1,103 +0,0 @@ -// 2003-05-03 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org> -// -// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } } -// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } } -// { dg-options "-pthreads" { target *-*-solaris* } } - -#include <ext/rope> -#include <cstring> -#include <pthread.h> -#include <testsuite_hooks.h> - -const int max_thread_count = 4; -const int max_loop_count = 10000; - -typedef __gnu_cxx::rope<char, std::allocator<char> > rope_type; -rope_type foo2; -rope_type foo4; - -void* thread_main(void *) -{ - // To see a problem with gcc 3.3 and before, set a break point here. - // Single step through c_str implementation, call sched_yield after - // capture of NULL __old_c_string in any thread. Single step - // through another thread past that same point. Now, one thread - // will receive a bad pointer return. Adding dummy sched_yield - // should never change program semantics under POSIX threads. - const char* data4 = foo4.c_str(); - - // Please note that the memory leak in the rope implementation with - // this test case, existed before and after fixing this bug... - bool test __attribute__((unused)) = true; - VERIFY( !std::strcmp (data4, "barbazbonglehellohellohello") ); - return 0; -} - -int -main() -{ - bool test __attribute__((unused)) = true; - - pthread_t tid[max_thread_count]; - -#if defined(__sun) && defined(__svr4__) && _XOPEN_VERSION >= 500 - pthread_setconcurrency (max_thread_count); -#endif - - rope_type foo; - foo += "bar"; - foo += "baz"; - foo += "bongle"; - const char* data = foo.c_str(); - VERIFY( !std::strcmp (data, "barbazbongle") ); - - const char* data2; - { - foo2 += "bar2"; - foo2 += "baz2"; - foo2 += "bongle2"; - data2 = foo2.c_str(); - VERIFY( !std::strcmp (data2, "bar2baz2bongle2") ); - } - - rope_type foo3 ("hello"); - const char* data3 = foo3.c_str(); - VERIFY( !std::strcmp (data3, "hello") ); - - for (int j = 0; j < max_loop_count; j++) - { - foo4 = foo; - foo4 += foo3; - foo4 += foo3; - foo4 += foo3; - - for (int i = 0; i < max_thread_count; i++) - pthread_create (&tid[i], NULL, thread_main, 0); - - for (int i = 0; i < max_thread_count; i++) - pthread_join (tid[i], NULL); - } - - VERIFY( !std::strcmp (data, "barbazbongle") ); - VERIFY( !std::strcmp (data2, "bar2baz2bongle2") ); - - return 0; -} |