mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-19 07:10:25 +08:00
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
This commit is contained in:
parent
a16ee37946
commit
d90c0a5980
@ -1,3 +1,9 @@
|
||||
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,
|
||||
|
@ -1,3 +1,9 @@
|
||||
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))
|
||||
|
@ -1,3 +1,9 @@
|
||||
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.
|
||||
|
16
gcc/testsuite/c-c++-common/gomp/pr63249.c
Normal file
16
gcc/testsuite/c-c++-common/gomp/pr63249.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* 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;
|
||||
}
|
35
gcc/testsuite/g++.dg/gomp/pr63249.C
Normal file
35
gcc/testsuite/g++.dg/gomp/pr63249.C
Normal file
@ -0,0 +1,35 @@
|
||||
// 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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user