123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /* PR middle-end/93566 */
- /* { dg-additional-options "-std=c99" } */
- extern void abort (void);
- void
- foo (int *x)
- {
- void nest (void) {
- #pragma omp parallel for reduction(+:x[:10])
- for (int i = 0; i < 1024; i++)
- for (int j = 0; j < 10; j++)
- x[j] += j * i;
- }
- nest ();
- for (int i = 0; i < 10; i++)
- if (x[i] != 1023 * 1024 / 2 * i)
- abort ();
- }
- void
- bar (void)
- {
- int x[10] = {};
- void nest (void) {
- #pragma omp parallel for reduction(+:x[:10])
- for (int i = 0; i < 1024; i++)
- for (int j = 0; j < 10; j++)
- x[j] += j * i;
- }
- nest ();
- for (int i = 0; i < 10; i++)
- if (x[i] != 1023 * 1024 / 2 * i)
- abort ();
- }
- void
- baz (void)
- {
- int x[10] = {};
- void nest (void) {
- #pragma omp parallel for reduction(+:x[2:5])
- for (int i = 0; i < 1024; i++)
- for (int j = 2; j < 7; j++)
- x[j] += j * i;
- }
- nest ();
- for (int i = 2; i < 7; i++)
- if (x[i] != 1023 * 1024 / 2 * i)
- abort ();
- }
- void
- qux (int *x)
- {
- void nest (void) { x++; }
- nest ();
- #pragma omp parallel for reduction(+:x[:9])
- for (int i = 0; i < 1024; i++)
- for (int j = 0; j < 9; j++)
- x[j] += j * i;
- nest ();
- for (int i = 0; i < 9; i++)
- if (x[i - 1] != 1023 * 1024 / 2 * i)
- abort ();
- }
- void
- quux (void)
- {
- int x[10];
- void nest (void) { for (int i = 0; i < 10; i++) x[i] = 0; }
- int nest2 (int i) { return x[i]; }
- nest ();
- #pragma omp parallel for reduction(+:x[:7])
- for (int i = 0; i < 1024; i++)
- for (int j = 0; j < 7; j++)
- x[j] += j * i;
- for (int i = 0; i < 7; i++)
- if (nest2 (i) != 1023 * 1024 / 2 * i)
- abort ();
- }
- void
- corge (void)
- {
- int x[10];
- void nest (void) { for (int i = 0; i < 10; i++) x[i] = 0; }
- int nest2 (int i) { return x[i]; }
- nest ();
- #pragma omp parallel for reduction(+:x[2:4])
- for (int i = 0; i < 1024; i++)
- for (int j = 2; j < 6; j++)
- x[j] += j * i;
- for (int i = 2; i < 6; i++)
- if (nest2 (i) != 1023 * 1024 / 2 * i)
- abort ();
- }
- int
- main ()
- {
- int a[10] = {};
- foo (a);
- bar ();
- baz ();
- for (int i = 0; i < 10; i++)
- a[i] = 0;
- qux (a);
- quux ();
- corge ();
- return 0;
- }
|