Skip to content

Commit f321486

Browse files
committed
[SyntaxParse] Dump leaking node in assertion
1 parent aeec682 commit f321486

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

include/swift/Parse/ParsedRawSyntaxNode.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,20 @@ class ParsedRawSyntaxNode {
117117
assert(getTokenKind() == tokKind && "Token kind with too large value!");
118118
}
119119

120+
#ifndef NDEBUG
121+
bool ensureDataIsNotRecorded() {
122+
if (DK != DataKind::Recorded)
123+
return true;
124+
llvm::dbgs() << "Leaking node: ";
125+
dump(llvm::dbgs());
126+
llvm::dbgs() << "\n";
127+
return false;
128+
}
129+
#endif
130+
120131
ParsedRawSyntaxNode &operator=(ParsedRawSyntaxNode &&other) {
121-
assert(DK != DataKind::Recorded);
132+
assert(ensureDataIsNotRecorded() &&
133+
"recorded data is being destroyed by assignment");
122134
switch (other.DK) {
123135
case DataKind::Null:
124136
break;
@@ -143,7 +155,7 @@ class ParsedRawSyntaxNode {
143155
*this = std::move(other);
144156
}
145157
~ParsedRawSyntaxNode() {
146-
assert(DK != DataKind::Recorded);
158+
assert(ensureDataIsNotRecorded() && "recorded data is being destructed");
147159
}
148160

149161
syntax::SyntaxKind getKind() const { return syntax::SyntaxKind(SynKind); }

0 commit comments

Comments
 (0)