[cfe-dev] Finding out if an assignment is within If statement's predicate

Kirill Bobyrev via cfe-dev cfe-dev at lists.llvm.org
Sat Jul 30 14:20:22 PDT 2016


> On 30 Jul 2016, at 22:34, Himanshu <himanshu at utexas.edu> wrote:
> 
> Hi Kirill, 
> 
> I am not interested only in assignments within if condition, but just want to treat them differently.
That was exactly my point…

Just see some clang-tidy checks for examples.
> Specifically, I want to add a function/macro 
> after each assignment to an instance of a certain struct type. 
> Hence, I want an approach that can identify all the '=' assignments to that type, and if they are within if conditions then use a function call to <function_for_if_assign>(.... ) otherwise call <function_for_stmt_assign>(...). 
> 
> --
> Himanshu
> 
> On Sat, Jul 30, 2016 at 1:10 PM, Kirill Bobyrev via cfe-dev <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
> Treating nodes of a single type differently depending on their specifics might be much easier with AST Matchers.
> 
> What you’re looking for is hasConditionVariableStatement [http://clang.llvm.org/docs/LibASTMatchersReference.html#hasConditionVariableStatement0Anchor <http://clang.llvm.org/docs/LibASTMatchersReference.html#hasConditionVariableStatement0Anchor>].
> 
> Generally, try to use RecursiveASTVisitor when what you want is exactly node traversal, i.e. almost no dispatching. Otherwise, use AST Matchers. They’re easy to use and yet very powerful.
> 
>> Kirill Bobyrev 
> 
>> On 30 Jul 2016, at 19:45, Himanshu via cfe-dev <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>> 
>> Hi All, 
>> 
>> In my VisitBinaryOperator I want to treat assignments in IfStmt's predicate check part differently 
>> than the assignments in its body. For example: 
>> 
>> if( (*ptrI = malloc(sizeof(int) * 10)) == NULL)  // => this assignment is within predicate 
>>         msg = "success"; // assignment in body (treat it differently than the above)
>> else
>>         msg = "fail"; // assignment in body
>> 
>> 
>> Here, I would like to handle the ptrI = malloc assignment differently than the other two assignments of 'msg'. I tries setting a flag in VisitIfStmt, but that can't distinguish between the two different kind of assignments. 
>> 
>> Thanks!
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>
> 
> 
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160730/bf8611ca/attachment.html>


More information about the cfe-dev mailing list