00001
00002
00003 extern void abort (void);
00004
00005 void
00006 f1 (void)
00007 {
00008 int a[4], k;
00009 void nested (int x)
00010 {
00011 a[x] = 42;
00012 }
00013
00014 for (k = 0; k < 4; k++)
00015 a[k] = 0;
00016 #pragma omp parallel for
00017 for (k = 0; k < 4; k++)
00018 nested (k);
00019
00020 if (a[0] != 42 || a[1] != 42 || a[2] != 42 || a[3] != 42)
00021 abort ();
00022 }
00023
00024 void
00025 f2 (void)
00026 {
00027 int a[4], k;
00028 void nested (void)
00029 {
00030 int l;
00031 void nested2 (int x)
00032 {
00033 a[x] = 42;
00034 }
00035 #pragma omp parallel for
00036 for (l = 0; l < 4; l++)
00037 nested2 (l);
00038 }
00039
00040 for (k = 0; k < 4; k++)
00041 a[k] = 0;
00042
00043 nested ();
00044
00045 if (a[0] != 42 || a[1] != 42 || a[2] != 42 || a[3] != 42)
00046 abort ();
00047 }
00048
00049 void
00050 f3 (void)
00051 {
00052 int a[4], b[4], c[4], k;
00053 void nested (int x)
00054 {
00055 a[x] = b[x] = c[x] = 42;
00056 }
00057
00058 for (k = 0; k < 4; k++)
00059 a[k] = b[k] = c[k] = 0;
00060 nested (0);
00061
00062 #pragma omp parallel
00063 {
00064 #pragma omp single
00065 {
00066 a[1] = 43;
00067 b[1] = 43;
00068 }
00069 #pragma omp parallel
00070 {
00071 #pragma omp single
00072 {
00073 b[2] = 44;
00074 c[2] = 44;
00075 }
00076 }
00077 }
00078
00079 if (a[0] != 42 || a[1] != 43 || a[2] != 0 || a[3] != 0)
00080 abort ();
00081 if (b[0] != 42 || b[1] != 43 || b[2] != 44 || b[3] != 0)
00082 abort ();
00083 if (c[0] != 42 || c[1] != 0 || c[2] != 44 || c[3] != 0)
00084 abort ();
00085 }
00086
00087 void
00088 f4 (void)
00089 {
00090 int a[4], b[4], c[4], k;
00091 void nested ()
00092 {
00093 #pragma omp parallel
00094 {
00095 #pragma omp single
00096 {
00097 a[1] = 43;
00098 b[1] = 43;
00099 }
00100 #pragma omp parallel
00101 {
00102 #pragma omp single
00103 {
00104 b[2] = 44;
00105 c[2] = 44;
00106 }
00107 }
00108 }
00109 }
00110
00111 for (k = 0; k < 4; k++)
00112 a[k] = b[k] = c[k] = k == 0 ? 42 : 0;
00113 nested ();
00114
00115 if (a[0] != 42 || a[1] != 43 || a[2] != 0 || a[3] != 0)
00116 abort ();
00117 if (b[0] != 42 || b[1] != 43 || b[2] != 44 || b[3] != 0)
00118 abort ();
00119 if (c[0] != 42 || c[1] != 0 || c[2] != 44 || c[3] != 0)
00120 abort ();
00121 }
00122
00123 int
00124 main (void)
00125 {
00126 f1 ();
00127 f2 ();
00128 f3 ();
00129 f4 ();
00130 return 0;
00131 }