[cfe-dev] Wrapping assignments in function call for simulation
Jonathan Roelofs via cfe-dev
cfe-dev at lists.llvm.org
Thu Jul 28 11:29:09 PDT 2016
On 7/28/16 12:09 PM, Himanshu via cfe-dev wrote:
> Hi All,
>
> I would like to perform for simulation experiments on a C codebase where
> based on the type of the variable, an assignment to a pointer of this
> type is followed by some additional instruction (lets say an external
> counter increment --- just to create a simple scenario). I have
> implemented a RecuriveASTVisitor that visits BinaryOps (after checking
> they are assignments) and rewrites the source by replacement.
>
> However, there are issues with multiple assignments within the same
> source line (such as ptr1 = ptr2 = NULL), as well as some macro
> expansions. I would like a robust way of doing so without breaking the code.
>
> Could someone kindly answer the following:
> 1. Is there some existing libTool to do so?
>
> if not, then:
> 2. My wrapper function is of the form: (listing a simplified version)
> void * wrapAssgnmt (void **ptrToLhsPtr, void *rhsPtr){
> *ptrToLhsPtr = rhsPtr;
> // do other things for simulation
> return *ptrToLhsPtr; // so that NULL based checks work.
> }
> compilation gives me: "warning: comparison between pointer and
> integer" for cases of pattern:
> type *ptr; // original code is if( (ptr = malloc ( ... )) = NULL) ...
> if((wrapAssgnmt( &ptr , malloc( ... ) ) = NULL)
>
> I understand the warning, but I am not sure about the cause/reason.
> Could someone please suggest the correction?
This happens because your translation is not precise enough. It needs to
be something like:
if ((wrapAssgnmt(&ptr, malloc( ... ), ptr) = NULL)
Jon
>
> Thanks!
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
--
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded
More information about the cfe-dev
mailing list