[cfe-dev] Static analyzer: check for ForStmt

Siraj, Tareq A tareq.a.siraj at intel.com
Tue Jun 25 10:28:10 PDT 2013


Anna,
Thanks for your reply. I am looking at existing bugzilla entries and picked up http://llvm.org/bugs/show_bug.cgi?id=5067.

I started off with an AST based checker but soon realized that the iterators in the condition might be declared/assigned outside of the loop header (possibly outside of the current translation unit). I understand that currently the analyzer is limited to a single translation unit and won't detect this if not in the same TU.

Is it safe to cache the analyzed Stmt into a registered list so that we don't analyze the same Stmt 4 times? Thanks. 

--
Tareq A. Siraj 
 

On 2013-06-25, at 1:14 PM, Anna Zaks <ganna at apple.com>
 wrote:

> Siraj,
> 
> What you are seeing is expected - the analyzer processes entrance to the loop 4 times along the execution path. 
> 
> What is the check you are trying to write? Is it path-sensitive in nature?
> 
> Cheers,
> Anna.
> 
> On Jun 25, 2013, at 8:10 AM, "Siraj, Tareq A" <tareq.a.siraj at intel.com> wrote:
> 
>> Hello,
>> I am new to the static analyzer codebase and wanted to try out some simple checkers on for loops. I noticed that PreStmt ignores control flow e.g. IfStmt and we should be using check::BranchCondition. I tried using check::BranchCondition on for loops and looks like it calls the checkBranchCondition function 4 times for 1 for loop. So,
>>  (1) Is this a bug?
>>  (2) Is check::BranchCondition the right checker to use here? 
>> 
>> Thanks.
>> 
>> Sample for loop:
>> =============
>> for (int i = 0; i < 10; ++i)
>> 
>> Calling dump() on the statement in checkBranchCondition() produces:
>> ======================================================
>> BinaryOperator 0x476f540 '_Bool' '<'
>> |-ImplicitCastExpr 0x476f528 'int' <LValueToRValue>
>> | `-DeclRefExpr 0x476f4e0 'int' lvalue Var 0x476f450 'i' 'int'
>> `-IntegerLiteral 0x476f508 'int' 10
>> BinaryOperator 0x476f540 '_Bool' '<'
>> |-ImplicitCastExpr 0x476f528 'int' <LValueToRValue>
>> | `-DeclRefExpr 0x476f4e0 'int' lvalue Var 0x476f450 'i' 'int'
>> `-IntegerLiteral 0x476f508 'int' 10
>> BinaryOperator 0x476f540 '_Bool' '<'
>> |-ImplicitCastExpr 0x476f528 'int' <LValueToRValue>
>> | `-DeclRefExpr 0x476f4e0 'int' lvalue Var 0x476f450 'i' 'int'
>> `-IntegerLiteral 0x476f508 'int' 10
>> BinaryOperator 0x476f540 '_Bool' '<'
>> |-ImplicitCastExpr 0x476f528 'int' <LValueToRValue>
>> | `-DeclRefExpr 0x476f4e0 'int' lvalue Var 0x476f450 'i' 'int'
>> `-IntegerLiteral 0x476f508 'int' 10
>> 
>> 
>> --
>> Tareq A. Siraj 
>> 
>> 
>> 
>> 
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev







More information about the cfe-dev mailing list