diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-parser.c | 2 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/gomp/pr51360.c | 27 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gomp/pr51360.C | 34 |
7 files changed, 83 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9f1c952..59f205a0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-12-15 Jakub Jelinek <jakub@redhat.com> + + PR c/51360 + * c-parser.c (c_parser_omp_clause_num_threads, + c_parser_omp_clause_schedule): Call mark_exp_read. + 2011-12-15 Romain Geissler <romain.geissler@gmail.com> * builtins.def (BUILT_IN_STPNCPY_CHK): New definition. diff --git a/gcc/c-parser.c b/gcc/c-parser.c index e227137..0a268a6 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -9011,6 +9011,7 @@ c_parser_omp_clause_num_threads (c_parser *parser, tree list) { location_t expr_loc = c_parser_peek_token (parser)->location; tree c, t = c_parser_expression (parser).value; + mark_exp_read (t); t = c_fully_fold (t, false, NULL); c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>"); @@ -9218,6 +9219,7 @@ c_parser_omp_clause_schedule (c_parser *parser, tree list) here = c_parser_peek_token (parser)->location; t = c_parser_expr_no_commas (parser, NULL).value; + mark_exp_read (t); t = c_fully_fold (t, false, NULL); if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3e56008..3975b6b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-12-15 Jakub Jelinek <jakub@redhat.com> + + PR c/51360 + * semantics.c (finish_omp_clauses): For OMP_CLAUSE_NUM_THREADS_EXPR + and OMP_CLAUSE_SCHEDULE_CHUNK_EXPR call mark_rvalue_use. + 2011-12-15 Dodji Seketeli <dodji@redhat.com> PR c++/51473 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 2f2a26a..ab9227f 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -4087,6 +4087,8 @@ finish_omp_clauses (tree clauses) error ("num_threads expression must be integral"); remove = true; } + else + OMP_CLAUSE_NUM_THREADS_EXPR (c) = mark_rvalue_use (t); break; case OMP_CLAUSE_SCHEDULE: @@ -4101,6 +4103,8 @@ finish_omp_clauses (tree clauses) error ("schedule chunk size expression must be integral"); remove = true; } + else + OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = mark_rvalue_use (t); break; case OMP_CLAUSE_NOWAIT: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0691c8c..67d91ba 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2011-12-15 Jakub Jelinek <jakub@redhat.com> + PR c/51360 + * c-c++-common/gomp/pr51360.c: New test. + * g++.dg/gomp/pr51360.C: New test. + PR middle-end/49806 * gcc.dg/tree-ssa-vrp47.c: Add -fdump-tree-dom2 to dg-options. Check for x_? & y in dom2 dump and xfail the check in dom1 dump. diff --git a/gcc/testsuite/c-c++-common/gomp/pr51360.c b/gcc/testsuite/c-c++-common/gomp/pr51360.c new file mode 100644 index 0000000..c32242e --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr51360.c @@ -0,0 +1,27 @@ +/* PR c/51360 */ +/* { dg-do compile } */ +/* { dg-options "-Wunused -W -fopenmp" } */ + +void +foo (int a, int b, int c, int d) +{ + int m, n, o, p, i; + m = 6; + n = 1; + o = 5; + p = 1; + a = 6; + b = 1; + c = 5; + d = 1; + #pragma omp parallel for num_threads (m) if (n) schedule (static, o) + for (i = 0; i < 10; i++) + ; + #pragma omp parallel for num_threads (a) if (b) schedule (static, c) + for (i = 0; i < 10; i++) + ; + #pragma omp task final (p) + ; + #pragma omp task final (d) + ; +} diff --git a/gcc/testsuite/g++.dg/gomp/pr51360.C b/gcc/testsuite/g++.dg/gomp/pr51360.C new file mode 100644 index 0000000..2e63424 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr51360.C @@ -0,0 +1,34 @@ +// PR c/51360 +// { dg-do compile } +// { dg-options "-Wunused -W -fopenmp" } + +template <typename T> +void +foo (T a, T b, T c, T d) +{ + T m, n, o, p, i; + m = 6; + n = 1; + o = 5; + p = 1; + a = 6; + b = 1; + c = 5; + d = 1; + #pragma omp parallel for num_threads (m) if (n) schedule (static, o) + for (i = 0; i < 10; i++) + ; + #pragma omp parallel for num_threads (a) if (b) schedule (static, c) + for (i = 0; i < 10; i++) + ; + #pragma omp task final (p) + ; + #pragma omp task final (d) + ; +} + +void +bar () +{ + foo (0, 0, 0, 0); +} |