Mercurial > hg > CbC > CbC_gcc
view libgomp/testsuite/libgomp.c++/ctor-3.C @ 25:2476ed92181e
modified machine description of i386 for support indirect sibcall attributed fastcall.
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 27 Oct 2009 16:04:06 +0900 |
parents | a06113de4d67 |
children |
line wrap: on
line source
// { dg-do run } #include <omp.h> #include <assert.h> struct B { static int icount; static int dcount; static int ccount; static B *e_inner; static B *e_outer; B(); B(int); B(const B &); ~B(); B& operator=(const B &); void doit(); }; int B::icount; int B::dcount; int B::ccount; B * B::e_inner; B * B::e_outer; B::B() { #pragma omp atomic icount++; } B::B(int) { e_outer = this; } B::~B() { #pragma omp atomic dcount++; } B& B::operator= (const B &b) { assert (&b == e_inner); assert (this == e_outer); #pragma omp atomic ccount++; return *this; } void B::doit() { #pragma omp critical { assert (e_inner == 0); e_inner = this; } } static int nthreads; void foo() { B b(0); #pragma omp parallel sections lastprivate(b) { #pragma omp section nthreads = omp_get_num_threads (); #pragma omp section b.doit (); } } int main() { omp_set_dynamic (0); omp_set_num_threads (4); foo(); assert (B::ccount == 1); assert (B::icount == nthreads); assert (B::dcount == nthreads+1); return 0; }