Gabriel, Thanks for the quick response . Is there any benefits or side
effects if I use inplace modification like in your example ?
VN -
On Thu, Apr 8, 2010 at 9:17 AM, Gabriel Kerneis <kern...@pps.jussieu.fr>wrote:
> Hi,
>
> On Thu, Apr 08, 2010 at 08:46:22AM -0600, ThanhVu (Vu) Nguyen wrote:
> > Is this a bug in CIL or there's some other way to do what I want ? TIA
>
> Statement cases are labels. You have to copy them as well if you want
> them to be in the right place (or modify the statement in place, see
> below):
>
> > open Printf
> > open Cil
> > class instrumenter () = object
> > inherit nopCilVisitor
> >
> >
> > method vstmt s = ChangeDoChildrenPost(
> > s,fun s -> (
> > match s.skind with
> > |If(_,_,_,_) -> ( (*add a hello world before if*)
> > let fprintf = Lval((Var (makeVarinfo true "fprintf"
> (TVoid []))), NoOffset) in
> > let hello_str = Const(CStr("hello word ")) in
> > let instr =
> Call(None,fprintf,[hello_str],!currentLoc) in
> > let ns = mkStmtOneInstr(instr) in
> (* copy s, clearing the labels, and add ns before *)
> s.skind <- Block(mkBlock([ns; { s with labels = []} ])));
> s
> > )
> >
> > |_ -> s (*don't change*)
> >
> > )
> > )
> > end
>
> Not tested, but it should work. Despite being implemented in a
> functional language, CIL is heavily imperative (for efficiency reasons I
> guess), which makes it tricky to get right sometimes (sharing etc. must
> be preserved).
>
> Regards,
> --
> Gabriel
>
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
CIL-users mailing list
CIL-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cil-users