[PATCH] D20844: FixIt: correctly set DeclSpec's range end for a type name annotation.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 1 13:18:18 PDT 2016


On Wed, Jun 1, 2016 at 12:42 PM, Manman Ren via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> manmanren added a comment.
>
> In http://reviews.llvm.org/D20844#445762, @rjmccall wrote:
>
> > Hmm.  No, I think the original code is correct here — RangeEnd is a
> token range, and those are generally inclusive rather than exclusive.  The
> fix-it needs to be inserting at the end of the token.
>
>
> We currently insert the fix-it here
> SourceLocation TypeEndLoc = TSInfo->getTypeLoc().getLocEnd();
>

Yep, that's the bug. That source location refers to the start of the last
token in the source range.


> And we call "TL.setNameEndLoc(DS.getLocEnd());" for ObjCInterfaceTypeLoc.
>
> The problem is that for annotation token, both the start and the end point
> to the same location. With "DS.SetRangeEnd(Tok.getAnnotationEndLoc());",
> the DeclSpec has the same start and end location.
>
> Is there a way to get the real end of the annotation token, since
> getAnnotationEndLoc returns the start location?
>

You can use Preprocessor::getLocForEndOfToken to get the character location
past the end of the token. (If you want the * to be after the space in your
example, you'll need to also skip that whitespace.)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160601/4963d3cd/attachment.html>


More information about the cfe-commits mailing list