[cfe-dev] Clang Static Analyzer execution path for loop

Arthur Yoo phjy007 at gmail.com
Sat Apr 6 23:30:35 PDT 2013


Hi all,

Now I am focusing on the execution path of Clang Static Analyzer. Firstly,
I did some tests on *code_1.c*.

//*code_1.c*

void func(int arg) {

    int v;

    v = 0;

    int i;

    for(i = 0; i < arg; i++) {

        v = v + 1;

    }

    int a, b;

    a = v;

    b = a;

}

The CFG of *code_1*.c is
http://ww3.sinaimg.cn/large/a74e55b4jw1e3h14gvh8vj.jpg.

Then I tried to get the corresponding execution path sequence. Through test
I got its execution path sequence, which is
B5-B4-B1-B3-B2-B4-B1-B3-B2-B4-B1-B3-B2-B4-B1-B3-B2. (In *code_1.c,* the
variable arg, which determines the loop times, is a symbolic value. And I
used the default max_loop value in Clang Static Anaylzer, which equals 4.)


I tried to do the same tests on *code_2.c*.

//*code_2.c*

void func(int arg) {

    int v;

    v = arg + 1;

    if(arg < 314)  {

        for(int i = 0; i < arg; i++) {

            v = arg + 33;

        }

    } else {

        v = arg + 11;

    }

    int a, b;

    a = 62951413;

    b = v;

}

The CFG of *code_2.c* is
http://ww2.sinaimg.cn/large/a74eed94jw1e3h13zu3raj.jpg.  And its execution
path sequence is
B7-B2-B1-B6-B5-B1-B4-B3-B5-B1-B4-B3-B5-B1-B4-B3-B5-B1-B4-B3. The rule of
tracing path in *code_2*.c is consistent with the rule in *code_1.c*.


However, when I tried to do the same tests on *code_3.c*.

//*code_3.c*

void func(int arg) {

    int v;

    v = arg + 1;

    if(arg < 314) {

        v = arg + 11;

    } else {

        for(int i = 0; i < arg; i++) {

            v = arg + 33;

        }

    }

    int a, b;

    a = 62951413;

    b = v;

}

The CFG of *code_3.c* is
http://ww4.sinaimg.cn/large/a74ecc4cjw1e3h13ae2xtj.jpg. It seems that some
strange things happened. Through test I got its execution path sequence,
which is B7-B5-B4-B3-B2-B4-B3-B2-B4-B3-B2-B4-B3-B2-B6-B1. In fact, I
expected the execution sequence should be
B7-B5-B4-B1-B3-B2-B4-B1-B3-B2-B4-B1-B3-B2-B4-B1-B3-B2-B6-B1.


So, is there anybody can help me explain the execution path of Clang Static
Analyzer in *code_3.c*?

Am I doing something stupid here? Any help will be greatly appreciated.

P.S. The version number of LLVM and Clang in my tests is 3.3.
------
Best regards,
Arthur Yoo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130407/ae199240/attachment.html>


More information about the cfe-dev mailing list