Commit d90c0a59 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/63249 ([OpenMP] Spurious »set but not used« warnings when actually…

re PR c++/63249 ([OpenMP] Spurious »set but not used« warnings when actually used in OpenMP target's array section's lower-bound and length)

	PR c++/63249
	* semantics.c (handle_omp_array_sections_1): Call mark_rvalue_use
	on low_bound and length.

	* g++.dg/gomp/pr63249.C: New test.
	* c-c++-common/gomp/pr63249.c: New test.

2014-09-25  Thomas Schwinge  <thomas@codesourcery.com>

	PR c++/63249
	* c-parser.c (c_parser_omp_variable_list): Call mark_exp_read
	on low_bound and length.

From-SVN: r215580
parent a16ee379
2014-09-25 Jakub Jelinek <jakub@redhat.com>
PR c++/63249
* c-parser.c (c_parser_omp_variable_list): Call mark_exp_read
on low_bound and length.
2014-09-24 Marek Polacek <polacek@redhat.com> 2014-09-24 Marek Polacek <polacek@redhat.com>
PR c/61405 PR c/61405
......
...@@ -9882,7 +9882,10 @@ c_parser_omp_variable_list (c_parser *parser, ...@@ -9882,7 +9882,10 @@ c_parser_omp_variable_list (c_parser *parser,
c_parser_consume_token (parser); c_parser_consume_token (parser);
if (!c_parser_next_token_is (parser, CPP_COLON)) if (!c_parser_next_token_is (parser, CPP_COLON))
{
low_bound = c_parser_expression (parser).value; low_bound = c_parser_expression (parser).value;
mark_exp_read (low_bound);
}
if (c_parser_next_token_is (parser, CPP_CLOSE_SQUARE)) if (c_parser_next_token_is (parser, CPP_CLOSE_SQUARE))
length = integer_one_node; length = integer_one_node;
else else
...@@ -9895,7 +9898,10 @@ c_parser_omp_variable_list (c_parser *parser, ...@@ -9895,7 +9898,10 @@ c_parser_omp_variable_list (c_parser *parser,
break; break;
} }
if (!c_parser_next_token_is (parser, CPP_CLOSE_SQUARE)) if (!c_parser_next_token_is (parser, CPP_CLOSE_SQUARE))
{
length = c_parser_expression (parser).value; length = c_parser_expression (parser).value;
mark_exp_read (length);
}
} }
/* Look for the closing `]'. */ /* Look for the closing `]'. */
if (!c_parser_require (parser, CPP_CLOSE_SQUARE, if (!c_parser_require (parser, CPP_CLOSE_SQUARE,
......
2014-09-25 Jakub Jelinek <jakub@redhat.com>
PR c++/63249
* semantics.c (handle_omp_array_sections_1): Call mark_rvalue_use
on low_bound and length.
2014-09-24 Aldy Hernandez <aldyh@redhat.com> 2014-09-24 Aldy Hernandez <aldyh@redhat.com>
* class.c, decl.c, optimize.c: Rename all instances of * class.c, decl.c, optimize.c: Rename all instances of
......
...@@ -4291,6 +4291,10 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types, ...@@ -4291,6 +4291,10 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
length); length);
return error_mark_node; return error_mark_node;
} }
if (low_bound)
low_bound = mark_rvalue_use (low_bound);
if (length)
length = mark_rvalue_use (length);
if (low_bound if (low_bound
&& TREE_CODE (low_bound) == INTEGER_CST && TREE_CODE (low_bound) == INTEGER_CST
&& TYPE_PRECISION (TREE_TYPE (low_bound)) && TYPE_PRECISION (TREE_TYPE (low_bound))
......
2014-09-25 Jakub Jelinek <jakub@redhat.com>
PR c++/63249
* g++.dg/gomp/pr63249.C: New test.
* c-c++-common/gomp/pr63249.c: New test.
2014-09-25 Tobias Burnus <burnus@net-b.de> 2014-09-25 Tobias Burnus <burnus@net-b.de>
* gfortran.dg/coarray/collectives_3.f90: New. * gfortran.dg/coarray/collectives_3.f90: New.
......
/* PR c++/63249 */
/* { dg-do compile } */
/* { dg-options "-Wall -W -fopenmp" } */
int
foo (int *v, int A, int B) /* { dg-bogus "set but not used" } */
{
int r = 0;
int a = 2; /* { dg-bogus "set but not used" } */
int b = 4; /* { dg-bogus "set but not used" } */
#pragma omp target map(to: v[a:b])
r |= v[3];
#pragma omp target map(to: v[A:B])
r |= v[3];
return r;
}
// PR c++/63249
// { dg-do compile }
// { dg-options "-Wall -W -fopenmp" }
template <int N>
int
foo (int *v, int A, int B) // { dg-bogus "set but not used" }
{
int r = 0;
int a = 2; // { dg-bogus "set but not used" }
int b = 4; // { dg-bogus "set but not used" }
#pragma omp target map(to: v[a:b])
r |= v[3];
#pragma omp target map(to: v[A:B])
r |= v[3];
return r;
}
template <typename T>
int
bar (T *v, T A, T B) // { dg-bogus "set but not used" }
{
T r = 0, a = 2, b = 4; // { dg-bogus "set but not used" }
#pragma omp target map(to: v[a:b])
r |= v[3];
#pragma omp target map(to: v[A:B])
r |= v[3];
return r;
}
int
baz (int *v, int A, int B)
{
return foo<0> (v, A, B) + bar (v, A, B);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment