<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 3.0cm 70.85pt 3.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=GL link="#0563C1" vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal><span lang=EN-US>Hello all,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Having a loop like this:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>…<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    |-DeclStmt 0x233fe40 <line:14:5, col:14><o:p></o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='color:red'>    | `-VarDecl <span style='background:yellow;mso-highlight:yellow'>0x233fdb8</span> <col:5, col:13> col:9 used I 'int' cinit<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-US style='color:red'>    |   `-IntegerLiteral 0x233fe20 <col:13> 'int' 0<o:p></o:p></span></b></p><p class=MsoNormal><span lang=EN-US>…<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    `-ForStmt 0x236b390 <line:29:5, line:33:5><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>      |-DeclStmt 0x2340710 <line:29:10, col:19><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>      | `-VarDecl 0x2340670 <col:10, col:18> col:14 used i 'int' cinit<o:p></o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='color:red'>      |   `-ImplicitCastExpr 0x23406f8 <col:18> 'int' <LValueToRValue><o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-US style='color:red'>      |     `-DeclRefExpr 0x23406d8 <col:18> 'int' lvalue Var <span style='background:yellow;mso-highlight:yellow'>0x233fdb8</span> 'I' 'int'<o:p></o:p></span></b></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Which basically corresponds to:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Int I;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>int I = 0;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>…<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>for (i = I; ...)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>I am trying to parse that loop such as:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>const ASTContext *C = …<o:p></o:p></span></p><p class=MsoNormal>const DeclStmt *NameValInit = dyn_cast<DeclStmt>(ForLoop->getInit());<o:p></o:p></p><p class=MsoNormal>...<o:p></o:p></p><p class=MsoNormal>  if (NameValInit != nullptr) {<o:p></o:p></p><p class=MsoNormal>    clang::Expr::EvalResult R;<o:p></o:p></p><p class=MsoNormal>    V = dyn_cast<VarDecl>(NameValInit->getSingleDecl());<o:p></o:p></p><p class=MsoNormal>    if (V != nullptr) {<o:p></o:p></p><p class=MsoNormal>      if (V->getInit()->EvaluateAsInt(R, *C)) {<o:p></o:p></p><p class=MsoNormal>        return R.Val.getInt().getExtValue();<o:p></o:p></p><p class=MsoNormal>    }<o:p></o:p></p><p class=MsoNormal><span lang=EN-US>…<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>I have checked this thread [1], which is very insightful. I guess that my conceptual error lies in the “EvaluateAsInt”, however, how can I retrieve the value of the IntegerLiteral of the VarDecl referenced by the DeclrRexExpr?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Thanks for your time.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Kind regards,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>[1] <a href="http://clang-developers.42468.n3.nabble.com/How-does-Clang-Staic-Analyzer-deal-with-DeclRefExpr-tp4036387p4036398.html">http://clang-developers.42468.n3.nabble.com/How-does-Clang-Staic-Analyzer-deal-with-DeclRefExpr-tp4036387p4036398.html</a><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:GL'>--<u><o:p></o:p></u></span></p><p class=MsoNormal><span style='mso-fareast-language:GL'>H.<o:p></o:p></span></p><p class=MsoNormal><u><span style='mso-fareast-language:GL'><a href="http://gac.udc.es/~horro">http://gac.udc.es/~horro</a><o:p></o:p></span></u></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>