]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/30_threads/thread/cons/9.cc
all.h (compare_type_to_native_type_sizes): To...
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 30_threads / thread / cons / 9.cc
CommitLineData
f3eb9681
BK
1// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
2// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
3// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
4// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
5// { dg-require-cstdint "" }
6// { dg-require-gthreads "" }
7
8// Copyright (C) 2009 Free Software Foundation, Inc.
9//
10// This file is part of the GNU ISO C++ Library. This library is free
11// software; you can redistribute it and/or modify it under the
12// terms of the GNU General Public License as published by the
13// Free Software Foundation; either version 2, or (at your option)
14// any later version.
15
16// This library is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU General Public License for more details.
20
21// You should have received a copy of the GNU General Public License along
22// with this library; see the file COPYING. If not, write to the Free
23// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
24// USA.
25
26// As a special exception, you may use this file as part of a free software
27// library without restriction. Specifically, if other files instantiate
28// templates or use macros or inline functions from this file, or you compile
29// this file and link it with other files to produce an executable, this
30// file does not by itself cause the resulting executable to be covered by
31// the GNU General Public License. This exception does not however
32// invalidate any other reasons why the executable file might be covered by
33// the GNU General Public License.
34
35#include <thread>
36#include <system_error>
37#include <testsuite_hooks.h>
38
39int total = 0;
40
41// Functor has internal state.
42struct moveable
43{
44 int i;
45
46 moveable() = default;
47 ~moveable() = default;
48 moveable(const moveable& c) = delete;
49 moveable& operator=(const moveable&) = delete;
50
51 moveable(int j): i(j) { }
52 moveable(moveable&& m): i(m.i) { }
53
54 void operator()() const { total += i; }
55};
56
57// Two threads called by same functor type, different functor objects
58// that have different state. Make sure each thread calls the correct
59// functor.
60void test09()
61{
62 bool test __attribute__((unused)) = true;
63
64 try
65 {
66 // first
67 moveable m1(60);
68 std::thread t1(std::move(m1));
69 t1.join();
70 VERIFY( total == 60 );
71
72 // second
73 moveable m2(600);
74 std::thread t2(std::move(m2));
75 t2.join();
76 VERIFY( total == 660 ); // Not 120...
77 }
78 catch (const std::system_error&)
79 {
80 VERIFY( false );
81 }
82 catch (...)
83 {
84 VERIFY( false );
85 }
86}
87
88int main()
89{
90 test09();
91 return 0;
92}