URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgomp/] [testsuite/] [libgomp.c++/] [pr27337.C] - Rev 735
Compare with Previous | Blame | View Log
// PR middle-end/27337// { dg-do run }#include <omp.h>extern "C" void abort (void);struct S{S ();~S ();S (const S &);int i;};int n[3];S::S () : i(18){if (omp_get_thread_num () != 0)#pragma omp atomicn[0]++;}S::~S (){if (omp_get_thread_num () != 0)#pragma omp atomicn[1]++;}S::S (const S &x){if (x.i != 18)abort ();i = 118;if (omp_get_thread_num () != 0)#pragma omp atomicn[2]++;}Sfoo (){int i;S ret;#pragma omp parallel for firstprivate (ret) lastprivate (ret) \schedule (static, 1) num_threads (4)for (i = 0; i < 4; i++)ret.i += omp_get_thread_num ();return ret;}Sbar (){int i;S ret;#pragma omp parallel for num_threads (4)for (i = 0; i < 4; i++)#pragma omp atomicret.i += omp_get_thread_num () + 1;return ret;}S x;intmain (void){omp_set_dynamic (false);x = foo ();if (n[0] != 0 || n[1] != 3 || n[2] != 3)abort ();if (x.i != 118 + 3)abort ();x = bar ();if (n[0] != 0 || n[1] != 3 || n[2] != 3)abort ();if (x.i != 18 + 0 + 1 + 2 + 3 + 4)abort ();return 0;}
