Home | History | Annotate | Download | only in Sema

Lines Matching defs:Stack

32 // Stack of data-sharing attributes for variables
63 /// \brief Stack for tracking declarations used in OpenMP directives and
107 /// \brief Stack of used declaration and their data-sharing attributes.
108 StackTy Stack;
119 explicit DSAStackTy(Sema &S) : Stack(1), SemaRef(S) {}
123 Stack.push_back(SharingMapTy(DKind, DirName, CurScope, Loc));
124 Stack.back().DefaultAttrLoc = Loc;
128 assert(Stack.size() > 1 && "Data-sharing attributes stack is empty!");
129 Stack.pop_back();
140 /// \brief Returns data sharing attributes from top of the stack for the
160 return Stack.back().Directive;
164 if (Stack.size() > 2)
165 return Stack[Stack.size() - 2].Directive;
171 Stack.back().DefaultAttr = DSA_none;
172 Stack.back().DefaultAttrLoc = Loc;
176 Stack.back().DefaultAttr = DSA_shared;
177 Stack.back().DefaultAttrLoc = Loc;
181 return Stack.back().DefaultAttr;
184 return Stack.back().DefaultAttrLoc;
193 Scope *getCurScope() const { return Stack.back().CurScope; }
194 Scope *getCurScope() { return Stack.back().CurScope; }
195 SourceLocation getConstructLoc() { return Stack.back().ConstructLoc; }
202 if (Iter == std::prev(Stack.rend())) {
270 EE = std::prev(Stack.rend());
303 assert(Stack.size() > 1 && "Data sharing attributes stack is empty");
304 auto It = Stack.back().AlignedMap.find(D);
305 if (It == Stack.back().AlignedMap.end()) {
307 Stack.back().AlignedMap[D] = NewDE;
318 Stack[0].SharingMap[D].Attributes = A;
319 Stack[0].SharingMap[D].RefExpr = E;
321 assert(Stack.size() > 1 && "Data-sharing attributes stack is empty");
322 Stack.back().SharingMap[D].Attributes = A;
323 Stack.back().SharingMap[D].RefExpr = E;
328 if (Stack.size() > 2) {
329 reverse_iterator I = Iter, E = std::prev(Stack.rend());
356 if (Stack[0].SharingMap.count(D)) {
357 DVar.RefExpr = Stack[0].SharingMap[D].RefExpr;
368 if (isOpenMPLocal(D, std::next(Stack.rbegin())) && D->isLocalVarDecl() &&
426 if (Stack.back().SharingMap.count(D)) {
427 DVar.RefExpr = Stack.back().SharingMap[D].RefExpr;
428 DVar.CKind = Stack.back().SharingMap[D].Attributes;
435 return getDSA(std::next(Stack.rbegin()), D);
441 for (StackTy::reverse_iterator I = std::next(Stack.rbegin()),
442 Stack.rend());
457 for (auto I = Stack.rbegin(), EE = std::prev(Stack.rend()); I != EE; ++I) {
782 static void ReportOriginalDSA(Sema &SemaRef, DSAStackTy *Stack,
824 << getOpenMPDirectiveName(Stack->getCurrentDirective());
833 DSAStackTy *Stack;
849 OpenMPDirectiveKind DKind = Stack->getCurrentDirective();
850 DSAStackTy::DSAVarData DVar = Stack->getTopDSA(VD);
853 !Stack->isThreadPrivate(VD) && !DVar.RefExpr)
861 if (DVar.CKind == OMPC_unknown && Stack->getDefaultDSA() == DSA_none &&
872 DVar = Stack->hasInnermostDSA(VD, MatchesAnyClause(OMPC_reduction),
877 ReportOriginalDSA(SemaRef, Stack, VD, DVar);
882 DVar = Stack->getImplicitDSA(VD);
909 : Stack(S), SemaRef(SemaRef), ErrorFound(false), CS(CS) {}
995 bool CheckNestingOfRegions(Sema &SemaRef, DSAStackTy *Stack,
1074 if (Stack->getCurScope()) {
1075 auto ParentRegion = Stack->getParentDirective();
2919 DSAStackTy *Stack;
2924 DSAStackTy::DSAVarData DVar = Stack->getTopDSA(VD);
2930 Stack->hasDSA(VD, isOpenMPPrivate, MatchesAlways());
2944 explicit DSARefChecker(DSAStackTy *S) : Stack(S) {}