https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110347

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tobias Burnus <bur...@gcc.gnu.org>:

https://gcc.gnu.org/g:4f82d5a95a244d0aa4f8b2541b47a21bce8a191b

commit r14-9257-g4f82d5a95a244d0aa4f8b2541b47a21bce8a191b
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Fri Mar 1 17:26:42 2024 +0100

    OpenMP/C++: Fix (first)private clause with member variables [PR110347]

    OpenMP permits '(first)private' for C++ member variables, which GCC handles
    by tagging those by DECL_OMP_PRIVATIZED_MEMBER, adding a temporary VAR_DECL
    and DECL_VALUE_EXPR pointing to the 'this->member_var' in the C++ front
end.

    The idea is that in omp-low.cc, the DECL_VALUE_EXPR is used before the
    region (for 'firstprivate'; ignored for 'private') while in the region,
    the DECL itself is used.

    In gimplify, the value expansion is suppressed and deferred if the
      lang_hooks.decls.omp_disregard_value_expr (decl, shared)
    returns true - which is never the case if 'shared' is true. In OpenMP 4.5,
    only 'map' and 'use_device_ptr' was permitted for the 'target' directive.
    And when OpenMP 5.0's 'private'/'firstprivate' clauses was added, the
    the update that now 'shared' argument could be false was missed. The
    respective check has now been added.

    2024-03-01  Jakub Jelinek  <ja...@redhat.com>
                Tobias Burnus  <tbur...@baylibre.com>

            PR c++/110347

    gcc/ChangeLog:

            * gimplify.cc (omp_notice_variable): Fix 'shared' arg to
            lang_hooks.decls.omp_disregard_value_expr for
            (first)private in target regions.

    libgomp/ChangeLog:

            * testsuite/libgomp.c++/target-lambda-3.C: Moved from
            gcc/testsuite/g++.dg/gomp/ and fixed is-mapped handling.
            * testsuite/libgomp.c++/target-lambda-1.C: Modify to also
            also work without offloading.
            * testsuite/libgomp.c++/firstprivate-1.C: New test.
            * testsuite/libgomp.c++/firstprivate-2.C: New test.
            * testsuite/libgomp.c++/private-1.C: New test.
            * testsuite/libgomp.c++/private-2.C: New test.
            * testsuite/libgomp.c++/target-lambda-4.C: New test.
            * testsuite/libgomp.c++/use_device_ptr-1.C: New test.

    gcc/testsuite/ChangeLog:

            * g++.dg/gomp/target-lambda-1.C: Moved to become a
            run-time test under testsuite/libgomp.c++.

    Co-authored-by: Tobias Burnus <tbur...@baylibre.com>
  • [Bug c++/110347] [OpenMP] priva... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to