From 22579c4c8fd37d71ab876ffce643b34702d6cb0d Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Wed, 22 Apr 2009 18:03:00 +0000 Subject: PathDiagnosticLocation: ranges for terminators now only include the first character instead of the entire range for the IfStmt, ForStmt, etc. We may gradually refine these ranges later, but basically terminator ranges just refer to the first keyword. llvm-svn: 69812 --- clang/lib/Analysis/PathDiagnostic.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'clang') diff --git a/clang/lib/Analysis/PathDiagnostic.cpp b/clang/lib/Analysis/PathDiagnostic.cpp index 1d00727d0a2..fa075a39595 100644 --- a/clang/lib/Analysis/PathDiagnostic.cpp +++ b/clang/lib/Analysis/PathDiagnostic.cpp @@ -166,8 +166,29 @@ SourceRange PathDiagnosticLocation::asRange() const { case SingleLocK: case RangeK: break; - case StmtK: + case StmtK: { + const Stmt *S = asStmt(); + switch (S->getStmtClass()) { + default: + break; + // FIXME: Provide better range information for different + // terminators. + case Stmt::IfStmtClass: + case Stmt::WhileStmtClass: + case Stmt::DoStmtClass: + case Stmt::ForStmtClass: + case Stmt::ChooseExprClass: + case Stmt::IndirectGotoStmtClass: + case Stmt::SwitchStmtClass: + case Stmt::ConditionalOperatorClass: + case Stmt::ObjCForCollectionStmtClass: { + SourceLocation L = S->getLocStart(); + return SourceRange(L, L); + } + } + return S->getSourceRange(); + } case DeclK: if (const ObjCMethodDecl *MD = dyn_cast(D)) return MD->getSourceRange(); -- cgit v1.2.3