[cfe-dev] Wrong SourceRange for IfStmt ?

Roman Popov via cfe-dev cfe-dev at lists.llvm.org
Sun Oct 22 10:09:35 PDT 2017


Thanks you!
So I've misunderstood the meaning of API.
Here is also related discussion on stackoverflow :
https://stackoverflow.com/questions/11083066/getting-the-source-behind-clangs-ast


On Oct 22, 2017 7:41 AM, "Don Hinton" <hintonda at gmail.com> wrote:

You're assuming that the length of the end token is 1, but you should use
its actual length instead.

So, instead of getting the end location of the statement, you should get
the end token, then use its location and length, e.g., tok.getLocation().
getLocWithOffset(tok.getLength()).

hth...
don

On Sat, Oct 21, 2017 at 9:28 PM, Roman Popov via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> Hello,
> I want to emit some text after each if statement in source code. When
> testing a tool I've found that ifStmt->getSourceRange() sometimes returns
> wrong end location.
>
> In RecursiveASTVisitor I have following code to insert "$" before and
> after each if:
>
>     bool VisitIfStmt(clang::IfStmt* ifStmt)
>     {
>         clang::tooling::Replacement rep0(compInst.getSourceManager(),
> ifStmt->getLocStart(), 0, "$");
>         handleAllErrors ( replacements.add(rep0) );
>         clang::tooling::Replacement rep1(compInst.getSourceManager(),
> ifStmt->getLocEnd().getLocWithOffset(1), 0, "$");
>         handleAllErrors ( replacements.add(rep1) );
>         return true;
>     }
>
>     Replacements &replacements;
>     ASTContext *Context;
>     clang::CompilerInstance &compInst;
>
> When testing on following code:
>
>     int a;
>     if (a)
>        a--;
>
> Result is:
>
>     $if (a)
>        a-$-;
>
>
> So Clang thinks that if statement ends inside decrement operator. Is it a
> bug, or I misuse API?
>
> Thanks,
> -Roman
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171022/4dae008e/attachment.html>


More information about the cfe-dev mailing list