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>
PR c/61405
......
......@@ -9882,7 +9882,10 @@ c_parser_omp_variable_list (c_parser *parser,
c_parser_consume_token (parser);
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))
length = integer_one_node;
else
......@@ -9895,7 +9898,10 @@ c_parser_omp_variable_list (c_parser *parser,
break;
}
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 `]'. */
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>
* 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,
length);
return error_mark_node;
}
if (low_bound)
low_bound = mark_rvalue_use (low_bound);
if (length)
length = mark_rvalue_use (length);
if (low_bound
&& TREE_CODE (low_bound) == INTEGER_CST
&& 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>
* 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