]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/21_strings/basic_string/pthread18185.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 21_strings / basic_string / pthread18185.cc
1 //
2 // Copyright (C) 2004-2020 Free Software Foundation, Inc.
3 //
4 // This file is part of the GNU ISO C++ Library. This library is free
5 // software; you can redistribute it and/or modify it under the
6 // terms of the GNU General Public License as published by the
7 // Free Software Foundation; either version 3, or (at your option)
8 // any later version.
9 //
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License along
16 // with this library; see the file COPYING3. If not see
17 // <http://www.gnu.org/licenses/>.
18
19 // { dg-do run }
20 // { dg-options "-pthread" }
21 // { dg-require-effective-target pthread }
22
23 #include <ext/new_allocator.h>
24 #include <string>
25 #include <pthread.h>
26
27 static void*
28 foo (void*)
29 {
30 typedef std::char_traits<char> traits_type;
31 typedef __gnu_cxx::new_allocator<char> allocator_type;
32 typedef std::basic_string<char, traits_type, allocator_type> string_type;
33 try
34 {
35 throw string_type("leak");
36 }
37 catch (const string_type&)
38 {
39 pthread_exit (0);
40 }
41 return 0; // See libstdc++/83450
42 }
43
44 // c++/18185
45 // This used to leak memory.
46 int
47 main ()
48 {
49 pthread_t t;
50 pthread_create (&t, 0, foo, 0);
51 pthread_join (t, 0);
52 return 0;
53 }