<div dir="ltr">The implementation of getSourceRange() reveals, that it returns the end location of the init-expression. For the arithmetic types, it is just a Literal, e.g. IntegerLiteral. For the others, it might be InitListExpr, CXXConstructExpr etc:<div><br></div><div><div>int x(123);</div><div>int y{456};</div></div><div><br></div><div><div>    | DeclStmt 0x17c4488 <line:7:5, col:15></div><div>    | `-VarDecl 0x17c43d8 <col:5, col:11> col:9 x 'int' callinit</div><div>    |   `-IntegerLiteral 0x17c4438 <col:11> 'int' 123</div><div>    |-DeclStmt 0x17c45c0 <line:8:5, col:15></div><div>    | `-VarDecl 0x17c44b0 <col:5, col:14> col:9 y 'int' listinit</div><div>    |   `-InitListExpr 0x17c4578 <col:10, col:14> 'int'</div><div>    |     `-IntegerLiteral 0x17c4510 <col:11> 'int' 456</div></div><div><br></div><div>Output:</div><div>int x(123<br></div><div>int y{456}<br></div><div><br></div><div>Obviously, the literal ends at 3 and the list expression at }. Something like</div><div><br></div><div><div>    |-DeclStmt 0x17c4488 <line:7:5, col:15></div><div>    | `-VarDecl 0x17c43d8 <col:5, col:14> col:9 x 'int' callinit</div><div>    |   `-InitCallExpr 0xdeadbeef <col:10, col:14> 'int'</div><div>    |     `-IntegerLiteral 0x17c4438 <col:11> 'int' 123</div><div>    |-DeclStmt 0x17c45c0 <line:8:5, col:15></div><div>    | `-VarDecl 0x17c44b0 <col:5, col:14> col:9 y 'int' listinit</div><div>    |   `-InitListExpr 0x17c4578 <col:10, col:14> 'int'</div><div>    |     `-IntegerLiteral 0x17c4510 <col:11> 'int' 456</div></div><div><br></div><div>would have helped me, but there is probably no benefit with that.</div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-11-07 0:08 GMT+01:00 Firat Kasmis <span dir="ltr"><<a href="mailto:firat.kasmis@gmail.com" target="_blank">firat.kasmis@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>following code:</div><div><br></div><div><div>int v(8);</div><div>bool b(false);</div><div>double d(0.5);</div><div>Structy s(23);</div><div><br></div><div>int v1, v2(3), v3, v4(4);</div><div>Structy s1, s2(23), s3, s4(3);</div></div><div><br></div><div><div>if(const auto *vardecl = Result.Nodes.getNodeAs<clang::<wbr>VarDecl>("vardecl"))</div><div>{</div><div>    llvm::outs() << Lexer::getSourceText(<wbr>CharSourceRange::<wbr>getTokenRange(vardecl-><wbr>getSourceRange()), *SM, LO) << "\n";</div><div>}</div></div><div><br></div><div>outputs:</div><div><br></div><div><div>int v(8</div><div>bool b(false</div><div>double d(0.5</div><div>Structy s(23)</div><div><br></div><div>int v1</div><div>int v1, v2(3</div><div>int v1, v2(3), v3</div><div>int v1, v2(3), v3, v4(4</div><div><br></div><div>Structy s1</div><div>Structy s1, s2(23)</div><div>Structy s1, s2(23), s3</div><div>Structy s1, s2(23), s3, s4(3)</div></div><div><br></div><div><br></div><div>As can be seen, the last parenthesis is missing for the arithmetic types. The SourceRange is for any other kind of initialization right, except for this case.</div><div><br></div><div>Regards,</div><div>Firat</div></div>
</blockquote></div><br></div>