<div dir="ltr"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jun 14, 2020 at 2:05 AM Artem Dergachev <<a href="mailto:noqnoqneo@gmail.com">noqnoqneo@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
> How do I get the SVal for the memory pointed to by
CallEvent::getArgSVal(0)?<br>
<br>
ProgramState::getSVal (the overload that accepts the
location/region).<br></div></blockquote><div><br></div><div>Thanks, that was it. I would never have thought that SVal -> SVal::getAsRegion() -> ProgramState::getSVal() would have ended up with anything but the original SVal, but there it is!</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
Generally i recommend checking out a few links at the bottom of
<a href="http://clang-analyzer.llvm.org/checker_dev_manual.html" target="_blank">http://clang-analyzer.llvm.org/checker_dev_manual.html</a></div></blockquote><div><br></div><div>Speaking of that... would you be interested in merging my PR <a href="https://github.com/haoNoQ/clang-analyzer-guide/pull/5">https://github.com/haoNoQ/clang-analyzer-guide/pull/5</a> and some of the other open PRs on the handbook, and releasing a new version? Depending on how much of a hassle it is, I might be interested to make it publish as HTML to GitHub Pages automatically so you wouldn't have to release PDFs...<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
<div>14.06.2020 12:05 AM, via cfe-dev wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>Hi list,</div>
<div><br>
</div>
<div>I am writing a static analyzer checker and trying to model
a function of the following type in check::PostCall:</div>
<div><br>
</div>
<div>void func(bool* outParam) {</div>
<div> assert(outParam);<br>
</div>
<div> *outParam = true;</div>
<div>}<br>
</div>
<div><br>
</div>
<div>(in real life there are some other inputs that determine
the value stored in the out parameter, and a return value
indicating whether there was an error, but let's use this for
the sake of a simple example)</div>
<div><br>
</div>
<div>Suppose I want my PostCall callback to store "true" in
*outParam. Is this possible to achieve with
ProgramState::BindExpr or ProgramState::bindLoc? How do I get
the SVal for the memory pointed to by
CallEvent::getArgSVal(0)?</div>
<div><br>
</div>
<div>I thought of "synthesizing" a UnaryOperator expression
using UO_Deref on CallEvent::getArgExpr(0) and passing that to
ProgramState::BindExpr, but it seems that getArgExpr returns a
const Expr* and a non-const one is required to construct a
UnaryOperator expression.</div>
<div><br>
</div>
<div>Best regards,<br>
</div>
<div>-- <br>
<div dir="ltr">Philip</div>
</div>
</div>
<br>
<fieldset></fieldset>
<pre>_______________________________________________
cfe-dev mailing list
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<br>
</div>
</blockquote></div><br clear="all"></div>Regards,<br><div>-- <br><div dir="ltr" class="gmail_signature">Philip</div></div></div>