This revision was automatically updated to reflect the committed changes.
Closed by commit rL364881: [analyzer] exploded-graph-rewriter: Improve program
point dumps. (authored by dergachev, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Changed prior to commit:
https://reviews.llvm.org/D64051?vs=207446&id=207465#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D64051/new/
https://reviews.llvm.org/D64051
Files:
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
Index: cfe/trunk/test/Analysis/exploded-graph-rewriter/program_points.dot
===================================================================
--- cfe/trunk/test/Analysis/exploded-graph-rewriter/program_points.dot
+++ cfe/trunk/test/Analysis/exploded-graph-rewriter/program_points.dot
@@ -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 @@
"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 @@
// 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 @@
{
"kind": "Statement",
"stmt_kind": "DeclRefExpr",
+ "stmt_point_kind": "PreStmt",
"stmd_id": 3,
"pointer": "0x3",
"pretty": "x",
Index: cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c
===================================================================
--- cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c
+++ cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c
@@ -17,7 +17,7 @@
// 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;
Index: cfe/trunk/utils/analyzer/exploded-graph-rewriter.py
===================================================================
--- cfe/trunk/utils/analyzer/exploded-graph-rewriter.py
+++ cfe/trunk/utils/analyzer/exploded-graph-rewriter.py
@@ -59,6 +59,7 @@
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 @@
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 @@
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)
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits