[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