r364881 - [analyzer] exploded-graph-rewriter: Improve program point dumps.

Artem Dergachev via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 1 19:17:53 PDT 2019


Author: dergachev
Date: Mon Jul  1 19:17:53 2019
New Revision: 364881

URL: http://llvm.org/viewvc/llvm-project?rev=364881&view=rev
Log:
[analyzer] exploded-graph-rewriter: Improve program point dumps.

- Take advantage of the stmt_point_kind.
- Dump block IDs for BlockEntrance nodes.
- Don't dump huge compound statements on PurgeDeadSymbols nodes.
- Rename Edge to BlockEdge for consistency.
- Tweak colors.

Differential Revision: https://reviews.llvm.org/D64051

Modified:
    cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c
    cfe/trunk/test/Analysis/exploded-graph-rewriter/program_points.dot
    cfe/trunk/utils/analyzer/exploded-graph-rewriter.py

Modified: cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c?rev=364881&r1=364880&r2=364881&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c (original)
+++ cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c Mon Jul  1 19:17:53 2019
@@ -17,7 +17,7 @@ void escapes() {
   // CHECK-SAME: <td align="left">&Element\{"foo",0 S64b,char\}</td>
   const char *const foo = "\x66\x6f\x6f";
 
-  // CHECK: <font color="cyan3">BinaryOperator</font>
+  // CHECK: <font color="cyan4">BinaryOperator</font>
   // CHECK-SAME: <td align="left">1 \| 2</td>
   // CHECK-SAME: <td align="left">3 S32b</td>
   int x = 1 | 2;

Modified: cfe/trunk/test/Analysis/exploded-graph-rewriter/program_points.dot
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/exploded-graph-rewriter/program_points.dot?rev=364881&r1=364880&r2=364881&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/exploded-graph-rewriter/program_points.dot (original)
+++ cfe/trunk/test/Analysis/exploded-graph-rewriter/program_points.dot Mon Jul  1 19:17:53 2019
@@ -3,18 +3,28 @@
 // FIXME: Substitution doesn't seem to work on Windows.
 // UNSUPPORTED: system-windows
 
-// CHECK: <b>Program point:</b>
+// CHECK: <b>Program points:</b>
 // CHECK-SAME: <table border="0" align="left" width="0">
 // CHECK-SAME:   <tr>
 // CHECK-SAME:     <td width="0">
 // CHECK-SAME:     </td>
 // CHECK-SAME:     <td align="left" width="0">
-// CHECK-SAME:       <font color="gold3">Edge</font>
+// CHECK-SAME:       <font color="gold3">BlockEdge</font>
 // CHECK-SAME:     </td>
 // CHECK-SAME:     <td align="left">
 // CHECK-SAME:     [B0] -> [B1]
 // CHECK-SAME:     </td>
 // CHECK-SAME:   </tr>
+// CHECK-SAME:   <tr>
+// CHECK-SAME:     <td width="0">
+// CHECK-SAME:     </td>
+// CHECK-SAME:     <td align="left" width="0">
+// CHECK-SAME:       <font color="gold3">BlockEntrance</font>
+// CHECK-SAME:     </td>
+// CHECK-SAME:     <td align="left">
+// CHECK-SAME:     [B1]
+// CHECK-SAME:     </td>
+// CHECK-SAME:   </tr>
 // CHECK-SAME: </table>
 Node0x1 [shape=record,label=
  "{
@@ -26,7 +36,15 @@ Node0x1 [shape=record,label=
         "dst_id": 1,
         "terminator": null,
         "term_kind": null,
-        "tag": null }
+        "tag": null
+      },
+      {
+        "kind": "BlockEntrance",
+        "block_id": 1,
+        "terminator": null,
+        "term_kind": null,
+        "tag": null
+      }
     ]}
 \l}"];
 
@@ -37,14 +55,17 @@ Node0x1 [shape=record,label=
 // CHECK-SAME:       (main file):<b>4</b>:<b>5</b>:
 // CHECK-SAME:     </td>
 // CHECK-SAME:     <td align="left" width="0">
-// CHECK-SAME:       <font color="cyan3">DeclRefExpr</font>
+// CHECK-SAME:       <font color="cyan4">DeclRefExpr</font>
+// CHECK-SAME:     </td>
+// CHECK-SAME:     <td align="left">
+// CHECK-SAME:       <font color="cyan3">PreStmt</font>
 // CHECK-SAME:     </td>
 // CHECK-SAME:     <td>x</td>
 // CHECK-SAME:   </tr>
 // CHECK-SAME:   <tr>
 // CHECK-SAME:     <td width="0">
 // CHECK-SAME:     </td>
-// CHECK-SAME:     <td colspan="2" align="left">
+// CHECK-SAME:     <td colspan="3" align="left">
 // CHECK-SAME:       <b>Tag: </b>
 // CHECK-SAME:       <font color="crimson">ExprEngine : Clean Node</font>
 // CHECK-SAME:     </td>
@@ -57,6 +78,7 @@ Node0x2 [shape=record,label=
       {
         "kind": "Statement",
         "stmt_kind": "DeclRefExpr",
+        "stmt_point_kind": "PreStmt",
         "stmd_id": 3,
         "pointer": "0x3",
         "pretty": "x",

Modified: cfe/trunk/utils/analyzer/exploded-graph-rewriter.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/analyzer/exploded-graph-rewriter.py?rev=364881&r1=364880&r2=364881&view=diff
==============================================================================
--- cfe/trunk/utils/analyzer/exploded-graph-rewriter.py (original)
+++ cfe/trunk/utils/analyzer/exploded-graph-rewriter.py Mon Jul  1 19:17:53 2019
@@ -59,6 +59,7 @@ class ProgramPoint(object):
             self.dst_id = json_pp['dst_id']
         elif self.kind == 'Statement':
             self.stmt_kind = json_pp['stmt_kind']
+            self.stmt_point_kind = json_pp['stmt_point_kind']
             self.pointer = json_pp['pointer']
             self.pretty = json_pp['pretty']
             self.loc = SourceLocation(json_pp['location']) \
@@ -373,30 +374,48 @@ class DotDumpVisitor(object):
         elif p.kind in ['CallEnter', 'CallExitBegin', 'CallExitEnd']:
             color = 'blue'
         elif p.kind in ['Statement']:
-            color = 'cyan3'
+            color = 'cyan4'
         else:
             color = 'forestgreen'
 
         if p.kind == 'Statement':
+            # This avoids pretty-printing huge statements such as CompoundStmt.
+            # Such statements show up only at [Pre|Post]StmtPurgeDeadSymbols
+            skip_pretty = 'PurgeDeadSymbols' in p.stmt_point_kind
+            stmt_color = 'cyan3'
             if p.loc is not None:
                 self._dump('<tr><td align="left" width="0">'
                            '%s:<b>%s</b>:<b>%s</b>:</td>'
                            '<td align="left" width="0"><font color="%s">'
-                           '%s</font></td><td>%s</td></tr>'
+                           '%s</font></td>'
+                           '<td align="left"><font color="%s">%s</font></td>'
+                           '<td>%s</td></tr>'
                            % (p.loc.filename, p.loc.line,
-                              p.loc.col, color, p.stmt_kind, p.pretty))
+                              p.loc.col, color, p.stmt_kind,
+                              stmt_color, p.stmt_point_kind,
+                              p.pretty if not skip_pretty else ''))
             else:
                 self._dump('<tr><td align="left" width="0">'
                            '<i>Invalid Source Location</i>:</td>'
                            '<td align="left" width="0">'
-                           '<font color="%s">%s</font></td><td>%s</td></tr>'
-                           % (color, p.stmt_kind, p.pretty))
+                           '<font color="%s">%s</font></td>'
+                           '<td align="left"><font color="%s">%s</font></td>'
+                           '<td>%s</td></tr>'
+                           % (color, p.stmt_kind,
+                              stmt_color, p.stmt_point_kind,
+                              p.pretty if not skip_pretty else ''))
         elif p.kind == 'Edge':
             self._dump('<tr><td width="0"></td>'
                        '<td align="left" width="0">'
                        '<font color="%s">%s</font></td><td align="left">'
                        '[B%d] -\\> [B%d]</td></tr>'
-                       % (color, p.kind, p.src_id, p.dst_id))
+                       % (color, 'BlockEdge', p.src_id, p.dst_id))
+        elif p.kind == 'BlockEntrance':
+            self._dump('<tr><td width="0"></td>'
+                       '<td align="left" width="0">'
+                       '<font color="%s">%s</font></td>'
+                       '<td align="left">[B%d]</td></tr>'
+                       % (color, p.kind, p.block_id))
         else:
             # TODO: Print more stuff for other kinds of points.
             self._dump('<tr><td width="0"></td>'
@@ -406,7 +425,7 @@ class DotDumpVisitor(object):
 
         if p.tag is not None:
             self._dump('<tr><td width="0"></td>'
-                       '<td colspan="2" align="left">'
+                       '<td colspan="3" align="left">'
                        '<b>Tag: </b> <font color="crimson">'
                        '%s</font></td></tr>' % p.tag)
 




More information about the cfe-commits mailing list