ymandel created this revision. ymandel added reviewers: sgatev, xazax.hun. Herald added subscribers: tschuett, steakhal, rnkovacs. Herald added a project: All. ymandel requested review of this revision. Herald added a project: clang.
Terminators are handled specially in the transfer functions so we need an additional check on whether the analysis has disabled built-in transfer functions. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D121694 Files: clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp Index: clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp =================================================================== --- clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp +++ clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp @@ -170,6 +170,8 @@ } llvm::Optional<TypeErasedDataflowAnalysisState> MaybeState; + bool ApplyBuiltinTransfer = Analysis.applyBuiltinTransfer(); + for (const CFGBlock *Pred : Preds) { // Skip if the `Block` is unreachable or control flow cannot get past it. if (!Pred || Pred->hasNoReturnElement()) @@ -183,11 +185,13 @@ continue; TypeErasedDataflowAnalysisState PredState = MaybePredState.getValue(); - if (const Stmt *PredTerminatorStmt = Pred->getTerminatorStmt()) { - const StmtToEnvMapImpl StmtToEnv(CFCtx, BlockStates); - TerminatorVisitor(StmtToEnv, PredState.Env, - blockIndexInPredecessor(*Pred, Block)) - .Visit(PredTerminatorStmt); + if (ApplyBuiltinTransfer) { + if (const Stmt *PredTerminatorStmt = Pred->getTerminatorStmt()) { + const StmtToEnvMapImpl StmtToEnv(CFCtx, BlockStates); + TerminatorVisitor(StmtToEnv, PredState.Env, + blockIndexInPredecessor(*Pred, Block)) + .Visit(PredTerminatorStmt); + } } if (MaybeState.hasValue()) {
Index: clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp =================================================================== --- clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp +++ clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp @@ -170,6 +170,8 @@ } llvm::Optional<TypeErasedDataflowAnalysisState> MaybeState; + bool ApplyBuiltinTransfer = Analysis.applyBuiltinTransfer(); + for (const CFGBlock *Pred : Preds) { // Skip if the `Block` is unreachable or control flow cannot get past it. if (!Pred || Pred->hasNoReturnElement()) @@ -183,11 +185,13 @@ continue; TypeErasedDataflowAnalysisState PredState = MaybePredState.getValue(); - if (const Stmt *PredTerminatorStmt = Pred->getTerminatorStmt()) { - const StmtToEnvMapImpl StmtToEnv(CFCtx, BlockStates); - TerminatorVisitor(StmtToEnv, PredState.Env, - blockIndexInPredecessor(*Pred, Block)) - .Visit(PredTerminatorStmt); + if (ApplyBuiltinTransfer) { + if (const Stmt *PredTerminatorStmt = Pred->getTerminatorStmt()) { + const StmtToEnvMapImpl StmtToEnv(CFCtx, BlockStates); + TerminatorVisitor(StmtToEnv, PredState.Env, + blockIndexInPredecessor(*Pred, Block)) + .Visit(PredTerminatorStmt); + } } if (MaybeState.hasValue()) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits