[cfe-dev] Wrapping assignments in function call for simulation
Jonathan Roelofs via cfe-dev
cfe-dev at lists.llvm.org
Thu Jul 28 11:36:55 PDT 2016
On 7/28/16 12:33 PM, Himanshu wrote:
> Thanks Jon!
>
> So you suggest the change of function to:
>
> void *wrapAssgnmt(void **,void *, void *ptr){
> // assgn using first two args
> ...
> // return the actual ptr
> return ptr;
> }
Oh, oops. I put the parens in the wrong spot. I meant to write this:
if ((wrapAssgnmt(&ptr, malloc( ... )), ptr) = NULL)
as-in: use the comma operator to perform the assignment of NULL into 'ptr'.
Jon
>
> --
> Himanshu
>
> On Thu, Jul 28, 2016 at 11:29 AM, Jonathan Roelofs
> <jroelofs.lists at gmail.com <mailto:jroelofs.lists at gmail.com>> wrote:
>
>
>
> 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 <mailto:cfe-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
> --
> Jon Roelofs
> jonathan at codesourcery.com <mailto:jonathan at codesourcery.com>
> CodeSourcery / Mentor Embedded
>
>
--
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded
More information about the cfe-dev
mailing list