This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[OpenMP] Spurious Âset but not used warnings when actually used in OpenMP target's array section's lower-bound and length


Hi!

This is similar to what has previously been addressed in
<https://gcc.gnu.org/PR51360>,
<http://news.gmane.org/find-root.php?message_id=%3C20111215173852.GT1957%40tyan-ft48-01.lab.bos.redhat.com%3E>:

    int f(int A, int B)
    {
      int r = 0;
      extern int *v;
      int a = 2;
      int b = 4;
      int n = 3;
    
      v[n] = 0;
    
    #pragma omp target map(to: v[a:b])
      r |= v[n];
    
    #pragma omp target map(to: v[A:B])
      r |= v[n];
    
      return r;
    }

    ../../openacc/w.c: In function 'f':
    ../../openacc/w.c:6:7: warning: variable 'b' set but not used [-Wunused-but-set-variable]
       int b = 4;
           ^
    ../../openacc/w.c:5:7: warning: variable 'a' set but not used [-Wunused-but-set-variable]
       int a = 2;
           ^
    ../../openacc/w.c:1:11: warning: parameter 'A' set but not used [-Wunused-but-set-parameter]
     int f(int A, int B)
               ^
    ../../openacc/w.c:1:18: warning: parameter 'B' set but not used [-Wunused-but-set-parameter]
     int f(int A, int B)
                      ^

The following patch fixes this for C:

diff --git gcc/c/c-parser.c gcc/c/c-parser.c
index 3f4a92b..bba6edb 100644
--- gcc/c/c-parser.c
+++ gcc/c/c-parser.c
@@ -9887,7 +9887,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
@@ -9900,7 +9903,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,

How to fix it in C++?  In gcc/cp/parser.c:cp_parser_omp_var_list_no_open
similar to the C fix, or in gcc/cp/semantics.c:finish_omp_clauses as done
for PR51360?  I guess the latter is required for C++ templates?  This I
can't currently test due to
<http://news.gmane.org/find-root.php?message_id=%3C87zje7rdho.fsf%40schwinge.name%3E>.


I have not yet tested whether such an issue might also exist for Fortran.


GrÃÃe,
 Thomas

Attachment: pgpRLV25eK0ig.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]