diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2015-07-16 04:19:43 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2015-07-16 04:19:43 +0000 |
commit | 0d08a7ffba519aa7f21b8ac1e2194bf348b34eea (patch) | |
tree | df3fd5e841153fc1c559c50b8d11a101fe0fa22b /clang/lib | |
parent | 501a7819989f51b50f88fa9b06b16b8111883ec9 (diff) | |
download | bcm5719-llvm-0d08a7ffba519aa7f21b8ac1e2194bf348b34eea.tar.gz bcm5719-llvm-0d08a7ffba519aa7f21b8ac1e2194bf348b34eea.zip |
[OPENMP] Fixed detection of canonical loops with random access iterators.
Add handling of iterators with copy/move constructors with default arguments + converting template constructors.
llvm-svn: 242382
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 239ede5bb65..e11ab82f88c 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -2290,8 +2290,9 @@ bool OpenMPIterationSpaceChecker::SetVarAndLB(VarDecl *NewVar, VarRef = NewVarRefExpr; if (auto *CE = dyn_cast_or_null<CXXConstructExpr>(NewLB)) if (const CXXConstructorDecl *Ctor = CE->getConstructor()) - if (Ctor->isCopyConstructor() && CE->getNumArgs() == 1 && - CE->getArg(0) != nullptr) + if ((Ctor->isCopyOrMoveConstructor() || + Ctor->isConvertingConstructor(/*AllowExplicit=*/false)) && + CE->getNumArgs() > 0 && CE->getArg(0) != nullptr) NewLB = CE->getArg(0)->IgnoreParenImpCasts(); LB = NewLB; return false; @@ -2426,8 +2427,9 @@ static const VarDecl *GetInitVarDecl(const Expr *E) { E = getExprAsWritten(E); if (auto *CE = dyn_cast_or_null<CXXConstructExpr>(E)) if (const CXXConstructorDecl *Ctor = CE->getConstructor()) - if (Ctor->isCopyConstructor() && CE->getNumArgs() == 1 && - CE->getArg(0) != nullptr) + if ((Ctor->isCopyOrMoveConstructor() || + Ctor->isConvertingConstructor(/*AllowExplicit=*/false)) && + CE->getNumArgs() > 0 && CE->getArg(0) != nullptr) E = CE->getArg(0)->IgnoreParenImpCasts(); auto DRE = dyn_cast_or_null<DeclRefExpr>(E); if (!DRE) |