]> granicus.if.org Git - clang/commitdiff
BugReporter (extensive diagnostics): Ignore parentheses when added control-flow
authorTed Kremenek <kremenek@apple.com>
Thu, 23 Apr 2009 16:19:29 +0000 (16:19 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 23 Apr 2009 16:19:29 +0000 (16:19 +0000)
pieces for location contexts.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69895 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/BugReporter.cpp

index 73029c5af8dbcbac6d3c9ae88a9b89ab80098d74..e0b1b6540f109cc99f0905ef2b8b782f502dcfee 100644 (file)
@@ -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<ConditionalOperator>(S))
+          S = CO->getCond();
+        else if (const ChooseExpr *CE = dyn_cast<ChooseExpr>(S))
+          S = CE->getCond();
+        
+        // Ignore parentheses.
+        if (const ParenExpr *PE = dyn_cast<ParenExpr>(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);