@@ -1218,7 +1218,7 @@ OMPToClause *OMPToClause::Create(
12181218 const ASTContext &C, const OMPVarListLocTy &Locs, ArrayRef<Expr *> Vars,
12191219 ArrayRef<ValueDecl *> Declarations,
12201220 MappableExprComponentListsRef ComponentLists, ArrayRef<Expr *> UDMapperRefs,
1221- ArrayRef<OpenMPMotionModifierKind> MotionModifiers,
1221+ Expr *IteratorModifier, ArrayRef<OpenMPMotionModifierKind> MotionModifiers,
12221222 ArrayRef<SourceLocation> MotionModifiersLoc,
12231223 NestedNameSpecifierLoc UDMQualifierLoc, DeclarationNameInfo MapperId) {
12241224 OMPMappableExprListSizeTy Sizes;
@@ -1240,7 +1240,7 @@ OMPToClause *OMPToClause::Create(
12401240 void *Mem = C.Allocate (
12411241 totalSizeToAlloc<Expr *, ValueDecl *, unsigned ,
12421242 OMPClauseMappableExprCommon::MappableComponent>(
1243- 2 * Sizes.NumVars , Sizes.NumUniqueDeclarations ,
1243+ 2 * Sizes.NumVars + 1 , Sizes.NumUniqueDeclarations ,
12441244 Sizes.NumUniqueDeclarations + Sizes.NumComponentLists ,
12451245 Sizes.NumComponents ));
12461246
@@ -1250,6 +1250,7 @@ OMPToClause *OMPToClause::Create(
12501250 Clause->setVarRefs (Vars);
12511251 Clause->setUDMapperRefs (UDMapperRefs);
12521252 Clause->setClauseInfo (Declarations, ComponentLists);
1253+ Clause->setIteratorModifier (IteratorModifier);
12531254 return Clause;
12541255}
12551256
@@ -1258,17 +1259,19 @@ OMPToClause *OMPToClause::CreateEmpty(const ASTContext &C,
12581259 void *Mem = C.Allocate (
12591260 totalSizeToAlloc<Expr *, ValueDecl *, unsigned ,
12601261 OMPClauseMappableExprCommon::MappableComponent>(
1261- 2 * Sizes.NumVars , Sizes.NumUniqueDeclarations ,
1262+ 2 * Sizes.NumVars + 1 , Sizes.NumUniqueDeclarations ,
12621263 Sizes.NumUniqueDeclarations + Sizes.NumComponentLists ,
12631264 Sizes.NumComponents ));
1264- return new (Mem) OMPToClause (Sizes);
1265+ OMPToClause *Clause = new (Mem) OMPToClause (Sizes);
1266+ Clause->setIteratorModifier (nullptr );
1267+ return Clause;
12651268}
12661269
12671270OMPFromClause *OMPFromClause::Create (
12681271 const ASTContext &C, const OMPVarListLocTy &Locs, ArrayRef<Expr *> Vars,
12691272 ArrayRef<ValueDecl *> Declarations,
12701273 MappableExprComponentListsRef ComponentLists, ArrayRef<Expr *> UDMapperRefs,
1271- ArrayRef<OpenMPMotionModifierKind> MotionModifiers,
1274+ Expr *IteratorModifier, ArrayRef<OpenMPMotionModifierKind> MotionModifiers,
12721275 ArrayRef<SourceLocation> MotionModifiersLoc,
12731276 NestedNameSpecifierLoc UDMQualifierLoc, DeclarationNameInfo MapperId) {
12741277 OMPMappableExprListSizeTy Sizes;
@@ -1290,7 +1293,7 @@ OMPFromClause *OMPFromClause::Create(
12901293 void *Mem = C.Allocate (
12911294 totalSizeToAlloc<Expr *, ValueDecl *, unsigned ,
12921295 OMPClauseMappableExprCommon::MappableComponent>(
1293- 2 * Sizes.NumVars , Sizes.NumUniqueDeclarations ,
1296+ 2 * Sizes.NumVars + 1 , Sizes.NumUniqueDeclarations ,
12941297 Sizes.NumUniqueDeclarations + Sizes.NumComponentLists ,
12951298 Sizes.NumComponents ));
12961299
@@ -1301,6 +1304,7 @@ OMPFromClause *OMPFromClause::Create(
13011304 Clause->setVarRefs (Vars);
13021305 Clause->setUDMapperRefs (UDMapperRefs);
13031306 Clause->setClauseInfo (Declarations, ComponentLists);
1307+ Clause->setIteratorModifier (IteratorModifier);
13041308 return Clause;
13051309}
13061310
@@ -1310,10 +1314,12 @@ OMPFromClause::CreateEmpty(const ASTContext &C,
13101314 void *Mem = C.Allocate (
13111315 totalSizeToAlloc<Expr *, ValueDecl *, unsigned ,
13121316 OMPClauseMappableExprCommon::MappableComponent>(
1313- 2 * Sizes.NumVars , Sizes.NumUniqueDeclarations ,
1317+ 2 * Sizes.NumVars + 1 , Sizes.NumUniqueDeclarations ,
13141318 Sizes.NumUniqueDeclarations + Sizes.NumComponentLists ,
13151319 Sizes.NumComponents ));
1316- return new (Mem) OMPFromClause (Sizes);
1320+ OMPFromClause *Clause = new (Mem) OMPFromClause (Sizes);
1321+ Clause->setIteratorModifier (nullptr );
1322+ return Clause;
13171323}
13181324
13191325void OMPUseDevicePtrClause::setPrivateCopies (ArrayRef<Expr *> VL) {
@@ -2564,12 +2570,16 @@ template <typename T> void OMPClausePrinter::VisitOMPMotionClause(T *Node) {
25642570 OS << ' (' ;
25652571 for (unsigned I = 0 ; I < NumberOfOMPMotionModifiers; ++I) {
25662572 if (Node->getMotionModifier (I) != OMPC_MOTION_MODIFIER_unknown) {
2573+ if (Node->getMotionModifier (I) == OMPC_MOTION_MODIFIER_iterator)
2574+ PrintIterator (OS, Node, Policy);
2575+ else {
25672576 OS << getOpenMPSimpleClauseTypeName (Node->getClauseKind (),
25682577 Node->getMotionModifier (I));
25692578 if (Node->getMotionModifier (I) == OMPC_MOTION_MODIFIER_mapper)
25702579 PrintMapper (OS, Node, Policy);
25712580 if (I < ModifierCount - 1 )
25722581 OS << " , " ;
2582+ }
25732583 }
25742584 }
25752585 OS << ' :' ;
0 commit comments