Skip to content

Commit de0f000

Browse files
committed
[SyntaxParse] Dump leaking node in assertion
1 parent 7b31d2b commit de0f000

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
@@ -119,8 +119,20 @@ class ParsedRawSyntaxNode {
119119
assert(getTokenKind() == tokKind && "Token kind with too large value!");
120120
}
121121

122+
#ifndef NDEBUG
123+
bool ensureDataIsNotRecorded() {
124+
if (DK != DataKind::Recorded)
125+
return true;
126+
llvm::dbgs() << "Leaking node: ";
127+
dump(llvm::dbgs());
128+
llvm::dbgs() << "\n";
129+
return false;
130+
}
131+
#endif
132+
122133
ParsedRawSyntaxNode &operator=(ParsedRawSyntaxNode &&other) {
123-
assert(DK != DataKind::Recorded);
134+
assert(ensureDataIsNotRecorded() &&
135+
"recorded data is being destroyed by assignment");
124136
switch (other.DK) {
125137
case DataKind::Null:
126138
break;
@@ -145,7 +157,7 @@ class ParsedRawSyntaxNode {
145157
*this = std::move(other);
146158
}
147159
~ParsedRawSyntaxNode() {
148-
assert(DK != DataKind::Recorded);
160+
assert(ensureDataIsNotRecorded() && "recorded data is being destructed");
149161
}
150162

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

0 commit comments

Comments
 (0)