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
[email protected]
https://lists.sourceforge.net/lists/listinfo/cil-users