From: Ted Kremenek Date: Thu, 23 Apr 2009 16:19:29 +0000 (+0000) Subject: BugReporter (extensive diagnostics): Ignore parentheses when added control-flow X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c2924d048411f0372ecfa9e8cfc849b07cfd625e;p=clang BugReporter (extensive diagnostics): Ignore parentheses when added control-flow pieces for location contexts. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69895 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/BugReporter.cpp b/lib/Analysis/BugReporter.cpp index 73029c5af8..e0b1b6540f 100644 --- a/lib/Analysis/BugReporter.cpp +++ b/lib/Analysis/BugReporter.cpp @@ -789,6 +789,22 @@ class VISIBILITY_HIDDEN EdgeBuilder { void popLocation() { PathDiagnosticLocation L = CLocs.back(); if (L.asLocation().isFileID()) { + + if (const Stmt *S = L.asStmt()) { + // Adjust the location for some expressions that are best referenced + // by one of their subexpressions. + if (const ConditionalOperator *CO = dyn_cast(S)) + S = CO->getCond(); + else if (const ChooseExpr *CE = dyn_cast(S)) + S = CE->getCond(); + + // Ignore parentheses. + if (const ParenExpr *PE = dyn_cast(S)) + S = PE->IgnoreParens(); + + L = PathDiagnosticLocation(S, L.getManager()); + } + // For contexts, we only one the first character as the range. L = PathDiagnosticLocation(L.asLocation(), L.getManager()); rawAddEdge(L);