[OpenMP] Require trivially copyable type for mapping
authorJonas Hahnfeld <hahnjo@hahnjo.de>
Sat, 7 Dec 2019 12:31:46 +0000 (13:31 +0100)
committerJonas Hahnfeld <hahnjo@hahnjo.de>
Sat, 7 Dec 2019 12:31:46 +0000 (13:31 +0100)
commit071dca24cea9dcabe25cbe98c4053d874183be37
treeb80381d495a6141d27e40183ae080eb7a6d022de
parent9db13b5a7d43096a9ab5f7cef6e1b7e2dc9c9c63
[OpenMP] Require trivially copyable type for mapping

A trivially copyable type provides a trivial copy constructor and a trivial
copy assignment operator. This is enough for the runtime to memcpy the data
to the device. Additionally there must be no virtual functions or virtual
base classes and the destructor is guaranteed to be trivial, ie performs
no action.
The runtime does not require trivial default constructors because on alloc
the memory is undefined. Thus, weaken the warning to be only issued if the
mapped type is not trivially copyable.

Differential Revision: https://reviews.llvm.org/D71134
31 files changed:
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/Sema/SemaOpenMP.cpp
clang/test/OpenMP/distribute_firstprivate_messages.cpp
clang/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp
clang/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp
clang/test/OpenMP/distribute_parallel_for_private_messages.cpp
clang/test/OpenMP/distribute_parallel_for_reduction_messages.cpp
clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp
clang/test/OpenMP/distribute_parallel_for_simd_private_messages.cpp
clang/test/OpenMP/distribute_parallel_for_simd_shared_messages.cpp
clang/test/OpenMP/distribute_simd_aligned_messages.cpp
clang/test/OpenMP/distribute_simd_firstprivate_messages.cpp
clang/test/OpenMP/distribute_simd_lastprivate_messages.cpp
clang/test/OpenMP/distribute_simd_linear_messages.cpp
clang/test/OpenMP/distribute_simd_loop_messages.cpp
clang/test/OpenMP/distribute_simd_private_messages.cpp
clang/test/OpenMP/distribute_simd_reduction_messages.cpp
clang/test/OpenMP/target_firstprivate_messages.cpp
clang/test/OpenMP/target_parallel_for_private_messages.cpp
clang/test/OpenMP/target_parallel_for_simd_private_messages.cpp
clang/test/OpenMP/target_private_messages.cpp
clang/test/OpenMP/target_simd_private_messages.cpp
clang/test/OpenMP/target_teams_distribute_firstprivate_messages.cpp
clang/test/OpenMP/teams_distribute_loop_messages.cpp
clang/test/OpenMP/teams_distribute_parallel_for_loop_messages.cpp
clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp
clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp
clang/test/OpenMP/teams_distribute_parallel_for_simd_loop_messages.cpp
clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp
clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp
clang/test/OpenMP/teams_distribute_simd_loop_messages.cpp