1 /* { dg-do run } */ 2 3 #include <omp.h> 4 extern void abort (void); 5 void 6 subdomain (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 13 void 14 sub (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 } 28 int 29 main () 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