[OPENMP] Emit warning for non-trivial types in map clauses.
If the mapped type is non-trivial, the warning message is emitted for
better user experience.
llvm-svn: 326251
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index 7421da4..86b6091 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -11527,12 +11527,16 @@
}
static bool CheckTypeMappable(SourceLocation SL, SourceRange SR, Sema &SemaRef,
- DSAStackTy *Stack, QualType QTy) {
+ DSAStackTy *Stack, QualType QTy,
+ bool FullCheck = true) {
NamedDecl *ND;
if (QTy->isIncompleteType(&ND)) {
SemaRef.Diag(SL, diag::err_incomplete_type) << QTy << SR;
return false;
}
+ if (FullCheck && !SemaRef.CurContext->isDependentContext() &&
+ !QTy.isTrivialType(SemaRef.Context))
+ SemaRef.Diag(SL, diag::warn_omp_non_trivial_type_mapped) << QTy << SR;
return true;
}
@@ -12882,7 +12886,8 @@
ValueDecl *VD) {
if (VD->hasAttr<OMPDeclareTargetDeclAttr>())
return true;
- if (!CheckTypeMappable(SL, SR, SemaRef, Stack, VD->getType()))
+ if (!CheckTypeMappable(SL, SR, SemaRef, Stack, VD->getType(),
+ /*FullCheck=*/false))
return false;
return true;
}