1 /* { dg-do run } */ 2 3 #include <omp.h> 4 5 extern void abort (void); 6 7 #define LLONG_MAX __LONG_LONG_MAX__ 8 #define ULLONG_MAX (LLONG_MAX * 2ULL + 1) 9 #define INT_MAX __INT_MAX__ 10 11 int v; 12 13 int test1(void)14test1 (void) 15 { 16 int e = 0, cnt = 0; 17 long long i; 18 unsigned long long j; 19 char buf[6], *p; 20 21 #pragma omp for schedule(dynamic,1) collapse(2) nowait 22 for (i = LLONG_MAX - 30001; i <= LLONG_MAX - 10001; i += 10000) 23 for (j = 20; j <= LLONG_MAX - 70; j += LLONG_MAX + 50ULL) 24 if ((i != LLONG_MAX - 30001 25 && i != LLONG_MAX - 20001 26 && i != LLONG_MAX - 10001) 27 || j != 20) 28 e = 1; 29 else 30 cnt++; 31 if (e || cnt != 3) 32 abort (); 33 else 34 cnt = 0; 35 36 #pragma omp for schedule(guided,1) collapse(2) nowait 37 for (i = -LLONG_MAX + 30000; i >= -LLONG_MAX + 10000; i -= 10000) 38 for (j = ULLONG_MAX - 3; j >= LLONG_MAX + 70ULL; j -= LLONG_MAX + 50ULL) 39 if ((i != -LLONG_MAX + 30000 40 && i != -LLONG_MAX + 20000 41 && i != -LLONG_MAX + 10000) 42 || j != ULLONG_MAX - 3) 43 e = 1; 44 else 45 cnt++; 46 if (e || cnt != 3) 47 abort (); 48 else 49 cnt = 0; 50 51 #pragma omp for schedule(static,1) collapse(2) nowait 52 for (i = LLONG_MAX - 30001; i <= LLONG_MAX - 10001; i += 10000) 53 for (j = 20; j <= LLONG_MAX - 70 + v; j += LLONG_MAX + 50ULL) 54 if ((i != LLONG_MAX - 30001 55 && i != LLONG_MAX - 20001 56 && i != LLONG_MAX - 10001) 57 || j != 20) 58 e = 1; 59 else 60 cnt++; 61 if (e || cnt != 3) 62 abort (); 63 else 64 cnt = 0; 65 66 #pragma omp for schedule(static) collapse(2) nowait 67 for (i = -LLONG_MAX + 30000 + v; i >= -LLONG_MAX + 10000; i -= 10000) 68 for (j = ULLONG_MAX - 3; j >= LLONG_MAX + 70ULL; j -= LLONG_MAX + 50ULL) 69 if ((i != -LLONG_MAX + 30000 70 && i != -LLONG_MAX + 20000 71 && i != -LLONG_MAX + 10000) 72 || j != ULLONG_MAX - 3) 73 e = 1; 74 else 75 cnt++; 76 if (e || cnt != 3) 77 abort (); 78 else 79 cnt = 0; 80 81 #pragma omp for schedule(runtime) collapse(2) nowait 82 for (i = 10; i < 30; i++) 83 for (p = buf; p <= buf + 4; p += 2) 84 if (i < 10 || i >= 30 || (p != buf && p != buf + 2 && p != buf + 4)) 85 e = 1; 86 else 87 cnt++; 88 if (e || cnt != 60) 89 abort (); 90 else 91 cnt = 0; 92 93 return 0; 94 } 95 96 int main(void)97main (void) 98 { 99 if (2 * sizeof (int) != sizeof (long long)) 100 return 0; 101 asm volatile ("" : "+r" (v)); 102 omp_set_schedule (omp_sched_dynamic, 1); 103 test1 (); 104 return 0; 105 } 106