diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-02-23 23:13:51 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-02-23 23:13:51 +0000 |
commit | 2c2ec42322c654325ffd84901901489a2238ea59 (patch) | |
tree | a46bcd62e7e4552aa7579d27ab0708635033ee12 /clang/lib/Analysis/BugReporter.cpp | |
parent | 04c6f05a1c04283b5308e3da32c3e3f2182058df (diff) | |
download | bcm5719-llvm-2c2ec42322c654325ffd84901901489a2238ea59.tar.gz bcm5719-llvm-2c2ec42322c654325ffd84901901489a2238ea59.zip |
Tidy up 'ExecutionContinues' to distinguish between jumping to the end of a 'method' or 'funciton'.
llvm-svn: 65346
Diffstat (limited to 'clang/lib/Analysis/BugReporter.cpp')
-rw-r--r-- | clang/lib/Analysis/BugReporter.cpp | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/clang/lib/Analysis/BugReporter.cpp b/clang/lib/Analysis/BugReporter.cpp index 09a4f2b45bd..a89542d4c11 100644 --- a/clang/lib/Analysis/BugReporter.cpp +++ b/clang/lib/Analysis/BugReporter.cpp @@ -83,25 +83,22 @@ static inline Stmt* GetCurrentOrNextStmt(const ExplodedNode<GRState>* N) { //===----------------------------------------------------------------------===// // Diagnostics for 'execution continues on line XXX'. //===----------------------------------------------------------------------===// - -static void ExecutionContinues(llvm::raw_string_ostream& os, - SourceManager& SMgr, - const Stmt* S) { + +static inline void ExecutionContinues(llvm::raw_string_ostream& os, + SourceManager& SMgr, + const ExplodedNode<GRState>* N, + const Decl& D) { + // Slow, but probably doesn't matter. if (os.str().empty()) os << ' '; - if (S) + if (Stmt *S = GetNextStmt(N)) os << "Execution continues on line " - << SMgr.getInstantiationLineNumber(S->getLocStart()) << '.'; + << SMgr.getInstantiationLineNumber(S->getLocStart()) << '.'; else - os << "Execution jumps to the end of the function."; -} - -static inline void ExecutionContinues(llvm::raw_string_ostream& os, - SourceManager& SMgr, - const ExplodedNode<GRState>* N) { - ExecutionContinues(os, SMgr, GetNextStmt(N)); + os << "Execution jumps to the end of the " + << (isa<ObjCMethodDecl>(D) ? "method" : "function") << '.'; } //===----------------------------------------------------------------------===// @@ -704,7 +701,7 @@ void GRBugReporter::GeneratePathDiagnostic(PathDiagnostic& PD, } else { os << "'Default' branch taken. "; - ExecutionContinues(os, SMgr, N); + ExecutionContinues(os, SMgr, N, getStateManager().getCodeDecl()); } PD.push_front(new PathDiagnosticPiece(L, os.str())); @@ -715,7 +712,7 @@ void GRBugReporter::GeneratePathDiagnostic(PathDiagnostic& PD, case Stmt::ContinueStmtClass: { std::string sbuf; llvm::raw_string_ostream os(sbuf); - ExecutionContinues(os, SMgr, N); + ExecutionContinues(os, SMgr, N, getStateManager().getCodeDecl()); PD.push_front(new PathDiagnosticPiece(L, os.str())); break; } @@ -741,7 +738,7 @@ void GRBugReporter::GeneratePathDiagnostic(PathDiagnostic& PD, llvm::raw_string_ostream os(sbuf); os << "Loop condition is true. "; - ExecutionContinues(os, SMgr, N); + ExecutionContinues(os, SMgr, N, getStateManager().getCodeDecl()); PD.push_front(new PathDiagnosticPiece(L, os.str())); } @@ -760,7 +757,7 @@ void GRBugReporter::GeneratePathDiagnostic(PathDiagnostic& PD, llvm::raw_string_ostream os(sbuf); os << "Loop condition is false. "; - ExecutionContinues(os, SMgr, N); + ExecutionContinues(os, SMgr, N, getStateManager().getCodeDecl()); PD.push_front(new PathDiagnosticPiece(L, os.str())); } |