[cfe-dev] How does the Static Analyzer maintain the bindings?
Arthur Yoo
phjy007 at gmail.com
Tue Apr 1 07:03:40 PDT 2014
Hi all,
It seems that I was confused by the Static Analyzer's bindings. Here are
two examples that make me confused.
1 /* example 1 */
2 void func() {
3 int arr[10][10];
4 int b;
5 b = 5;
6 arr[b][2] = 9;
7 }
When evaluating the *checkLocation(Store) *of "arr[b][2]" in line 6, I can
get the MemRegion of b. Then I tried to get the SVal of MemRegion b via
Store(StoreManager.getBinding()). But I got an Undefined SVal. And the
Store mapping of ProgramState at that time was empty, too. In addition, I
tried to get the b's SVal with its DeclRefExpr using
ProgramStateRef->getSVal(). But it returned me an Unknown SVal. In fact,
it's easy to know that the SVal of b at that time should be (5, S32b). Is
there any way to make it?
Another example here is similar, but is for pointer.
0 /* example 2 */
1 struct st0 {
2 int i;
3 };
4 struct st1 {
5 int i;
6 struct st0 struct0;
7};
8struct st2 {
9 struct st1 *p;
10 };
11 int main() {
12 struct st1 s1;
13 struct st2 s2;
14 s2.p = &s1;
15 s2.p->struct0.i = 3;
16 }
When evaluating the *checkLocation(Store) *of "s2.p->struct0.i" in line 15,
I can get the MemRegion of s2.p. Then I tried to get the SVal of MemRegion
s2.p via Store(StoreManager.getBinding()). But I got an Undefined SVal.
However, the expected SVal should be a MemRegionVal wrapping MemRegion s1.
Because MemRegion s1 is the pointee region of s2.p. How can I get that?
Any help would be greatly appreciated.
--
Best regards,
Arthur Yoo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140401/5d5e0961/attachment.html>
More information about the cfe-dev
mailing list