Author: rnk Date: Wed Mar 7 17:12:22 2018 New Revision: 326974 URL: http://llvm.org/viewvc/llvm-project?rev=326974&view=rev Log: Revert "[Sema] Make getCurFunction() return null outside function parsing"
This reverts r326965. It seems to have caused repeating test failures in clang/test/Sema/diagnose_if.c on some buildbots. I cannot reproduce the problem, and it's not immediately obvious what the problem is, so let's revert to green. Modified: cfe/trunk/include/clang/Sema/Sema.h cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp cfe/trunk/lib/Sema/Sema.cpp cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/lib/Sema/SemaExpr.cpp cfe/trunk/lib/Sema/SemaExprCXX.cpp cfe/trunk/lib/Sema/SemaOpenMP.cpp cfe/trunk/lib/Sema/SemaStmt.cpp cfe/trunk/lib/Sema/SemaStmtAsm.cpp Modified: cfe/trunk/include/clang/Sema/Sema.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=326974&r1=326973&r2=326974&view=diff ============================================================================== --- cfe/trunk/include/clang/Sema/Sema.h (original) +++ cfe/trunk/include/clang/Sema/Sema.h Wed Mar 7 17:12:22 2018 @@ -528,10 +528,12 @@ public: /// full expression. llvm::SmallPtrSet<Expr*, 2> MaybeODRUseExprs; - std::unique_ptr<sema::FunctionScopeInfo> PreallocatedFunctionScope; - /// \brief Stack containing information about each of the nested /// function, block, and method scopes that are currently active. + /// + /// This array is never empty. Clients should ignore the first + /// element, which is used to cache a single FunctionScopeInfo + /// that's used to parse every top-level function. SmallVector<sema::FunctionScopeInfo *, 4> FunctionScopes; typedef LazyVector<TypedefNameDecl *, ExternalSemaSource, @@ -1316,15 +1318,11 @@ public: const BlockExpr *blkExpr = nullptr); sema::FunctionScopeInfo *getCurFunction() const { - return FunctionScopes.empty() ? nullptr : FunctionScopes.back(); + return FunctionScopes.back(); } sema::FunctionScopeInfo *getEnclosingFunction() const; - void setFunctionHasBranchIntoScope(); - void setFunctionHasBranchProtectedScope(); - void setFunctionHasIndirectGoto(); - void PushCompoundScope(bool IsStmtExpr); void PopCompoundScope(); Modified: cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp?rev=326974&r1=326973&r2=326974&view=diff ============================================================================== --- cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp (original) +++ cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp Wed Mar 7 17:12:22 2018 @@ -632,19 +632,18 @@ struct CheckFallThroughDiagnostics { } // anonymous namespace -/// CheckFallThroughForBody - Check that we don't fall off the end of a +/// CheckFallThroughForFunctionDef - Check that we don't fall off the end of a /// function that should return a value. Check that we don't fall off the end /// of a noreturn function. We assume that functions and blocks not marked /// noreturn will return. static void CheckFallThroughForBody(Sema &S, const Decl *D, const Stmt *Body, const BlockExpr *blkExpr, - const CheckFallThroughDiagnostics &CD, - AnalysisDeclContext &AC, - sema::FunctionScopeInfo *FSI) { + const CheckFallThroughDiagnostics& CD, + AnalysisDeclContext &AC) { bool ReturnsVoid = false; bool HasNoReturn = false; - bool IsCoroutine = FSI->isCoroutine(); + bool IsCoroutine = S.getCurFunction() && S.getCurFunction()->isCoroutine(); if (const auto *FD = dyn_cast<FunctionDecl>(D)) { if (const auto *CBody = dyn_cast<CoroutineBodyStmt>(Body)) @@ -676,7 +675,7 @@ static void CheckFallThroughForBody(Sema SourceLocation LBrace = Body->getLocStart(), RBrace = Body->getLocEnd(); auto EmitDiag = [&](SourceLocation Loc, unsigned DiagID) { if (IsCoroutine) - S.Diag(Loc, DiagID) << FSI->CoroutinePromise->getType(); + S.Diag(Loc, DiagID) << S.getCurFunction()->CoroutinePromise->getType(); else S.Diag(Loc, DiagID); }; @@ -2144,7 +2143,7 @@ AnalysisBasedWarnings::IssueWarnings(sem : (fscope->isCoroutine() ? CheckFallThroughDiagnostics::MakeForCoroutine(D) : CheckFallThroughDiagnostics::MakeForFunction(D))); - CheckFallThroughForBody(S, D, Body, blkExpr, CD, AC, fscope); + CheckFallThroughForBody(S, D, Body, blkExpr, CD, AC); } // Warning: check for unreachable code Modified: cfe/trunk/lib/Sema/Sema.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=326974&r1=326973&r2=326974&view=diff ============================================================================== --- cfe/trunk/lib/Sema/Sema.cpp (original) +++ cfe/trunk/lib/Sema/Sema.cpp Wed Mar 7 17:12:22 2018 @@ -162,7 +162,7 @@ Sema::Sema(Preprocessor &pp, ASTContext ExpressionEvaluationContext::PotentiallyEvaluated, 0, CleanupInfo{}, nullptr, false); - PreallocatedFunctionScope.reset(new FunctionScopeInfo(Diags)); + FunctionScopes.push_back(new FunctionScopeInfo(Diags)); // Initilization of data sharing attributes stack for OpenMP InitDataSharingAttributesStack(); @@ -332,11 +332,11 @@ void Sema::Initialize() { Sema::~Sema() { if (VisContext) FreeVisContext(); - // Kill all the active scopes. - for (sema::FunctionScopeInfo *FSI : FunctionScopes) - if (FSI != PreallocatedFunctionScope.get()) - delete FSI; + for (unsigned I = 1, E = FunctionScopes.size(); I != E; ++I) + delete FunctionScopes[I]; + if (FunctionScopes.size() == 1) + delete FunctionScopes[0]; // Tell the SemaConsumer to forget about us; we're going out of scope. if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) @@ -1340,13 +1340,17 @@ Scope *Sema::getScopeForContext(DeclCont /// \brief Enter a new function scope void Sema::PushFunctionScope() { - if (FunctionScopes.empty()) { - // Use PreallocatedFunctionScope to avoid allocating memory when possible. - PreallocatedFunctionScope->Clear(); - FunctionScopes.push_back(PreallocatedFunctionScope.get()); - } else { - FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics())); + if (FunctionScopes.size() == 1) { + // Use the "top" function scope rather than having to allocate + // memory for a new scope. + FunctionScopes.back()->Clear(); + FunctionScopes.push_back(FunctionScopes.back()); + if (LangOpts.OpenMP) + pushOpenMPFunctionRegion(); + return; } + + FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics())); if (LangOpts.OpenMP) pushOpenMPFunctionRegion(); } @@ -1366,15 +1370,15 @@ void Sema::RecordParsingTemplateParamete if (LambdaScopeInfo *const LSI = getCurLambda()) { LSI->AutoTemplateParameterDepth = Depth; return; - } - llvm_unreachable( + } + llvm_unreachable( "Remove assertion if intentionally called in a non-lambda context."); } void Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP, const Decl *D, const BlockExpr *blkExpr) { - assert(!FunctionScopes.empty() && "mismatched push/pop!"); FunctionScopeInfo *Scope = FunctionScopes.pop_back_val(); + assert(!FunctionScopes.empty() && "mismatched push/pop!"); if (LangOpts.OpenMP) popOpenMPFunctionRegion(Scope); @@ -1386,8 +1390,7 @@ void Sema::PopFunctionScopeInfo(const An for (const auto &PUD : Scope->PossiblyUnreachableDiags) Diag(PUD.Loc, PUD.PD); - // Delete the scope unless its our preallocated scope. - if (Scope != PreallocatedFunctionScope.get()) + if (FunctionScopes.back() != Scope) delete Scope; } @@ -1408,21 +1411,6 @@ bool Sema::hasAnyUnrecoverableErrorsInTh return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred(); } -void Sema::setFunctionHasBranchIntoScope() { - if (!FunctionScopes.empty()) - FunctionScopes.back()->setHasBranchIntoScope(); -} - -void Sema::setFunctionHasBranchProtectedScope() { - if (!FunctionScopes.empty()) - FunctionScopes.back()->setHasBranchProtectedScope(); -} - -void Sema::setFunctionHasIndirectGoto() { - if (!FunctionScopes.empty()) - FunctionScopes.back()->setHasIndirectGoto(); -} - BlockScopeInfo *Sema::getCurBlock() { if (FunctionScopes.empty()) return nullptr; Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=326974&r1=326973&r2=326974&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Mar 7 17:12:22 2018 @@ -5747,7 +5747,7 @@ Sema::CheckTypedefForVariablyModifiedTyp TypeSourceInfo *TInfo = NewTD->getTypeSourceInfo(); QualType T = TInfo->getType(); if (T->isVariablyModifiedType()) { - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); if (S->getFnParent() == nullptr) { bool SizeIsNegative; @@ -7407,7 +7407,7 @@ void Sema::CheckVariableDeclarationType( bool isVM = T->isVariablyModifiedType(); if (isVM || NewVD->hasAttr<CleanupAttr>() || NewVD->hasAttr<BlocksAttr>()) - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) { @@ -10644,7 +10644,7 @@ void Sema::AddInitializerToDecl(Decl *Re } if (VDecl->hasLocalStorage()) - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer)) { VDecl->setInvalidDecl(); @@ -11178,11 +11178,11 @@ void Sema::ActOnUninitializedDecl(Decl * if (const RecordType *Record = Context.getBaseElementType(Type)->getAs<RecordType>()) { CXXRecordDecl *CXXRecord = cast<CXXRecordDecl>(Record->getDecl()); - // Mark the function (if we're in one) for further checking even if the - // looser rules of C++11 do not require such checks, so that we can - // diagnose incompatibilities with C++98. + // Mark the function for further checking even if the looser rules of + // C++11 do not require such checks, so that we can diagnose + // incompatibilities with C++98. if (!CXXRecord->isPOD()) - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); } } @@ -11318,14 +11318,13 @@ void Sema::CheckCompleteVariableDeclarat case Qualifiers::OCL_Weak: case Qualifiers::OCL_Strong: - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); break; } } - if (var->hasLocalStorage() && - var->getType().isDestructedType() == QualType::DK_nontrivial_c_struct) - setFunctionHasBranchProtectedScope(); + if (var->getType().isDestructedType() == QualType::DK_nontrivial_c_struct) + getCurFunction()->setHasBranchProtectedScope(); // Warn about externally-visible variables being defined without a // prior declaration. We only want to do this for global Modified: cfe/trunk/lib/Sema/SemaExpr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=326974&r1=326973&r2=326974&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) +++ cfe/trunk/lib/Sema/SemaExpr.cpp Wed Mar 7 17:12:22 2018 @@ -13126,7 +13126,7 @@ ExprResult Sema::ActOnBlockStmtExpr(Sour for (const auto &CI : Result->getBlockDecl()->captures()) { const VarDecl *var = CI.getVariable(); if (var->getType().isDestructedType() != QualType::DK_none) { - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); break; } } Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=326974&r1=326973&r2=326974&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original) +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Wed Mar 7 17:12:22 2018 @@ -1114,9 +1114,8 @@ bool Sema::CheckCXXThisCapture(SourceLoc assert((!ByCopy || Explicit) && "cannot implicitly capture *this by value"); - const int MaxFunctionScopesIndex = FunctionScopeIndexToStopAt - ? *FunctionScopeIndexToStopAt - : FunctionScopes.size() - 1; + const unsigned MaxFunctionScopesIndex = FunctionScopeIndexToStopAt ? + *FunctionScopeIndexToStopAt : FunctionScopes.size() - 1; // Check that we can capture the *enclosing object* (referred to by '*this') // by the capturing-entity/closure (lambda/block/etc) at @@ -1142,7 +1141,7 @@ bool Sema::CheckCXXThisCapture(SourceLoc unsigned NumCapturingClosures = 0; - for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) { + for (unsigned idx = MaxFunctionScopesIndex; idx != 0; idx--) { if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) { if (CSI->CXXThisCaptureIndex != 0) { @@ -1197,8 +1196,8 @@ bool Sema::CheckCXXThisCapture(SourceLoc // FIXME: We need to delay this marking in PotentiallyPotentiallyEvaluated // contexts. QualType ThisTy = getCurrentThisType(); - for (int idx = MaxFunctionScopesIndex; NumCapturingClosures; - --idx, --NumCapturingClosures) { + for (unsigned idx = MaxFunctionScopesIndex; NumCapturingClosures; + --idx, --NumCapturingClosures) { CapturingScopeInfo *CSI = cast<CapturingScopeInfo>(FunctionScopes[idx]); Expr *ThisExpr = nullptr; @@ -7177,6 +7176,9 @@ static void CheckIfAnyEnclosingLambdasMu const bool IsFullExprInstantiationDependent = FE->isInstantiationDependent(); + ArrayRef<const FunctionScopeInfo *> FunctionScopesArrayRef( + S.FunctionScopes.data(), S.FunctionScopes.size()); + // All the potentially captureable variables in the current nested // lambda (within a generic outer lambda), must be captured by an // outer lambda that is enclosed within a non-dependent context. @@ -7205,7 +7207,7 @@ static void CheckIfAnyEnclosingLambdasMu // capture the variable in that lambda (and all its enclosing lambdas). if (const Optional<unsigned> Index = getStackIndexOfNearestEnclosingCaptureCapableLambda( - S.FunctionScopes, Var, S)) { + FunctionScopesArrayRef, Var, S)) { const unsigned FunctionScopeIndexOfCapturableLambda = Index.getValue(); MarkVarDeclODRUsed(Var, VarExpr->getExprLoc(), S, &FunctionScopeIndexOfCapturableLambda); @@ -7241,7 +7243,7 @@ static void CheckIfAnyEnclosingLambdasMu // 'this' in that lambda (and all its enclosing lambdas). if (const Optional<unsigned> Index = getStackIndexOfNearestEnclosingCaptureCapableLambda( - S.FunctionScopes, /*0 is 'this'*/ nullptr, S)) { + FunctionScopesArrayRef, /*0 is 'this'*/ nullptr, S)) { const unsigned FunctionScopeIndexOfCapturableLambda = Index.getValue(); S.CheckCXXThisCapture(CurrentLSI->PotentialThisCaptureLocation, /*Explicit*/ false, /*BuildAndDiagnose*/ true, Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=326974&r1=326973&r2=326974&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaOpenMP.cpp (original) +++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Wed Mar 7 17:12:22 2018 @@ -3572,7 +3572,7 @@ StmtResult Sema::ActOnOpenMPParallelDire // longjmp() and throw() must not violate the entry/exit criteria. CS->getCapturedDecl()->setNothrow(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPParallelDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt, DSAStack->isCancelRegion()); @@ -5281,7 +5281,7 @@ StmtResult Sema::ActOnOpenMPSimdDirectiv if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPSimdDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -5317,7 +5317,7 @@ StmtResult Sema::ActOnOpenMPForDirective } } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPForDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B, DSAStack->isCancelRegion()); } @@ -5357,7 +5357,7 @@ StmtResult Sema::ActOnOpenMPForSimdDirec if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPForSimdDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -5394,7 +5394,7 @@ StmtResult Sema::ActOnOpenMPSectionsDire return StmtError(); } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPSectionsDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt, DSAStack->isCancelRegion()); @@ -5408,7 +5408,7 @@ StmtResult Sema::ActOnOpenMPSectionDirec assert(isa<CapturedStmt>(AStmt) && "Captured statement expected"); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); DSAStack->setParentCancelRegion(DSAStack->isCancelRegion()); return OMPSectionDirective::Create(Context, StartLoc, EndLoc, AStmt, @@ -5424,7 +5424,7 @@ StmtResult Sema::ActOnOpenMPSingleDirect assert(isa<CapturedStmt>(AStmt) && "Captured statement expected"); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); // OpenMP [2.7.3, single Construct, Restrictions] // The copyprivate clause must not be used with the nowait clause. @@ -5454,7 +5454,7 @@ StmtResult Sema::ActOnOpenMPMasterDirect assert(isa<CapturedStmt>(AStmt) && "Captured statement expected"); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPMasterDirective::Create(Context, StartLoc, EndLoc, AStmt); } @@ -5508,7 +5508,7 @@ StmtResult Sema::ActOnOpenMPCriticalDire } } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); auto *Dir = OMPCriticalDirective::Create(Context, DirName, StartLoc, EndLoc, Clauses, AStmt); @@ -5556,7 +5556,7 @@ StmtResult Sema::ActOnOpenMPParallelForD } } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPParallelForDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B, DSAStack->isCancelRegion()); @@ -5601,7 +5601,7 @@ StmtResult Sema::ActOnOpenMPParallelForS if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPParallelForSimdDirective::Create( Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -5639,7 +5639,7 @@ Sema::ActOnOpenMPParallelSectionsDirecti return StmtError(); } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPParallelSectionsDirective::Create( Context, StartLoc, EndLoc, Clauses, AStmt, DSAStack->isCancelRegion()); @@ -5659,7 +5659,7 @@ StmtResult Sema::ActOnOpenMPTaskDirectiv // longjmp() and throw() must not violate the entry/exit criteria. CS->getCapturedDecl()->setNothrow(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTaskDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt, DSAStack->isCancelRegion()); @@ -5689,7 +5689,7 @@ StmtResult Sema::ActOnOpenMPTaskgroupDir assert(isa<CapturedStmt>(AStmt) && "Captured statement expected"); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTaskgroupDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt, @@ -5772,7 +5772,7 @@ StmtResult Sema::ActOnOpenMPOrderedDirec if (AStmt) { assert(isa<CapturedStmt>(AStmt) && "Captured statement expected"); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); } return OMPOrderedDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt); @@ -6442,7 +6442,7 @@ StmtResult Sema::ActOnOpenMPAtomicDirect } } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPAtomicDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt, X, V, E, UE, IsXLHSInRHSPart, @@ -6507,7 +6507,7 @@ StmtResult Sema::ActOnOpenMPTargetDirect } } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt); } @@ -6537,7 +6537,7 @@ Sema::ActOnOpenMPTargetParallelDirective CS->getCapturedDecl()->setNothrow(); } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetParallelDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt); @@ -6592,7 +6592,7 @@ StmtResult Sema::ActOnOpenMPTargetParall } } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetParallelForDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B, DSAStack->isCancelRegion()); @@ -6629,7 +6629,7 @@ StmtResult Sema::ActOnOpenMPTargetDataDi return StmtError(); } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetDataDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt); @@ -6756,7 +6756,7 @@ StmtResult Sema::ActOnOpenMPTeamsDirecti // longjmp() and throw() must not violate the entry/exit criteria. CS->getCapturedDecl()->setNothrow(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); DSAStack->setParentTeamsRegionLoc(StartLoc); @@ -6879,7 +6879,7 @@ StmtResult Sema::ActOnOpenMPTaskLoopDire if (checkReductionClauseWithNogroup(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTaskLoopDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -6929,7 +6929,7 @@ StmtResult Sema::ActOnOpenMPTaskLoopSimd if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTaskLoopSimdDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -6955,7 +6955,7 @@ StmtResult Sema::ActOnOpenMPDistributeDi assert((CurContext->isDependentContext() || B.builtAll()) && "omp for loop exprs were not built"); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPDistributeDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -6999,7 +6999,7 @@ StmtResult Sema::ActOnOpenMPDistributePa assert((CurContext->isDependentContext() || B.builtAll()) && "omp for loop exprs were not built"); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPDistributeParallelForDirective::Create( Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B, DSAStack->isCancelRegion()); @@ -7058,7 +7058,7 @@ StmtResult Sema::ActOnOpenMPDistributePa if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPDistributeParallelForSimdDirective::Create( Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -7115,7 +7115,7 @@ StmtResult Sema::ActOnOpenMPDistributeSi if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPDistributeSimdDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -7171,7 +7171,7 @@ StmtResult Sema::ActOnOpenMPTargetParall if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetParallelForSimdDirective::Create( Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -7228,7 +7228,7 @@ StmtResult Sema::ActOnOpenMPTargetSimdDi if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetSimdDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -7271,7 +7271,7 @@ StmtResult Sema::ActOnOpenMPTeamsDistrib assert((CurContext->isDependentContext() || B.builtAll()) && "omp teams distribute loop exprs were not built"); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); DSAStack->setParentTeamsRegionLoc(StartLoc); @@ -7334,7 +7334,7 @@ StmtResult Sema::ActOnOpenMPTeamsDistrib if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); DSAStack->setParentTeamsRegionLoc(StartLoc); @@ -7397,7 +7397,7 @@ StmtResult Sema::ActOnOpenMPTeamsDistrib if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); DSAStack->setParentTeamsRegionLoc(StartLoc); @@ -7446,7 +7446,7 @@ StmtResult Sema::ActOnOpenMPTeamsDistrib assert((CurContext->isDependentContext() || B.builtAll()) && "omp for loop exprs were not built"); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); DSAStack->setParentTeamsRegionLoc(StartLoc); @@ -7480,7 +7480,7 @@ StmtResult Sema::ActOnOpenMPTargetTeamsD // longjmp() and throw() must not violate the entry/exit criteria. CS->getCapturedDecl()->setNothrow(); } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetTeamsDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt); @@ -7525,7 +7525,7 @@ StmtResult Sema::ActOnOpenMPTargetTeamsD assert((CurContext->isDependentContext() || B.builtAll()) && "omp target teams distribute loop exprs were not built"); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetTeamsDistributeDirective::Create( Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -7580,7 +7580,7 @@ StmtResult Sema::ActOnOpenMPTargetTeamsD } } - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetTeamsDistributeParallelForDirective::Create( Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B, DSAStack->isCancelRegion()); @@ -7641,7 +7641,7 @@ StmtResult Sema::ActOnOpenMPTargetTeamsD if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetTeamsDistributeParallelForSimdDirective::Create( Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -7699,7 +7699,7 @@ StmtResult Sema::ActOnOpenMPTargetTeamsD if (checkSimdlenSafelenSpecified(*this, Clauses)) return StmtError(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return OMPTargetTeamsDistributeSimdDirective::Create( Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); } @@ -12450,7 +12450,7 @@ void Sema::ActOnOpenMPDeclareReductionCo // Enter new function scope. PushFunctionScope(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); getCurFunction()->setHasOMPDeclareReductionCombiner(); if (S != nullptr) @@ -12506,7 +12506,7 @@ VarDecl *Sema::ActOnOpenMPDeclareReducti // Enter new function scope. PushFunctionScope(); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); if (S != nullptr) PushDeclContext(S, DRD); Modified: cfe/trunk/lib/Sema/SemaStmt.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=326974&r1=326973&r2=326974&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaStmt.cpp (original) +++ cfe/trunk/lib/Sema/SemaStmt.cpp Wed Mar 7 17:12:22 2018 @@ -557,7 +557,7 @@ StmtResult Sema::BuildIfStmt(SourceLocat return StmtError(); if (IsConstexpr || isa<ObjCAvailabilityCheckExpr>(Cond.get().second)) - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); DiagnoseUnusedExprResult(thenStmt); DiagnoseUnusedExprResult(elseStmt); @@ -688,7 +688,7 @@ StmtResult Sema::ActOnStartOfSwitchStmt( if (Cond.isInvalid()) return StmtError(); - setFunctionHasBranchIntoScope(); + getCurFunction()->setHasBranchIntoScope(); SwitchStmt *SS = new (Context) SwitchStmt(Context, InitStmt, Cond.get().first, Cond.get().second); @@ -1873,7 +1873,7 @@ StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) { - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); ExprResult CollectionExprResult = CheckObjCForCollectionOperand(ForLoc, collection); @@ -2784,7 +2784,7 @@ StmtResult Sema::FinishCXXForRangeStmt(S StmtResult Sema::ActOnGotoStmt(SourceLocation GotoLoc, SourceLocation LabelLoc, LabelDecl *TheDecl) { - setFunctionHasBranchIntoScope(); + getCurFunction()->setHasBranchIntoScope(); TheDecl->markUsed(Context); return new (Context) GotoStmt(TheDecl, GotoLoc, LabelLoc); } @@ -2811,7 +2811,7 @@ Sema::ActOnIndirectGotoStmt(SourceLocati return StmtError(); E = ExprRes.get(); - setFunctionHasIndirectGoto(); + getCurFunction()->setHasIndirectGoto(); return new (Context) IndirectGotoStmt(GotoLoc, StarLoc, E); } @@ -3607,7 +3607,7 @@ Sema::ActOnObjCAtTryStmt(SourceLocation if (!getLangOpts().ObjCExceptions) Diag(AtLoc, diag::err_objc_exceptions_disabled) << "@try"; - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); unsigned NumCatchStmts = CatchStmts.size(); return ObjCAtTryStmt::Create(Context, AtLoc, Try, CatchStmts.data(), NumCatchStmts, Finally); @@ -3698,7 +3698,7 @@ StmtResult Sema::ActOnObjCAtSynchronizedStmt(SourceLocation AtLoc, Expr *SyncExpr, Stmt *SyncBody) { // We can't jump into or indirect-jump out of a @synchronized block. - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return new (Context) ObjCAtSynchronizedStmt(AtLoc, SyncExpr, SyncBody); } @@ -3714,7 +3714,7 @@ Sema::ActOnCXXCatchBlock(SourceLocation StmtResult Sema::ActOnObjCAutoreleasePoolStmt(SourceLocation AtLoc, Stmt *Body) { - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); return new (Context) ObjCAutoreleasePoolStmt(AtLoc, Body); } Modified: cfe/trunk/lib/Sema/SemaStmtAsm.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmtAsm.cpp?rev=326974&r1=326973&r2=326974&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaStmtAsm.cpp (original) +++ cfe/trunk/lib/Sema/SemaStmtAsm.cpp Wed Mar 7 17:12:22 2018 @@ -793,7 +793,7 @@ StmtResult Sema::ActOnMSAsmStmt(SourceLo ArrayRef<Expr*> Exprs, SourceLocation EndLoc) { bool IsSimple = (NumOutputs != 0 || NumInputs != 0); - setFunctionHasBranchProtectedScope(); + getCurFunction()->setHasBranchProtectedScope(); MSAsmStmt *NS = new (Context) MSAsmStmt(Context, AsmLoc, LBraceLoc, IsSimple, /*IsVolatile*/ true, AsmToks, NumOutputs, NumInputs, _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits