1/* { dg-do run } */ 2 3#include <omp.h> 4extern void abort (void); 5void 6subdomain (float *x, int istart, int ipoints) 7{ 8 int i; 9 for (i = 0; i < ipoints; i++) 10 x[istart + i] = 123.456; 11} 12 13void 14sub (float *x, int npoints) 15{ 16 int iam, nt, ipoints, istart; 17#pragma omp parallel default(shared) private(iam,nt,ipoints,istart) 18 { 19 iam = omp_get_thread_num (); 20 nt = omp_get_num_threads (); 21 ipoints = npoints / nt; /* size of partition */ 22 istart = iam * ipoints; /* starting array index */ 23 if (iam == nt - 1) /* last thread may do more */ 24 ipoints = npoints - istart; 25 subdomain (x, istart, ipoints); 26 } 27} 28int 29main () 30{ 31 int i; 32 float array[10000]; 33 sub (array, 10000); 34 for (i = 0; i < 10000; i++) 35 if (array[i] < 123.45 || array[i] > 123.46) 36 abort (); 37 return 0; 38} 39