diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2018-02-27 17:42:00 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2018-02-27 17:42:00 +0000 |
commit | 2819260b357e7fdb66550a3737cc57f1a1aa09d6 (patch) | |
tree | a48f3c010dd6e0eb57232954bab4fa77638d7036 /clang/lib/Sema/SemaOpenMP.cpp | |
parent | db3ea4c0d918aca4dffb74c1b3836474e625a263 (diff) | |
download | bcm5719-llvm-2819260b357e7fdb66550a3737cc57f1a1aa09d6.tar.gz bcm5719-llvm-2819260b357e7fdb66550a3737cc57f1a1aa09d6.zip |
[OPENMP] Allow multiple mappings for member expressions for pointers.
If several member expressions are mapped and they reference the same
address as a base, but access different members, this must be allowed.
llvm-svn: 326212
Diffstat (limited to 'clang/lib/Sema/SemaOpenMP.cpp')
-rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 88c993d0f79..7421da43e20 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -11987,14 +11987,20 @@ static bool CheckMapConflicts( DerivedLoc, diag::err_omp_pointer_mapped_along_with_derived_section) << DerivedLoc; - } else { + SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) + << RE->getSourceRange(); + return true; + } else if (CI->getAssociatedExpression()->getStmtClass() != + SI->getAssociatedExpression()->getStmtClass() || + CI->getAssociatedDeclaration()->getCanonicalDecl() == + SI->getAssociatedDeclaration()->getCanonicalDecl()) { assert(CI != CE && SI != SE); - SemaRef.Diag(DerivedLoc, diag::err_omp_same_pointer_derreferenced) + SemaRef.Diag(DerivedLoc, diag::err_omp_same_pointer_dereferenced) << DerivedLoc; + SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) + << RE->getSourceRange(); + return true; } - SemaRef.Diag(RE->getExprLoc(), diag::note_used_here) - << RE->getSourceRange(); - return true; } // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.4] |