summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2015-07-16 04:19:43 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2015-07-16 04:19:43 +0000
commit0d08a7ffba519aa7f21b8ac1e2194bf348b34eea (patch)
treedf3fd5e841153fc1c559c50b8d11a101fe0fa22b /clang/lib
parent501a7819989f51b50f88fa9b06b16b8111883ec9 (diff)
downloadbcm5719-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.cpp10
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)
OpenPOWER on IntegriCloud