[cfe-dev] How to get the StringLiteral EndLocation of the last token

chiasa.men via cfe-dev cfe-dev at lists.llvm.org
Wed Sep 1 08:26:40 PDT 2021


The EndLoc of StringLiteral is the Loc returned by 
getStrTokenLoc(getNumConcatenated()-1). 
I understand that #6 concats the String tokens and the AST matcher gets the 
already concatenated string.

How do I know where the actual end (in the source file) is?

Example

Test:
#define testmacro L"testexpansion"
int main(int argc, char** argv) {
auto test=testmacro L"append";
}
​
In the Matcher:
  llvm::dbgs()<<"Range:"<<pLiteral->getBeginLoc().printToString(SM)<<", 
"<<pLiteral->getEndLoc().printToString(SM)<<"\n";
  for (unsigned i = 0; i<pLiteral->getNumConcatenated();++i){
    llvm::dbgs()<<"getStrTokenLoc "<<i<<"\n";
    pLiteral->getStrTokenLoc(i).dump(SM);
  }

output:
Range:3:15 <Spelling=1:19>, :3:25
getStrTokenLoc 0
:3:15 <Spelling=:1:19>
// which is !testmacro L"append";
getStrTokenLoc 1
:3:25
// which is testmacro !L"append";

What I would need is this location:  testmacro L"append"!; (34)

What can I do to get the "actual" end of the StringLiteral in the SourceFile. 
Is there some kind of callback "onStringConcat" or a supposed way for this?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20210901/90817b9f/attachment.html>


More information about the cfe-dev mailing list