schittir created this revision. schittir added reviewers: aaron.ballman, tahonermann. Herald added a reviewer: NoQ. Herald added a project: All. schittir requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D158775 Files: clang/lib/AST/Interp/Interp.h clang/lib/Analysis/ThreadSafety.cpp Index: clang/lib/Analysis/ThreadSafety.cpp =================================================================== --- clang/lib/Analysis/ThreadSafety.cpp +++ clang/lib/Analysis/ThreadSafety.cpp @@ -1008,7 +1008,7 @@ threadSafety::SExprBuilder SxBuilder; ThreadSafetyHandler &Handler; - const CXXMethodDecl *CurrentMethod; + const CXXMethodDecl *CurrentMethod = nullptr; LocalVariableMap LocalVarMap; FactManager FactMan; std::vector<CFGBlockInfo> BlockInfo; Index: clang/lib/AST/Interp/Interp.h =================================================================== --- clang/lib/AST/Interp/Interp.h +++ clang/lib/AST/Interp/Interp.h @@ -201,13 +201,14 @@ return false; } + assert(S.Current); assert(S.Current->getFrameOffset() == S.Stk.size() && "Invalid frame"); if (!S.checkingPotentialConstantExpression() || S.Current->Caller) { // Certain builtin functions are declared as func-name(...), so the // parameters are checked in Sema and only available through the CallExpr. // The interp::Function we create for them has 0 parameters, so we need to // remove them from the stack by checking the CallExpr. - if (S.Current && S.Current->getFunction()->needsRuntimeArgPop(S.getCtx())) + if (S.Current->getFunction()->needsRuntimeArgPop(S.getCtx())) popBuiltinArgs(S, PC); else S.Current->popArgs();
Index: clang/lib/Analysis/ThreadSafety.cpp =================================================================== --- clang/lib/Analysis/ThreadSafety.cpp +++ clang/lib/Analysis/ThreadSafety.cpp @@ -1008,7 +1008,7 @@ threadSafety::SExprBuilder SxBuilder; ThreadSafetyHandler &Handler; - const CXXMethodDecl *CurrentMethod; + const CXXMethodDecl *CurrentMethod = nullptr; LocalVariableMap LocalVarMap; FactManager FactMan; std::vector<CFGBlockInfo> BlockInfo; Index: clang/lib/AST/Interp/Interp.h =================================================================== --- clang/lib/AST/Interp/Interp.h +++ clang/lib/AST/Interp/Interp.h @@ -201,13 +201,14 @@ return false; } + assert(S.Current); assert(S.Current->getFrameOffset() == S.Stk.size() && "Invalid frame"); if (!S.checkingPotentialConstantExpression() || S.Current->Caller) { // Certain builtin functions are declared as func-name(...), so the // parameters are checked in Sema and only available through the CallExpr. // The interp::Function we create for them has 0 parameters, so we need to // remove them from the stack by checking the CallExpr. - if (S.Current && S.Current->getFunction()->needsRuntimeArgPop(S.getCtx())) + if (S.Current->getFunction()->needsRuntimeArgPop(S.getCtx())) popBuiltinArgs(S, PC); else S.Current->popArgs();
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits