diff options
-rw-r--r-- | clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp | 16 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.h | 5 |
2 files changed, 20 insertions, 1 deletions
diff --git a/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp b/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp index 9614cebd124..f0ec230651b 100644 --- a/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp +++ b/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp @@ -205,7 +205,7 @@ ExceptionAnalyzer::ExceptionInfo ExceptionAnalyzer::throwsException( } ExceptionAnalyzer::ExceptionInfo -ExceptionAnalyzer::analyze(const FunctionDecl *Func) { +ExceptionAnalyzer::analyzeImpl(const FunctionDecl *Func) { ExceptionInfo ExceptionList; // Check if the function has already been analyzed and reuse that result. @@ -221,6 +221,14 @@ ExceptionAnalyzer::analyze(const FunctionDecl *Func) { } else ExceptionList = FunctionCache[Func]; + return ExceptionList; +} + +template <typename T> +ExceptionAnalyzer::ExceptionInfo +ExceptionAnalyzer::analyzeDispatch(const T *Node) { + ExceptionInfo ExceptionList = analyzeImpl(Node); + if (ExceptionList.getBehaviour() == State::NotThrowing || ExceptionList.getBehaviour() == State::Unknown) return ExceptionList; @@ -231,6 +239,12 @@ ExceptionAnalyzer::analyze(const FunctionDecl *Func) { return ExceptionList; } + +ExceptionAnalyzer::ExceptionInfo +ExceptionAnalyzer::analyze(const FunctionDecl *Func) { + return analyzeDispatch(Func); +} + } // namespace utils } // namespace tidy diff --git a/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.h b/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.h index 5902e5afecf..f924a919e68 100644 --- a/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.h +++ b/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.h @@ -138,10 +138,15 @@ private: throwsException(const Stmt *St, const ExceptionInfo::Throwables &Caught, llvm::SmallSet<const FunctionDecl *, 32> &CallStack); + ExceptionInfo analyzeImpl(const FunctionDecl *Func); + + template <typename T> ExceptionInfo analyzeDispatch(const T *Node); + bool IgnoreBadAlloc = true; llvm::StringSet<> IgnoredExceptions; std::map<const FunctionDecl *, ExceptionInfo> FunctionCache; }; + } // namespace utils } // namespace tidy } // namespace clang |