[cfe-dev] Question on LiveVariables analysis

Guoping Long longguoping at gmail.com
Sat Oct 8 17:52:58 PDT 2011


Hi, Ted

   I will be very curious why results in your environment are correct.
Attached is my test code. I stepped into the program using GDB, it turned
out that no live variables can be found. Take the last return statement in
my previous example program as an example: return b * d + c. The transfer
function eventually called the default StmtVisit function which did not
recognize variables b, d, c which are actually used.The only function in
LiveVariables.cpp that can generate live variables is VisitDeclRefExpr(),
but when running the program this function is never called.

  I am using the newest version of Clang/LLVM. Is it because my environment
setup is wrong?

----
Guoping

2011/10/7 Ted Kremenek <kremenek at apple.com>

> This is what I am seeing:
>
> $ clang -cc1 -analyze -analyzer-checker=debug.DumpLiveVars t.c
>
> [ B0 (live variables at block exit) ]
>
> [ B1 (live variables at block exit) ]
>
> [ B2 (live variables at block exit) ]
>  b <t.c:2:10>
>  d <t.c:2:16>
>
> [ B3 (live variables at block exit) ]
>  a <t.c:2:7>
>  b <t.c:2:10>
>  d <t.c:2:16>
>
> [ B4 (live variables at block exit) ]
>
>
> I also think the number of the blocks is not quite right in your example,
> or at least how they correspond to Clang's CFG:
>
> $ clang -cc1 -analyze -analyzer-checker=debug.DumpCFG t.c
>
>  [ B4 (ENTRY) ]
>     Predecessors (0):
>     Successors (1): B3
>
>  [ B1 ]
>       1: 4
>       2: c
>       3: [B1.2] = [B1.1]
>       4: b
>       5: [B1.4]
>       6: d
>       7: [B1.6]
>       8: [B1.5] * [B1.7]
>       9: c
>      10: [B1.9]
>      11: [B1.8] + [B1.10]
>      12: return [B1.11];
>     Predecessors (2): B2 B3
>     Successors (1): B0
>
>  [ B2 ]
>       1: a
>       2: [B2.1]
>       3: b
>       4: [B2.3]
>       5: [B2.2] + [B2.4]
>       6: c
>       7: [B2.6] = [B2.5]
>       8: 2
>       9: d
>      10: [B2.9] = [B2.8]
>     Predecessors (1): B3
>     Successors (1): B1
>
>  [ B3 ]
>       1: int a;
>       2: int b;
>       3: int c;
>       4: int d;
>       5: int x;
>       6: 3
>       7: a
>       8: [B3.7] = [B3.6]
>       9: 5
>      10: b
>      11: [B3.10] = [B3.9]
>      12: 4
>      13: d
>      14: [B3.13] = [B3.12]
>      15: 100
>      16: x
>      17: [B3.16] = [B3.15]
>      18: a
>      19: [B3.18]
>      20: b
>      21: [B3.20]
>      22: [B3.19] > [B3.21]
>       T: if [B3.22]
>     Predecessors (1): B4
>     Successors (2): B2 B1
>
>  [ B0 (EXIT) ]
>     Predecessors (1): B1
>     Successors (0):
>
>
> Block B3 is actually the entrance block, since the CFG is built bottom-up.
>
> Perhaps there is something not quite right with how you are running the
> checkers?
>
> On Oct 7, 2011, at 9:32 PM, Guoping Long wrote:
>
> Hi,
>
>    While LiveVariables analysis
> (tools/clang/lib/Analysis/LiveVariables.cpp) does not generate any output?
> Specifically, for this simple program:
>   1 int main(int argc, char *argv[])
>   2 {
>   3   int a,b,c,d,x;
>   4
>   5   a = 3;   //Basic block B1
>   6   b = 5;
>   7   d = 4;
>   8   x = 100;
>   9
>  10   if(a>b){  //Basic block B2
>  11     c = a+b;
>  12     d = 2;
>  13   }
>  14
>  15   c = 4;   //Basic block B3
>  16   return b * d + c;
>  17 }
> This simple example is taken from this wiki page illustrating live
> variables analysis (http://en.wikipedia.org/wiki/Live_variable_analysis).
> Both B2 and B3 should have live variables, but the output (using
> LiveVariables::dumpBlockLiveness(SourceManager &)) says no live variables
> exist. I am trying to use this analysis as an example on how to write a good
> analysis algorithm for Clang, but really did not expect this behavior for
> this analysis.
> Anybody who knows the answer please let me know. Many thanks!!!
>
> --------
> Guoping
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20111008/0e84ba62/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: main.cpp
Type: text/x-c++src
Size: 2924 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20111008/0e84ba62/attachment.cpp>


More information about the cfe-dev mailing list