testsuite/libgomp.c/pr33880.c

Go to the documentation of this file.
00001 /* PR middle-end/33880 */
00002 /* { dg-do run } */
00003 
00004 extern void abort (void);
00005 
00006 void
00007 test1 (void)
00008 {
00009   int i = 0, j = 0;
00010   void bar (void)
00011   {
00012     i++;
00013     j++;
00014   }
00015   bar ();
00016   #pragma omp parallel for num_threads(4)
00017     for (i = 0; i < 100; i++)
00018       #pragma omp atomic
00019     j += 1;
00020   if (j != 101)
00021     abort ();
00022   #pragma omp parallel for lastprivate(i) num_threads(2)
00023     for (i = 0; i < 100; i++)
00024       #pragma omp atomic
00025     j += 1;
00026   if (i != 100)
00027     abort ();
00028   i = 3;
00029   bar ();
00030   if (j != 202)
00031     abort ();
00032   if (i != 4)
00033     abort ();
00034 }
00035 
00036 void
00037 test2 (void)
00038 {
00039   int i = -1, j = 99, k, l = 9, m = 0;
00040   void bar (void)
00041   {
00042     i++;
00043     j++;
00044     l++;
00045     m++;
00046   }
00047   bar ();
00048   #pragma omp parallel for num_threads(4)
00049     for (k = i; k < j; k += l)
00050       #pragma omp atomic
00051     m += 1;
00052   bar ();
00053   if (i != 1 || j != 101 || l != 11 || m != 12)
00054     abort ();
00055 }
00056 
00057 void
00058 test3 (void)
00059 {
00060   int i, j, k, l, m;
00061   void bar (void)
00062   {
00063   #pragma omp parallel for num_threads(4)
00064     for (i = j; i < k; i += l)
00065       #pragma omp atomic
00066         m += 1;
00067   }
00068   void baz (void)
00069   {
00070   #pragma omp parallel for num_threads(2) lastprivate(i)
00071     for (i = j; i < k * 2; i += l / 2)
00072       #pragma omp atomic
00073         m += 1;
00074   }
00075   i = 7;
00076   j = 0;
00077   k = 100;
00078   l = 2;
00079   m = 0;
00080   bar ();
00081   if (j != 0 || k != 100 || l != 2 || m != 50)
00082     abort ();
00083   baz ();
00084   if (i != 200 || j != 0 || k != 100 || l != 2 || m != 250)
00085     abort ();
00086 }
00087 
00088 void
00089 test4 (void)
00090 {
00091   int i, j, k, l, m = 0;
00092   int foo (void)
00093   {
00094     return j;
00095   }
00096   int bar (void)
00097   {
00098     return k;
00099   }
00100   int baz (void)
00101   {
00102     return l;
00103   }
00104   j = 0;
00105   k = 1000;
00106   l = 2;
00107   #pragma omp parallel for num_threads(8) lastprivate(i)
00108   for (i = foo (); i < bar (); i += baz ())
00109     #pragma omp atomic
00110       m += 1;
00111   if (i != 1000 || m != 500 || j != 0 || k != 1000 || l != 2)
00112     abort ();
00113 }
00114 
00115 int
00116 main (void)
00117 {
00118   test1 ();
00119   test2 ();
00120   test3 ();
00121   test4 ();
00122   return 0;
00123 }

Generated on Fri Apr 5 05:38:10 2013 for Libgomp by  doxygen 1.4.7