[PATCH, OpenACC] Support C++ "this" in OpenACC directives (PR66053)

Julian Brown julian@codesourcery.com
Thu Aug 30 19:32:00 GMT 2018


This patch (by Joseph) allows "this" to be used in OpenACC directives,
following -- IIUC -- the behaviour of other compilers. The standard (as
of OpenACC 2.5) does not appear to have explicit language either
permitting or forbidding such usage.

Joseph's original commentary is in the bug report (ca. 2015,
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66053):

"This patch, for gomp-4_0-branch, adds support for C++ "this" in
OpenACC directives.  (This patch does not do anything to handle OpenMP
differently from OpenACC; that - bug 66053 - will need to be resolved
for mainline, either deciding these cases should be accepted for
OpenMP or making the parsing only accept them in OpenACC directives
and not OpenMP ones.)

"Apart from parsing, it's necessary to prevent the "cannot take the
address of 'this', which is an rvalue expression" error from appearing
when "this" is used in such contexts.  This patch duly adds a new
argument to cxx_mark_addressable (default false so callers don't all
need to change) to allow disabling that error, passing that argument
in all calls that seem relevant to OpenACC directives."

AFAICT though, this attached version of the patch does still forbid
"this" in OpenMP directives (apart from "declare simd"). I couldn't see
that there was any change to the OpenMP spec language in 4.5.

Tested with offloading to NVPTX and bootstrapped.

OK to apply?

Julian

ChangeLog

20xx-xx-xx  Joseph Myers  <joseph@codesourcery.com>

        PR C++/66053

        gcc/cp/
        * cp-tree.h (enum cxx_mark_addressable_flags): New.
        (cxx_mark_addressable): Use it.  Adjust users.
        * parser.c (cp_parser_omp_var_list_no_open): Handle RID_THIS.
        * semantics.c (handle_omp_array_sections_1)
        (handle_omp_array_sections, finish_omp_reduction_clause)
        (finish_omp_clauses): Pass CXX_MARK_ADDRESSABLE_FLAGS_ALLOW_THIS
        to cxx_mark_addressable.  Enforce "this" usage limitation only
        for OpenMP.
        * typeck.c (cp_build_array_ref): Adjust cxx_mark_addressble
        call. (cxx_mark_addressable): Handle
        CXX_MARK_ADDRESSABLE_FLAGS_ALLOW_THIS.

        libgomp/
        * testsuite/libgomp.oacc-c++/this.C: New test.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: this-in-openacc-directives-2.diff
Type: text/x-patch
Size: 8238 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20180830/226b7f3d/attachment.bin>


More information about the Gcc-patches mailing list