@@ -55,12 +55,12 @@ where
55
55
56
56
// Nodes
57
57
for ( block, _) in body. basic_blocks ( ) . iter_enumerated ( ) {
58
- write_node ( block, body, w) ?;
58
+ write_node ( def_id , block, body, w) ?;
59
59
}
60
60
61
61
// Edges
62
62
for ( source, _) in body. basic_blocks ( ) . iter_enumerated ( ) {
63
- write_edges ( source, body, w) ?;
63
+ write_edges ( def_id , source, body, w) ?;
64
64
}
65
65
writeln ! ( w, "}}" )
66
66
}
@@ -115,21 +115,33 @@ pub fn write_node_label<W: Write, INIT, FINI>(block: BasicBlock,
115
115
}
116
116
117
117
/// Write a graphviz DOT node for the given basic block.
118
- fn write_node < W : Write > ( block : BasicBlock , body : & Body < ' _ > , w : & mut W ) -> io:: Result < ( ) > {
118
+ fn write_node < W : Write > (
119
+ def_id : DefId ,
120
+ block : BasicBlock ,
121
+ body : & Body < ' _ > ,
122
+ w : & mut W ,
123
+ ) -> io:: Result < ( ) > {
119
124
// Start a new node with the label to follow, in one of DOT's pseudo-HTML tables.
120
- write ! ( w, r#" {} [shape="none", label=<"# , node( block) ) ?;
125
+ write ! ( w, r#" {} [shape="none", label=<"# , node( def_id , block) ) ?;
121
126
write_node_label ( block, body, w, 1 , |_| Ok ( ( ) ) , |_| Ok ( ( ) ) ) ?;
122
127
// Close the node label and the node itself.
123
128
writeln ! ( w, ">];" )
124
129
}
125
130
126
131
/// Write graphviz DOT edges with labels between the given basic block and all of its successors.
127
- fn write_edges < W : Write > ( source : BasicBlock , body : & Body < ' _ > , w : & mut W ) -> io:: Result < ( ) > {
132
+ fn write_edges < W : Write > (
133
+ def_id : DefId ,
134
+ source : BasicBlock ,
135
+ body : & Body < ' _ > ,
136
+ w : & mut W ,
137
+ ) -> io:: Result < ( ) > {
128
138
let terminator = body[ source] . terminator ( ) ;
129
139
let labels = terminator. kind . fmt_successor_labels ( ) ;
130
140
131
141
for ( & target, label) in terminator. successors ( ) . zip ( labels) {
132
- writeln ! ( w, r#" {} -> {} [label="{}"];"# , node( source) , node( target) , label) ?;
142
+ let src = node ( def_id, source) ;
143
+ let trg = node ( def_id, target) ;
144
+ writeln ! ( w, r#" {} -> {} [label="{}"];"# , src, trg, label) ?;
133
145
}
134
146
135
147
Ok ( ( ) )
@@ -181,8 +193,8 @@ fn write_graph_label<'tcx, W: Write>(
181
193
writeln ! ( w, ">;" )
182
194
}
183
195
184
- fn node ( block : BasicBlock ) -> String {
185
- format ! ( "bb{}" , block. index( ) )
196
+ fn node ( def_id : DefId , block : BasicBlock ) -> String {
197
+ format ! ( "bb{}__{} " , block. index( ) , graphviz_safe_def_name ( def_id ) )
186
198
}
187
199
188
200
fn escape < T : Debug > ( t : & T ) -> String {
0 commit comments