more accurate omp in fortran
Cesar Philippidis
cesar@codesourcery.com
Thu Oct 22 15:34:00 GMT 2015
Currently, for certain omp and oacc errors the fortran will inaccurately
report exactly where in the omp/acc construct the error has occurred. E.g.
!$acc parallel copy (i) copy (i) copy (j)
1
Error: Symbol âiâ present on multiple clauses at (1)
instead of
!$acc parallel copy (i) copy (i) copy (j)
1
Error: Symbol âiâ present on multiple clauses at (1)
The problem here is how the front end uses the locus for the construct
and not the individual clause. As a result that diagnostic pointer
points to the end of the construct.
This patch teaches gfc_resolve_omp_clauses how to use the locus of each
individual clause instead of the construct when reporting errors
involving OMP_LIST_ clauses (which are typically clauses involving
variables). It's still not perfect, but it does improve the quality of
the error reporting a little. In particular, in openacc, other compilers
are somewhat lenient in allowing variables to appear in multiple
clauses, e.g. copyin (foo) copyout (foo), but this is clearly forbidden
by the spec. I received some bug reports complaining that gfortran's
errors aren't accurate.
I've also split off the check for variables appearing in multiple
clauses into a separate function. It's a little overkill for trunk right
now, but it is used quite a bit in gomp4 for oacc declare.
I've tested these changes on x86_64. Is this ok for trunk?
Cesar
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gfc_precise_warnings.diff
Type: text/x-patch
Size: 18907 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20151022/eb0e4463/attachment.bin>
More information about the Gcc-patches
mailing list