c5cdb03fb9
PR c/39495 * c-parser.c (c_parser_omp_for_loop): Call c_parser_binary_expression instead of c_parser_expression_conv, if original_code isn't one of the 4 allowed comparison codes, fail. * semantics.c (handle_omp_for_class_iterator): Swap cond operands and code if iter is the second operand. * parser.c (cp_parser_binary_expression): Add no_toplevel_fold_p argument. If it is set, don't build the toplevel expression with build_x_binary_op, but build2. (cp_parser_assignment_expression, cp_parser_omp_for_incr): Adjust callers. (cp_parser_omp_for_cond): Don't assume the first operand of the comparison must be decl. * gcc.dg/gomp/pr39495-2.c: Remove xfails. * testsuite/libgomp.c/loop-12.c: New test. * testsuite/libgomp.c/loop-11.c: New test. * testsuite/libgomp.c++/loop-11.C: New test. * testsuite/libgomp.c++/loop-12.C: New test. * testsuite/libgomp.c++/for-8.C: New test. From-SVN: r145014
277 lines
7.8 KiB
C
277 lines
7.8 KiB
C
#include <omp.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
int
|
|
test1 (void)
|
|
{
|
|
short int buf[64], *p;
|
|
int i;
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for
|
|
for (p = &buf[10]; &buf[54] > p; p++)
|
|
*p = 5;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 5 * (i >= 10 && i < 54))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for
|
|
for (p = &buf[3]; &buf[63] >= p; p += 2)
|
|
p[-2] = 6;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 6 * ((i & 1) && i <= 61))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for
|
|
for (p = &buf[16]; &buf[51] > p; p = 4 + p)
|
|
p[2] = 7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for
|
|
for (p = &buf[16]; &buf[40] >= p; p = p + 4ULL)
|
|
p[2] = -7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for
|
|
for (p = &buf[53]; &buf[9] < p; --p)
|
|
*p = 5;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 5 * (i >= 10 && i < 54))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for
|
|
for (p = &buf[63]; &buf[3] <= p; p -= 2)
|
|
p[-2] = 6;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 6 * ((i & 1) && i <= 61))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for
|
|
for (p = &buf[48]; &buf[15] < p; p = -4 + p)
|
|
p[2] = 7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for
|
|
for (p = &buf[40]; &buf[16] <= p; p = p - 4ULL)
|
|
p[2] = -7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
|
|
abort ();
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
test2 (void)
|
|
{
|
|
int buf[64], *p;
|
|
int i;
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (static, 3)
|
|
for (p = &buf[10]; &buf[54] > p; p++)
|
|
*p = 5;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 5 * (i >= 10 && i < 54))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (static, 3)
|
|
for (p = &buf[3]; &buf[63] >= p; p += 2)
|
|
p[-2] = 6;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 6 * ((i & 1) && i <= 61))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (static, 3)
|
|
for (p = &buf[16]; &buf[51] > p; p = 4 + p)
|
|
p[2] = 7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (static, 3)
|
|
for (p = &buf[16]; &buf[40] >= p; p = p + 4ULL)
|
|
p[2] = -7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (static, 3)
|
|
for (p = &buf[53]; &buf[9] < p; --p)
|
|
*p = 5;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 5 * (i >= 10 && i < 54))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (static, 3)
|
|
for (p = &buf[63]; &buf[3] <= p; p -= 2)
|
|
p[-2] = 6;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 6 * ((i & 1) && i <= 61))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (static, 3)
|
|
for (p = &buf[48]; &buf[15] < p; p = -4 + p)
|
|
p[2] = 7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (static, 3)
|
|
for (p = &buf[40]; &buf[16] <= p; p = p - 4ULL)
|
|
p[2] = -7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
|
|
abort ();
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
test3 (void)
|
|
{
|
|
int buf[64], *p;
|
|
int i;
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (dynamic, 3)
|
|
for (p = &buf[10]; &buf[54] > p; p++)
|
|
*p = 5;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 5 * (i >= 10 && i < 54))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (dynamic, 3)
|
|
for (p = &buf[3]; &buf[63] >= p; p += 2)
|
|
p[-2] = 6;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 6 * ((i & 1) && i <= 61))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (dynamic, 3)
|
|
for (p = &buf[16]; &buf[51] > p; p = 4 + p)
|
|
p[2] = 7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (dynamic, 3)
|
|
for (p = &buf[16]; &buf[40] >= p; p = p + 4ULL)
|
|
p[2] = -7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (dynamic, 3)
|
|
for (p = &buf[53]; &buf[9] < p; --p)
|
|
*p = 5;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 5 * (i >= 10 && i < 54))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (dynamic, 3)
|
|
for (p = &buf[63]; &buf[3] <= p; p -= 2)
|
|
p[-2] = 6;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 6 * ((i & 1) && i <= 61))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (dynamic, 3)
|
|
for (p = &buf[48]; &buf[15] < p; p = -4 + p)
|
|
p[2] = 7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (dynamic, 3)
|
|
for (p = &buf[40]; &buf[16] <= p; p = p - 4ULL)
|
|
p[2] = -7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
|
|
abort ();
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
test4 (void)
|
|
{
|
|
int buf[64], *p;
|
|
int i;
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (runtime)
|
|
for (p = &buf[10]; &buf[54] > p; p++)
|
|
*p = 5;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 5 * (i >= 10 && i < 54))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (runtime)
|
|
for (p = &buf[3]; &buf[63] >= p; p += 2)
|
|
p[-2] = 6;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 6 * ((i & 1) && i <= 61))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (runtime)
|
|
for (p = &buf[16]; &buf[51] > p; p = 4 + p)
|
|
p[2] = 7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (runtime)
|
|
for (p = &buf[16]; &buf[40] >= p; p = p + 4ULL)
|
|
p[2] = -7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (runtime)
|
|
for (p = &buf[53]; &buf[9] < p; --p)
|
|
*p = 5;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 5 * (i >= 10 && i < 54))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (runtime)
|
|
for (p = &buf[63]; &buf[3] <= p; p -= 2)
|
|
p[-2] = 6;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 6 * ((i & 1) && i <= 61))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (runtime)
|
|
for (p = &buf[48]; &buf[15] < p; p = -4 + p)
|
|
p[2] = 7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
|
|
abort ();
|
|
memset (buf, '\0', sizeof (buf));
|
|
#pragma omp parallel for schedule (runtime)
|
|
for (p = &buf[40]; &buf[16] <= p; p = p - 4ULL)
|
|
p[2] = -7;
|
|
for (i = 0; i < 64; i++)
|
|
if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
|
|
abort ();
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
test1 ();
|
|
test2 ();
|
|
test3 ();
|
|
omp_set_schedule (omp_sched_static, 0);
|
|
test4 ();
|
|
omp_set_schedule (omp_sched_static, 3);
|
|
test4 ();
|
|
omp_set_schedule (omp_sched_dynamic, 5);
|
|
test4 ();
|
|
omp_set_schedule (omp_sched_guided, 2);
|
|
test4 ();
|
|
return 0;
|
|
}
|