[cfe-dev] Question on LiveVariables analysis
Guoping Long
longguoping at gmail.com
Sat Oct 8 22:23:33 PDT 2011
On my testing environment, the UninitializedValues.cpp has the same problem
(do not have any output). Both analyses are based on the StmtVisitor
interface. I think there may be a version mismatch, that is these two
analyses are based on an older version of StmtVisitor class to work? I just
downloaded a new version from website and did all tests again and still have
this problem.
----
Guoping
2011/10/8 Guoping Long <longguoping at gmail.com>
> 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/525c58c9/attachment.html>
More information about the cfe-dev
mailing list