[committed,openmp/openacc] Tweak error message for mapped parameters

Message ID 8e0e62b1-882e-3735-79b7-67b5149eedd7@codesourcery.com
State Superseded
Headers show
Series
  • [committed,openmp/openacc] Tweak error message for mapped parameters
Related show

Commit Message

Andrew Stubbs July 5, 2019, 4:03 p.m.
On 05/07/2019 15:49, Jakub Jelinek wrote:
>> OK, here is an alternative patch that merely tries to make the error message

>> more informative.

>>

>> Basically, the user needs to get past "it isn't working but I need that

>> value in this kernel", so hopefully this will help get them there.

>>

>> WDYT?

> 

> I don't like it, I'd end the message where you put ;, the rest doesn't make

> sense and will just confuse users.  For one, the compiler should know if the

> parameter needs to be copied or not, so doesn't need to talk about

> probability thereof, and if it needs to be copied, it should be the compiler

> that arranges that (PR90779) and the user has no way to overide or force

> that behavior.


Here's what Jakub approved via IRC. Now committed.

Thanks Jakub

Andrew

Patch

Tweak error message for mapped parameters.

2019-07-05  Andrew Stubbs  <ams@codesourcery.com>

	gcc/fortran/
	* openmp.c (resolve_omp_clauses): Add custom error messages for
	parameters in map clauses.

diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 1c7bce6c300..44fcb9db8c6 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -4208,8 +4208,21 @@  resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses,
 		  continue;
 	      }
 	  }
-	gfc_error ("Object %qs is not a variable at %L", n->sym->name,
-		   &n->where);
+	if (list == OMP_LIST_MAP
+	    && n->sym->attr.flavor == FL_PARAMETER)
+	  {
+	    if (openacc)
+	      gfc_error ("Object %qs is not a variable at %L; parameters"
+			 " cannot be and need not be copied", n->sym->name,
+			 &n->where);
+	    else
+	      gfc_error ("Object %qs is not a variable at %L; parameters"
+			 " cannot be and need not be mapped", n->sym->name,
+			 &n->where);
+	  }
+	else
+	  gfc_error ("Object %qs is not a variable at %L", n->sym->name,
+		     &n->where);
       }
 
   for (list = 0; list < OMP_LIST_NUM; list++)