aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-parser.c2
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/c-c++-common/gomp/pr51360.c27
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr51360.C34
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);
+}