diff --git a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h index 24f33bcda164..25b2f7138632 100644 --- a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h +++ b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h @@ -210,6 +210,10 @@ private: int getOptionAsInteger(StringRef Name, int DefaultVal); public: + AnalysisIPAMode getIPAMode() const { + return IPAMode; + } + /// Returns the option controlling which C++ member functions will be /// considered for inlining. /// diff --git a/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp b/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp index 99f6c2e300f5..a336f04c8f74 100644 --- a/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp +++ b/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp @@ -22,7 +22,7 @@ using namespace llvm; bool AnalyzerOptions::mayInlineCXXMemberFunction(CXXInlineableMemberKind K) { - if (IPAMode < Inlining) + if (getIPAMode() < Inlining) return false; if (!CXXMemberInliningMode) { diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp index af93baa0a292..6e7701475ecc 100644 --- a/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp @@ -558,8 +558,9 @@ bool ExprEngine::inlineCall(const CallEvent &Call, const Decl *D, case CE_ObjCMessage: if (!Opts.mayInlineObjCMethod()) return false; - if (!(getAnalysisManager().options.IPAMode == DynamicDispatch || - getAnalysisManager().options.IPAMode == DynamicDispatchBifurcate)) + AnalyzerOptions &Options = getAnalysisManager().options; + if (!(Options.getIPAMode() == DynamicDispatch || + Options.getIPAMode() == DynamicDispatchBifurcate)) return false; break; } @@ -737,14 +738,16 @@ void ExprEngine::defaultEvalCall(NodeBuilder &Bldr, ExplodedNode *Pred, const Decl *D = RD.getDecl(); if (D) { if (RD.mayHaveOtherDefinitions()) { + AnalyzerOptions &Options = getAnalysisManager().options; + // Explore with and without inlining the call. - if (getAnalysisManager().options.IPAMode == DynamicDispatchBifurcate) { + if (Options.getIPAMode() == DynamicDispatchBifurcate) { BifurcateCall(RD.getDispatchRegion(), *Call, D, Bldr, Pred); return; } // Don't inline if we're not in any dynamic dispatch mode. - if (getAnalysisManager().options.IPAMode != DynamicDispatch) { + if (Options.getIPAMode() != DynamicDispatch) { conservativeEvalCall(*Call, Bldr, Pred, State); return; }