]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 18_support / bad_exception / 23591_thread-1.c
1 // { dg-require-sharedlib "" }
2 // { dg-skip-if "invalid options for C" { *-*-* } { "-std=c++??" "-std=gnu++??" } }
3 // { dg-options "-g -O2 -pthread -ldl -x c -fvtable-verify=none -Wno-pedantic" { target *-*-linux* *-*-gnu* *-*-solaris2.1[2-9]* } }
4
5 // Copyright (C) 2005-2018 Free Software Foundation, Inc.
6 //
7 // This file is part of the GNU ISO C++ Library. This library is free
8 // software; you can redistribute it and/or modify it under the
9 // terms of the GNU General Public License as published by the
10 // Free Software Foundation; either version 3, or (at your option)
11 // any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License along
19 // with this library; see the file COPYING3. If not see
20 // <http://www.gnu.org/licenses/>.
21
22 #include <pthread.h>
23 #include <dlfcn.h>
24 #include <errno.h>
25 #include <stdio.h>
26 #include <string.h>
27
28 // NB: This must be compiled and linked as a "C" executable.
29 static void* run(void* arg)
30 {
31 typedef void (*function_type) (void);
32 void* lib;
33 void (*cb)();
34
35 lib = dlopen("./testsuite_shared.so", RTLD_NOW);
36 if (!lib)
37 {
38 printf("dlopen failed: %s\n", strerror(errno));
39 return 0;
40 }
41 cb = (function_type) dlsym(lib, "try_throw_exception");
42 if (!cb)
43 {
44 printf("dlsym failed: %s\n", strerror(errno));
45 return 0;
46 }
47 cb();
48 dlclose(lib);
49 return 0;
50 }
51
52 // libstdc++/23591
53 int main(void)
54 {
55 pthread_t pt;
56
57 if (pthread_create(&pt, 0, &run, 0) != 0)
58 return 1;
59 if (pthread_join(pt, 0) != 0)
60 return 1;
61
62 return 0;
63 }