|  | extern | 
|  | #ifdef __cplusplus | 
|  | "C" | 
|  | #endif | 
|  | void abort (void); | 
|  | #pragma omp declare reduction (foo: int: omp_out += omp_in - 1) initializer (omp_priv = 1) | 
|  |  | 
|  | int | 
|  | main () | 
|  | { | 
|  | int i, v = 0; | 
|  | unsigned long long j; | 
|  | volatile unsigned long long sixtyfour = 64; | 
|  | int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0; | 
|  | #pragma omp parallel | 
|  | { | 
|  | #define P(str) _Pragma (#str) | 
|  | #define ONE_ORDERED_LOOP(var, i, max, n, clauses...) \ | 
|  | P (omp for ordered reduction (task, foo: var) clauses)		  \ | 
|  | for (i = 0; i < max; i++)						  \ | 
|  | {									  \ | 
|  | var++;								  \ | 
|  | P (omp task in_reduction (foo: var))				  \ | 
|  | var++;								  \ | 
|  | _Pragma ("omp ordered")						  \ | 
|  | if (v++ != i + n)						  \ | 
|  | abort ();							  \ | 
|  | }									  \ | 
|  | if (var != 128 || v != 64 + n)					  \ | 
|  | abort ();								  \ | 
|  | _Pragma ("omp barrier") | 
|  | ONE_ORDERED_LOOP (a, i, 64, 0, ) | 
|  | ONE_ORDERED_LOOP (b, i, 64, 64, schedule (monotonic: static)) | 
|  | ONE_ORDERED_LOOP (c, i, 64, 128, schedule (static, 1)) | 
|  | ONE_ORDERED_LOOP (d, i, 64, 192, schedule (monotonic: runtime)) | 
|  | ONE_ORDERED_LOOP (e, i, 64, 256, schedule (dynamic, 2)) | 
|  | ONE_ORDERED_LOOP (f, i, 64, 320, schedule (monotonic: guided, 3)) | 
|  | ONE_ORDERED_LOOP (g, i, 64, 384, schedule (auto)) | 
|  | #pragma omp single | 
|  | { v = 0; a = 0; b = 0; c = 0; d = 0; e = 0; f = 0; g = 0; } | 
|  | ONE_ORDERED_LOOP (a, j, sixtyfour, 0, ) | 
|  | ONE_ORDERED_LOOP (b, j, sixtyfour, 64, schedule (static)) | 
|  | ONE_ORDERED_LOOP (c, j, sixtyfour, 128, schedule (monotonic: static, 1)) | 
|  | ONE_ORDERED_LOOP (d, j, sixtyfour, 192, schedule (runtime)) | 
|  | ONE_ORDERED_LOOP (e, j, sixtyfour, 256, schedule (monotonic: dynamic, 2)) | 
|  | ONE_ORDERED_LOOP (f, j, sixtyfour, 320, schedule (guided, 3)) | 
|  | ONE_ORDERED_LOOP (g, j, sixtyfour, 384, schedule (monotonic: auto)) | 
|  | } | 
|  | return 0; | 
|  | } |