diff options
Diffstat (limited to 'clang/lib/Tooling/Syntax/Tokens.cpp')
| -rw-r--r-- | clang/lib/Tooling/Syntax/Tokens.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Tooling/Syntax/Tokens.cpp b/clang/lib/Tooling/Syntax/Tokens.cpp index 2f28b9cf286a..8d32c45a4a70 100644 --- a/clang/lib/Tooling/Syntax/Tokens.cpp +++ b/clang/lib/Tooling/Syntax/Tokens.cpp @@ -401,6 +401,12 @@ std::string TokenBuffer::Mapping::str() const { std::optional<llvm::ArrayRef<syntax::Token>> TokenBuffer::spelledForExpanded(llvm::ArrayRef<syntax::Token> Expanded) const { + // In cases of invalid code, AST nodes can have source ranges that include + // the `eof` token. As there's no spelling for this token, exclude it from + // the range. + if (!Expanded.empty() && Expanded.back().kind() == tok::eof) { + Expanded = Expanded.drop_back(); + } // Mapping an empty range is ambiguous in case of empty mappings at either end // of the range, bail out in that case. if (Expanded.empty()) |
