[clang] [clang] Correct FixIt ranges for unused capture warnings (PR #141148)
Oliver Hunt via cfe-commits
cfe-commits at lists.llvm.org
Sat May 24 15:19:07 PDT 2025
================
@@ -84,6 +84,21 @@ SourceLocation Sema::getLocForEndOfToken(SourceLocation Loc, unsigned Offset) {
return Lexer::getLocForEndOfToken(Loc, Offset, SourceMgr, LangOpts);
}
+SourceRange Sema::getRangeForNextToken(SourceLocation Loc,
+ bool IncludeComments) {
+ if (!Loc.isValid())
+ return SourceRange();
+ std::optional<Token> NextToken =
+ Lexer::findNextToken(Loc, SourceMgr, LangOpts, IncludeComments);
----------------
ojhunt wrote:
I'm using this one function for two purposes:
* Finding the (presumed) comma and stepping over it
* Finding the start of the next token
It seemed like a reasonable approach, and given we're producing a fixit diagnostic I don't think the perf matters.
Basically what I'm trying to do is say given an unused capture:
```cpp
auto foo = [a, unused, b] ... // just a pile of white space for illustrative purposes
auto bar = [a, unused, /* ... */ b] ...
auto wibble = [a, /* ... */ unused, b] ...
auto thingy = [a, unused /* ... */, b] ...
```
produce fixits that result in
```cpp
auto foo = [a, b] ... // just a pile of white space for illustrative purposes
auto bar = [a, /* ... */ b] ...
auto wibble = [a, b] ...
auto thingy = [a, b] ...
```
and for that what we want to do is find the end of the comma, and the start of the next token, simply using the "findNextToken" to just get those tokens seems reasonable.
Of course as we discussed in discord, that function doesn't handle macros, and handling this correctly for macros would imply the Sema "wrapper" excludes macro wrappers (so would not just be a wrapper) or every user has to check for macros.
https://github.com/llvm/llvm-project/pull/141148
More information about the cfe-commits
mailing list