sig
  val initCIL : unit -> unit
  val cilVersion : string
  val cilVersionMajor : int
  val cilVersionMinor : int
  val cilVersionRevision : int
  type file = {
    mutable fileName : string;
    mutable globals : Flx_cil_cil.global list;
    mutable globinit : Flx_cil_cil.fundec option;
    mutable globinitcalled : bool;
  }
  and global =
      GType of Flx_cil_cil.typeinfo * Flx_cil_cil.location
    | GCompTag of Flx_cil_cil.compinfo * Flx_cil_cil.location
    | GCompTagDecl of Flx_cil_cil.compinfo * Flx_cil_cil.location
    | GEnumTag of Flx_cil_cil.enuminfo * Flx_cil_cil.location
    | GEnumTagDecl of Flx_cil_cil.enuminfo * Flx_cil_cil.location
    | GVarDecl of Flx_cil_cil.varinfo * Flx_cil_cil.location
    | GVar of Flx_cil_cil.varinfo * Flx_cil_cil.initinfo *
        Flx_cil_cil.location
    | GFun of Flx_cil_cil.fundec * Flx_cil_cil.location
    | GAsm of string * Flx_cil_cil.location
    | GPragma of Flx_cil_cil.attribute * Flx_cil_cil.location
    | GText of string
  and typ =
      TVoid of Flx_cil_cil.attributes
    | TInt of Flx_cil_cil.ikind * Flx_cil_cil.attributes
    | TFloat of Flx_cil_cil.fkind * Flx_cil_cil.attributes
    | TPtr of Flx_cil_cil.typ * Flx_cil_cil.attributes
    | TArray of Flx_cil_cil.typ * Flx_cil_cil.exp option *
        Flx_cil_cil.attributes
    | TFun of Flx_cil_cil.typ *
        (string * Flx_cil_cil.typ * Flx_cil_cil.attributes) list option *
        bool * Flx_cil_cil.attributes
    | TNamed of Flx_cil_cil.typeinfo * Flx_cil_cil.attributes
    | TComp of Flx_cil_cil.compinfo * Flx_cil_cil.attributes
    | TEnum of Flx_cil_cil.enuminfo * Flx_cil_cil.attributes
    | TBuiltin_va_list of Flx_cil_cil.attributes
  and ikind =
      IBool
    | IChar
    | ISChar
    | IUChar
    | IInt
    | IUInt
    | IShort
    | IUShort
    | ILong
    | IULong
    | ILongLong
    | IULongLong
  and fkind =
      FFloat
    | FDouble
    | FLongDouble
    | CFloat
    | CDouble
    | CLongDouble
    | IFloat
    | IDouble
    | ILongDouble
  and attribute = Attr of string * Flx_cil_cil.attrparam list
  and attributes = Flx_cil_cil.attribute list
  and attrparam =
      AInt of int
    | AStr of string
    | ACons of string * Flx_cil_cil.attrparam list
    | ASizeOf of Flx_cil_cil.typ
    | ASizeOfE of Flx_cil_cil.attrparam
    | AAlignOf of Flx_cil_cil.typ
    | AAlignOfE of Flx_cil_cil.attrparam
    | AUnOp of Flx_cil_cil.unop * Flx_cil_cil.attrparam
    | ABinOp of Flx_cil_cil.binop * Flx_cil_cil.attrparam *
        Flx_cil_cil.attrparam
    | ADot of Flx_cil_cil.attrparam * string
  and compinfo = {
    mutable cstruct : bool;
    mutable cname : string;
    mutable ckey : int;
    mutable cfields : Flx_cil_cil.fieldinfo list;
    mutable cattr : Flx_cil_cil.attributes;
    mutable cdefined : bool;
    mutable creferenced : bool;
  }
  and fieldinfo = {
    mutable fcomp : Flx_cil_cil.compinfo;
    mutable fname : string;
    mutable ftype : Flx_cil_cil.typ;
    mutable fbitfield : int option;
    mutable fattr : Flx_cil_cil.attributes;
    mutable floc : Flx_cil_cil.location;
    mutable fstorage : Flx_cil_cil.storage;
  }
  and enuminfo = {
    mutable ename : string;
    mutable eitems : (string * Flx_cil_cil.exp * Flx_cil_cil.location) list;
    mutable eattr : Flx_cil_cil.attributes;
    mutable ereferenced : bool;
  }
  and typeinfo = {
    mutable tname : string;
    mutable ttype : Flx_cil_cil.typ;
    mutable treferenced : bool;
  }
  and varinfo = {
    mutable vname : string;
    mutable vtype : Flx_cil_cil.typ;
    mutable vattr : Flx_cil_cil.attributes;
    mutable vstorage : Flx_cil_cil.storage;
    mutable vglob : bool;
    mutable vinline : bool;
    mutable vdecl : Flx_cil_cil.location;
    mutable vid : int;
    mutable vaddrof : bool;
    mutable vreferenced : bool;
  }
  and storage = NoStorage | Static | Register | Extern
  and exp =
      Const of Flx_cil_cil.constant
    | Lval of Flx_cil_cil.lval
    | SizeOf of Flx_cil_cil.typ
    | SizeOfE of Flx_cil_cil.exp
    | SizeOfStr of string
    | AlignOf of Flx_cil_cil.typ
    | AlignOfE of Flx_cil_cil.exp
    | UnOp of Flx_cil_cil.unop * Flx_cil_cil.exp * Flx_cil_cil.typ
    | BinOp of Flx_cil_cil.binop * Flx_cil_cil.exp * Flx_cil_cil.exp *
        Flx_cil_cil.typ
    | CastE of Flx_cil_cil.typ * Flx_cil_cil.exp
    | AddrOf of Flx_cil_cil.lval
    | StartOf of Flx_cil_cil.lval
  and constant =
      CInt64 of int64 * Flx_cil_cil.ikind * string option
    | CStr of string
    | CWStr of int64 list
    | CChr of char
    | CReal of float * Flx_cil_cil.fkind * string option
  and unop = Neg | BNot | LNot
  and binop =
      PlusA
    | PlusPI
    | IndexPI
    | MinusA
    | MinusPI
    | MinusPP
    | Mult
    | Div
    | Mod
    | Shiftlt
    | Shiftrt
    | Lt
    | Gt
    | Le
    | Ge
    | Eq
    | Ne
    | BAnd
    | BXor
    | BOr
    | LAnd
    | LOr
  and lval = Flx_cil_cil.lhost * Flx_cil_cil.offset
  and lhost = Var of Flx_cil_cil.varinfo | Mem of Flx_cil_cil.exp
  and offset =
      NoOffset
    | Field of Flx_cil_cil.fieldinfo * Flx_cil_cil.offset
    | Index of Flx_cil_cil.exp * Flx_cil_cil.offset
  and init =
      SingleInit of Flx_cil_cil.exp
    | CompoundInit of Flx_cil_cil.typ *
        (Flx_cil_cil.offset * Flx_cil_cil.init) list
  and initinfo = { mutable init : Flx_cil_cil.init option; }
  and fundec = {
    mutable svar : Flx_cil_cil.varinfo;
    mutable sformals : Flx_cil_cil.varinfo list;
    mutable slocals : Flx_cil_cil.varinfo list;
    mutable smaxid : int;
    mutable sbody : Flx_cil_cil.block;
    mutable smaxstmtid : int option;
  }
  and block = {
    mutable battrs : Flx_cil_cil.attributes;
    mutable bstmts : Flx_cil_cil.stmt list;
  }
  and stmt = {
    mutable labels : Flx_cil_cil.label list;
    mutable skind : Flx_cil_cil.stmtkind;
    mutable sid : int;
    mutable succs : Flx_cil_cil.stmt list;
    mutable preds : Flx_cil_cil.stmt list;
  }
  and label =
      Label of string * Flx_cil_cil.location * bool
    | Case of Flx_cil_cil.exp * Flx_cil_cil.location
    | Default of Flx_cil_cil.location
  and stmtkind =
      Instr of Flx_cil_cil.instr list
    | Return of Flx_cil_cil.exp option * Flx_cil_cil.location
    | Goto of Flx_cil_cil.stmt Pervasives.ref * Flx_cil_cil.location
    | Break of Flx_cil_cil.location
    | Continue of Flx_cil_cil.location
    | If of Flx_cil_cil.exp * Flx_cil_cil.block * Flx_cil_cil.block *
        Flx_cil_cil.location
    | Switch of Flx_cil_cil.exp * Flx_cil_cil.block * Flx_cil_cil.stmt list *
        Flx_cil_cil.location
    | Loop of Flx_cil_cil.block * Flx_cil_cil.location *
        Flx_cil_cil.stmt option * Flx_cil_cil.stmt option
    | Block of Flx_cil_cil.block
    | TryFinally of Flx_cil_cil.block * Flx_cil_cil.block *
        Flx_cil_cil.location
    | TryExcept of Flx_cil_cil.block *
        (Flx_cil_cil.instr list * Flx_cil_cil.exp) * Flx_cil_cil.block *
        Flx_cil_cil.location
  and instr =
      Set of Flx_cil_cil.lval * Flx_cil_cil.exp * Flx_cil_cil.location
    | Call of Flx_cil_cil.lval option * Flx_cil_cil.exp *
        Flx_cil_cil.exp list * Flx_cil_cil.location
    | Asm of Flx_cil_cil.attributes * string list *
        (string * Flx_cil_cil.lval) list * (string * Flx_cil_cil.exp) list *
        string list * Flx_cil_cil.location
  and location = { line : int; file : string; byte : int; }
  type featureDescr = {
    fd_enabled : bool Pervasives.ref;
    fd_name : string;
    fd_description : string;
    fd_extraopt : (string * Arg.spec * string) list;
    fd_doit : Flx_cil_cil.file -> unit;
    fd_post_check : bool;
  }
  val compareLoc : Flx_cil_cil.location -> Flx_cil_cil.location -> int
  val emptyFunction : string -> Flx_cil_cil.fundec
  val setFormals : Flx_cil_cil.fundec -> Flx_cil_cil.varinfo list -> unit
  val setFunctionType : Flx_cil_cil.fundec -> Flx_cil_cil.typ -> unit
  val setMaxId : Flx_cil_cil.fundec -> unit
  val dummyFunDec : Flx_cil_cil.fundec
  val dummyFile : Flx_cil_cil.file
  val saveBinaryFile : Flx_cil_cil.file -> string -> unit
  val saveBinaryFileChannel :
    Flx_cil_cil.file -> Pervasives.out_channel -> unit
  val loadBinaryFile : string -> Flx_cil_cil.file
  val getGlobInit :
    ?main_name:string -> Flx_cil_cil.file -> Flx_cil_cil.fundec
  val iterGlobals : Flx_cil_cil.file -> (Flx_cil_cil.global -> unit) -> unit
  val foldGlobals :
    Flx_cil_cil.file -> ('-> Flx_cil_cil.global -> 'a) -> '-> 'a
  val mapGlobals :
    Flx_cil_cil.file -> (Flx_cil_cil.global -> Flx_cil_cil.global) -> unit
  val prepareCFG : Flx_cil_cil.fundec -> unit
  val computeCFGInfo : Flx_cil_cil.fundec -> bool -> Flx_cil_cil.stmt list
  val copyFunction : Flx_cil_cil.fundec -> string -> Flx_cil_cil.fundec
  val pushGlobal :
    Flx_cil_cil.global ->
    types:Flx_cil_cil.global list Pervasives.ref ->
    variables:Flx_cil_cil.global list Pervasives.ref -> unit
  val gccBuiltins :
    (string, Flx_cil_cil.typ * Flx_cil_cil.typ list * bool) Hashtbl.t
  val msvcBuiltins :
    (string, Flx_cil_cil.typ * Flx_cil_cil.typ list * bool) Hashtbl.t
  val makeZeroInit : Flx_cil_cil.typ -> Flx_cil_cil.init
  val foldLeftCompound :
    doinit:(Flx_cil_cil.offset ->
            Flx_cil_cil.init -> Flx_cil_cil.typ -> '-> 'a) ->
    ct:Flx_cil_cil.typ ->
    initl:(Flx_cil_cil.offset * Flx_cil_cil.init) list -> acc:'-> 'a
  val foldLeftCompoundAll :
    doinit:(Flx_cil_cil.offset ->
            Flx_cil_cil.init -> Flx_cil_cil.typ -> '-> 'a) ->
    ct:Flx_cil_cil.typ ->
    initl:(Flx_cil_cil.offset * Flx_cil_cil.init) list -> acc:'-> 'a
  val voidType : Flx_cil_cil.typ
  val isVoidType : Flx_cil_cil.typ -> bool
  val isVoidPtrType : Flx_cil_cil.typ -> bool
  val intType : Flx_cil_cil.typ
  val uintType : Flx_cil_cil.typ
  val longType : Flx_cil_cil.typ
  val ulongType : Flx_cil_cil.typ
  val charType : Flx_cil_cil.typ
  val charPtrType : Flx_cil_cil.typ
  val wcharKind : Flx_cil_cil.ikind Pervasives.ref
  val wcharType : Flx_cil_cil.typ Pervasives.ref
  val charConstPtrType : Flx_cil_cil.typ
  val voidPtrType : Flx_cil_cil.typ
  val intPtrType : Flx_cil_cil.typ
  val uintPtrType : Flx_cil_cil.typ
  val doubleType : Flx_cil_cil.typ
  val upointType : Flx_cil_cil.typ Pervasives.ref
  val typeOfSizeOf : Flx_cil_cil.typ Pervasives.ref
  val isSigned : Flx_cil_cil.ikind -> bool
  val mkCompInfo :
    bool ->
    string ->
    (Flx_cil_cil.compinfo ->
     (string * Flx_cil_cil.typ * int option * Flx_cil_cil.attributes *
      Flx_cil_cil.location * Flx_cil_cil.storage)
     list) ->
    Flx_cil_cil.attributes -> Flx_cil_cil.compinfo
  val copyCompInfo : Flx_cil_cil.compinfo -> string -> Flx_cil_cil.compinfo
  val missingFieldName : string
  val compFullName : Flx_cil_cil.compinfo -> string
  val isCompleteType : Flx_cil_cil.typ -> bool
  val unrollType : Flx_cil_cil.typ -> Flx_cil_cil.typ
  val unrollTypeDeep : Flx_cil_cil.typ -> Flx_cil_cil.typ
  val isIntegralType : Flx_cil_cil.typ -> bool
  val isArithmeticType : Flx_cil_cil.typ -> bool
  val isPointerType : Flx_cil_cil.typ -> bool
  val isFunctionType : Flx_cil_cil.typ -> bool
  val argsToList :
    (string * Flx_cil_cil.typ * Flx_cil_cil.attributes) list option ->
    (string * Flx_cil_cil.typ * Flx_cil_cil.attributes) list
  val isArrayType : Flx_cil_cil.typ -> bool
  exception LenOfArray
  val lenOfArray : Flx_cil_cil.exp option -> int
  val getCompField : Flx_cil_cil.compinfo -> string -> Flx_cil_cil.fieldinfo
  type existsAction = ExistsTrue | ExistsFalse | ExistsMaybe
  val existsType :
    (Flx_cil_cil.typ -> Flx_cil_cil.existsAction) -> Flx_cil_cil.typ -> bool
  val splitFunctionType :
    Flx_cil_cil.typ ->
    Flx_cil_cil.typ *
    (string * Flx_cil_cil.typ * Flx_cil_cil.attributes) list option * 
    bool * Flx_cil_cil.attributes
  val splitFunctionTypeVI :
    Flx_cil_cil.varinfo ->
    Flx_cil_cil.typ *
    (string * Flx_cil_cil.typ * Flx_cil_cil.attributes) list option * 
    bool * Flx_cil_cil.attributes
  type typsig =
      TSArray of Flx_cil_cil.typsig * Flx_cil_cil.exp option *
        Flx_cil_cil.attributes
    | TSPtr of Flx_cil_cil.typsig * Flx_cil_cil.attributes
    | TSComp of bool * string * Flx_cil_cil.attributes
    | TSFun of Flx_cil_cil.typsig * Flx_cil_cil.typsig list * bool *
        Flx_cil_cil.attributes
    | TSEnum of string * Flx_cil_cil.attributes
    | TSBase of Flx_cil_cil.typ
  val d_typsig : unit -> Flx_cil_cil.typsig -> Flx_cil_pretty.doc
  val typeSig : Flx_cil_cil.typ -> Flx_cil_cil.typsig
  val typeSigWithAttrs :
    (Flx_cil_cil.attributes -> Flx_cil_cil.attributes) ->
    Flx_cil_cil.typ -> Flx_cil_cil.typsig
  val setTypeSigAttrs :
    Flx_cil_cil.attributes -> Flx_cil_cil.typsig -> Flx_cil_cil.typsig
  val typeSigAttrs : Flx_cil_cil.typsig -> Flx_cil_cil.attributes
  val makeVarinfo : bool -> string -> Flx_cil_cil.typ -> Flx_cil_cil.varinfo
  val makeFormalVar :
    Flx_cil_cil.fundec ->
    ?where:string -> string -> Flx_cil_cil.typ -> Flx_cil_cil.varinfo
  val makeLocalVar :
    Flx_cil_cil.fundec ->
    ?insert:bool -> string -> Flx_cil_cil.typ -> Flx_cil_cil.varinfo
  val makeTempVar :
    Flx_cil_cil.fundec ->
    ?name:string -> Flx_cil_cil.typ -> Flx_cil_cil.varinfo
  val makeGlobalVar : string -> Flx_cil_cil.typ -> Flx_cil_cil.varinfo
  val copyVarinfo : Flx_cil_cil.varinfo -> string -> Flx_cil_cil.varinfo
  val addOffsetLval :
    Flx_cil_cil.offset -> Flx_cil_cil.lval -> Flx_cil_cil.lval
  val addOffset :
    Flx_cil_cil.offset -> Flx_cil_cil.offset -> Flx_cil_cil.offset
  val removeOffsetLval :
    Flx_cil_cil.lval -> Flx_cil_cil.lval * Flx_cil_cil.offset
  val removeOffset :
    Flx_cil_cil.offset -> Flx_cil_cil.offset * Flx_cil_cil.offset
  val typeOfLval : Flx_cil_cil.lval -> Flx_cil_cil.typ
  val typeOffset : Flx_cil_cil.typ -> Flx_cil_cil.offset -> Flx_cil_cil.typ
  val zero : Flx_cil_cil.exp
  val one : Flx_cil_cil.exp
  val mone : Flx_cil_cil.exp
  val kinteger64 : Flx_cil_cil.ikind -> int64 -> Flx_cil_cil.exp
  val kinteger : Flx_cil_cil.ikind -> int -> Flx_cil_cil.exp
  val integer : int -> Flx_cil_cil.exp
  val isInteger : Flx_cil_cil.exp -> int64 option
  val isConstant : Flx_cil_cil.exp -> bool
  val isZero : Flx_cil_cil.exp -> bool
  val constFold : bool -> Flx_cil_cil.exp -> Flx_cil_cil.exp
  val constFoldBinOp :
    bool ->
    Flx_cil_cil.binop ->
    Flx_cil_cil.exp -> Flx_cil_cil.exp -> Flx_cil_cil.typ -> Flx_cil_cil.exp
  val increm : Flx_cil_cil.exp -> int -> Flx_cil_cil.exp
  val var : Flx_cil_cil.varinfo -> Flx_cil_cil.lval
  val mkAddrOf : Flx_cil_cil.lval -> Flx_cil_cil.exp
  val mkAddrOrStartOf : Flx_cil_cil.lval -> Flx_cil_cil.exp
  val mkMem :
    addr:Flx_cil_cil.exp -> off:Flx_cil_cil.offset -> Flx_cil_cil.lval
  val mkString : string -> Flx_cil_cil.exp
  val mkCastT :
    e:Flx_cil_cil.exp ->
    oldt:Flx_cil_cil.typ -> newt:Flx_cil_cil.typ -> Flx_cil_cil.exp
  val mkCast : e:Flx_cil_cil.exp -> newt:Flx_cil_cil.typ -> Flx_cil_cil.exp
  val typeOf : Flx_cil_cil.exp -> Flx_cil_cil.typ
  val parseInt : string -> Flx_cil_cil.exp
  val mkStmt : Flx_cil_cil.stmtkind -> Flx_cil_cil.stmt
  val mkBlock : Flx_cil_cil.stmt list -> Flx_cil_cil.block
  val mkStmtOneInstr : Flx_cil_cil.instr -> Flx_cil_cil.stmt
  val compactStmts : Flx_cil_cil.stmt list -> Flx_cil_cil.stmt list
  val mkEmptyStmt : unit -> Flx_cil_cil.stmt
  val dummyInstr : Flx_cil_cil.instr
  val dummyStmt : Flx_cil_cil.stmt
  val mkWhile :
    guard:Flx_cil_cil.exp ->
    body:Flx_cil_cil.stmt list -> Flx_cil_cil.stmt list
  val mkForIncr :
    iter:Flx_cil_cil.varinfo ->
    first:Flx_cil_cil.exp ->
    stopat:Flx_cil_cil.exp ->
    incr:Flx_cil_cil.exp ->
    body:Flx_cil_cil.stmt list -> Flx_cil_cil.stmt list
  val mkFor :
    start:Flx_cil_cil.stmt list ->
    guard:Flx_cil_cil.exp ->
    next:Flx_cil_cil.stmt list ->
    body:Flx_cil_cil.stmt list -> Flx_cil_cil.stmt list
  type attributeClass = AttrName of bool | AttrFunType of bool | AttrType
  val attributeHash : (string, Flx_cil_cil.attributeClass) Hashtbl.t
  val partitionAttributes :
    default:Flx_cil_cil.attributeClass ->
    Flx_cil_cil.attributes ->
    Flx_cil_cil.attribute list * Flx_cil_cil.attribute list *
    Flx_cil_cil.attribute list
  val addAttribute :
    Flx_cil_cil.attribute -> Flx_cil_cil.attributes -> Flx_cil_cil.attributes
  val addAttributes :
    Flx_cil_cil.attribute list ->
    Flx_cil_cil.attributes -> Flx_cil_cil.attributes
  val dropAttribute :
    string -> Flx_cil_cil.attributes -> Flx_cil_cil.attributes
  val filterAttributes :
    string -> Flx_cil_cil.attributes -> Flx_cil_cil.attributes
  val hasAttribute : string -> Flx_cil_cil.attributes -> bool
  val typeAttrs : Flx_cil_cil.typ -> Flx_cil_cil.attribute list
  val setTypeAttrs :
    Flx_cil_cil.typ -> Flx_cil_cil.attributes -> Flx_cil_cil.typ
  val typeAddAttributes :
    Flx_cil_cil.attribute list -> Flx_cil_cil.typ -> Flx_cil_cil.typ
  val typeRemoveAttributes :
    string list -> Flx_cil_cil.typ -> Flx_cil_cil.typ
  type 'a visitAction =
      SkipChildren
    | DoChildren
    | ChangeTo of 'a
    | ChangeDoChildrenPost of 'a * ('-> 'a)
  class type cilVisitor =
    object
      method queueInstr : Flx_cil_cil.instr list -> unit
      method unqueueInstr : unit -> Flx_cil_cil.instr list
      method vattr :
        Flx_cil_cil.attribute ->
        Flx_cil_cil.attribute list Flx_cil_cil.visitAction
      method vblock :
        Flx_cil_cil.block -> Flx_cil_cil.block Flx_cil_cil.visitAction
      method vexpr :
        Flx_cil_cil.exp -> Flx_cil_cil.exp Flx_cil_cil.visitAction
      method vfunc :
        Flx_cil_cil.fundec -> Flx_cil_cil.fundec Flx_cil_cil.visitAction
      method vglob :
        Flx_cil_cil.global -> Flx_cil_cil.global list Flx_cil_cil.visitAction
      method vinit :
        Flx_cil_cil.init -> Flx_cil_cil.init Flx_cil_cil.visitAction
      method vinitoffs :
        Flx_cil_cil.offset -> Flx_cil_cil.offset Flx_cil_cil.visitAction
      method vinst :
        Flx_cil_cil.instr -> Flx_cil_cil.instr list Flx_cil_cil.visitAction
      method vlval :
        Flx_cil_cil.lval -> Flx_cil_cil.lval Flx_cil_cil.visitAction
      method voffs :
        Flx_cil_cil.offset -> Flx_cil_cil.offset Flx_cil_cil.visitAction
      method vstmt :
        Flx_cil_cil.stmt -> Flx_cil_cil.stmt Flx_cil_cil.visitAction
      method vtype :
        Flx_cil_cil.typ -> Flx_cil_cil.typ Flx_cil_cil.visitAction
      method vvdec :
        Flx_cil_cil.varinfo -> Flx_cil_cil.varinfo Flx_cil_cil.visitAction
      method vvrbl :
        Flx_cil_cil.varinfo -> Flx_cil_cil.varinfo Flx_cil_cil.visitAction
    end
  class nopCilVisitor : cilVisitor
  val visitCilFile : Flx_cil_cil.cilVisitor -> Flx_cil_cil.file -> unit
  val visitCilFileSameGlobals :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.file -> unit
  val visitCilGlobal :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.global -> Flx_cil_cil.global list
  val visitCilFunction :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.fundec -> Flx_cil_cil.fundec
  val visitCilExpr :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.exp -> Flx_cil_cil.exp
  val visitCilLval :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.lval -> Flx_cil_cil.lval
  val visitCilOffset :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.offset -> Flx_cil_cil.offset
  val visitCilInitOffset :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.offset -> Flx_cil_cil.offset
  val visitCilInstr :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.instr -> Flx_cil_cil.instr list
  val visitCilStmt :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.stmt -> Flx_cil_cil.stmt
  val visitCilBlock :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.block -> Flx_cil_cil.block
  val visitCilType :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.typ -> Flx_cil_cil.typ
  val visitCilVarDecl :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.varinfo -> Flx_cil_cil.varinfo
  val visitCilInit :
    Flx_cil_cil.cilVisitor -> Flx_cil_cil.init -> Flx_cil_cil.init
  val visitCilAttributes :
    Flx_cil_cil.cilVisitor ->
    Flx_cil_cil.attribute list -> Flx_cil_cil.attribute list
  val msvcMode : bool Pervasives.ref
  val useLogicalOperators : bool Pervasives.ref
  type lineDirectiveStyle =
      LineComment
    | LinePreprocessorInput
    | LinePreprocessorOutput
  val lineDirectiveStyle :
    Flx_cil_cil.lineDirectiveStyle option Pervasives.ref
  val print_CIL_Input : bool Pervasives.ref
  val printCilAsIs : bool Pervasives.ref
  val currentLoc : Flx_cil_cil.location Pervasives.ref
  val d_loc : unit -> Flx_cil_cil.location -> Flx_cil_pretty.doc
  val d_thisloc : unit -> Flx_cil_pretty.doc
  val d_ikind : unit -> Flx_cil_cil.ikind -> Flx_cil_pretty.doc
  val d_fkind : unit -> Flx_cil_cil.fkind -> Flx_cil_pretty.doc
  val d_storage : unit -> Flx_cil_cil.storage -> Flx_cil_pretty.doc
  val d_const : unit -> Flx_cil_cil.constant -> Flx_cil_pretty.doc
  class type cilPrinter =
    object
      method dBlock :
        Pervasives.out_channel -> int -> Flx_cil_cil.block -> unit
      method dGlobal : Pervasives.out_channel -> Flx_cil_cil.global -> unit
      method dInit :
        Pervasives.out_channel -> int -> Flx_cil_cil.init -> unit
      method dStmt :
        Pervasives.out_channel -> int -> Flx_cil_cil.stmt -> unit
      method pAttr : Flx_cil_cil.attribute -> Flx_cil_pretty.doc * bool
      method pAttrParam : unit -> Flx_cil_cil.attrparam -> Flx_cil_pretty.doc
      method pAttrs : unit -> Flx_cil_cil.attributes -> Flx_cil_pretty.doc
      method pBlock : unit -> Flx_cil_cil.block -> Flx_cil_pretty.doc
      method pExp : unit -> Flx_cil_cil.exp -> Flx_cil_pretty.doc
      method pFieldDecl : unit -> Flx_cil_cil.fieldinfo -> Flx_cil_pretty.doc
      method pGlobal : unit -> Flx_cil_cil.global -> Flx_cil_pretty.doc
      method pInit : unit -> Flx_cil_cil.init -> Flx_cil_pretty.doc
      method pInstr : unit -> Flx_cil_cil.instr -> Flx_cil_pretty.doc
      method pLabel : unit -> Flx_cil_cil.label -> Flx_cil_pretty.doc
      method pLineDirective :
        ?forcefile:bool -> Flx_cil_cil.location -> Flx_cil_pretty.doc
      method pLval : unit -> Flx_cil_cil.lval -> Flx_cil_pretty.doc
      method pOffset :
        Flx_cil_pretty.doc -> Flx_cil_cil.offset -> Flx_cil_pretty.doc
      method pStmt : unit -> Flx_cil_cil.stmt -> Flx_cil_pretty.doc
      method pStmtKind :
        Flx_cil_cil.stmt ->
        unit -> Flx_cil_cil.stmtkind -> Flx_cil_pretty.doc
      method pType :
        Flx_cil_pretty.doc option ->
        unit -> Flx_cil_cil.typ -> Flx_cil_pretty.doc
      method pVDecl : unit -> Flx_cil_cil.varinfo -> Flx_cil_pretty.doc
      method pVar : Flx_cil_cil.varinfo -> Flx_cil_pretty.doc
    end
  class defaultCilPrinterClass : cilPrinter
  val defaultCilPrinter : Flx_cil_cil.cilPrinter
  val printType :
    Flx_cil_cil.cilPrinter -> unit -> Flx_cil_cil.typ -> Flx_cil_pretty.doc
  val printExp :
    Flx_cil_cil.cilPrinter -> unit -> Flx_cil_cil.exp -> Flx_cil_pretty.doc
  val printLval :
    Flx_cil_cil.cilPrinter -> unit -> Flx_cil_cil.lval -> Flx_cil_pretty.doc
  val printGlobal :
    Flx_cil_cil.cilPrinter ->
    unit -> Flx_cil_cil.global -> Flx_cil_pretty.doc
  val printAttr :
    Flx_cil_cil.cilPrinter ->
    unit -> Flx_cil_cil.attribute -> Flx_cil_pretty.doc
  val printAttrs :
    Flx_cil_cil.cilPrinter ->
    unit -> Flx_cil_cil.attributes -> Flx_cil_pretty.doc
  val printInstr :
    Flx_cil_cil.cilPrinter -> unit -> Flx_cil_cil.instr -> Flx_cil_pretty.doc
  val printStmt :
    Flx_cil_cil.cilPrinter -> unit -> Flx_cil_cil.stmt -> Flx_cil_pretty.doc
  val printBlock :
    Flx_cil_cil.cilPrinter -> unit -> Flx_cil_cil.block -> Flx_cil_pretty.doc
  val dumpStmt :
    Flx_cil_cil.cilPrinter ->
    Pervasives.out_channel -> int -> Flx_cil_cil.stmt -> unit
  val dumpBlock :
    Flx_cil_cil.cilPrinter ->
    Pervasives.out_channel -> int -> Flx_cil_cil.block -> unit
  val printInit :
    Flx_cil_cil.cilPrinter -> unit -> Flx_cil_cil.init -> Flx_cil_pretty.doc
  val dumpInit :
    Flx_cil_cil.cilPrinter ->
    Pervasives.out_channel -> int -> Flx_cil_cil.init -> unit
  val d_type : unit -> Flx_cil_cil.typ -> Flx_cil_pretty.doc
  val d_exp : unit -> Flx_cil_cil.exp -> Flx_cil_pretty.doc
  val d_lval : unit -> Flx_cil_cil.lval -> Flx_cil_pretty.doc
  val d_offset :
    Flx_cil_pretty.doc -> unit -> Flx_cil_cil.offset -> Flx_cil_pretty.doc
  val d_init : unit -> Flx_cil_cil.init -> Flx_cil_pretty.doc
  val d_binop : unit -> Flx_cil_cil.binop -> Flx_cil_pretty.doc
  val d_attr : unit -> Flx_cil_cil.attribute -> Flx_cil_pretty.doc
  val d_attrparam : unit -> Flx_cil_cil.attrparam -> Flx_cil_pretty.doc
  val d_attrlist : unit -> Flx_cil_cil.attributes -> Flx_cil_pretty.doc
  val d_instr : unit -> Flx_cil_cil.instr -> Flx_cil_pretty.doc
  val d_label : unit -> Flx_cil_cil.label -> Flx_cil_pretty.doc
  val d_stmt : unit -> Flx_cil_cil.stmt -> Flx_cil_pretty.doc
  val d_block : unit -> Flx_cil_cil.block -> Flx_cil_pretty.doc
  val d_global : unit -> Flx_cil_cil.global -> Flx_cil_pretty.doc
  val dn_exp : unit -> Flx_cil_cil.exp -> Flx_cil_pretty.doc
  val dn_lval : unit -> Flx_cil_cil.lval -> Flx_cil_pretty.doc
  val dn_init : unit -> Flx_cil_cil.init -> Flx_cil_pretty.doc
  val dn_type : unit -> Flx_cil_cil.typ -> Flx_cil_pretty.doc
  val dn_global : unit -> Flx_cil_cil.global -> Flx_cil_pretty.doc
  val dn_attrlist : unit -> Flx_cil_cil.attributes -> Flx_cil_pretty.doc
  val dn_attr : unit -> Flx_cil_cil.attribute -> Flx_cil_pretty.doc
  val dn_attrparam : unit -> Flx_cil_cil.attrparam -> Flx_cil_pretty.doc
  val dn_stmt : unit -> Flx_cil_cil.stmt -> Flx_cil_pretty.doc
  val dn_instr : unit -> Flx_cil_cil.instr -> Flx_cil_pretty.doc
  val d_shortglobal : unit -> Flx_cil_cil.global -> Flx_cil_pretty.doc
  val dumpGlobal :
    Flx_cil_cil.cilPrinter ->
    Pervasives.out_channel -> Flx_cil_cil.global -> unit
  val dumpFile :
    Flx_cil_cil.cilPrinter ->
    Pervasives.out_channel -> Flx_cil_cil.file -> unit
  val bug : ('a, unit, Flx_cil_pretty.doc) Pervasives.format -> 'a
  val unimp : ('a, unit, Flx_cil_pretty.doc) Pervasives.format -> 'a
  val error : ('a, unit, Flx_cil_pretty.doc) Pervasives.format -> 'a
  val errorLoc :
    Flx_cil_cil.location ->
    ('a, unit, Flx_cil_pretty.doc) Pervasives.format -> 'a
  val warn : ('a, unit, Flx_cil_pretty.doc) Pervasives.format -> 'a
  val warnOpt : ('a, unit, Flx_cil_pretty.doc) Pervasives.format -> 'a
  val warnContext : ('a, unit, Flx_cil_pretty.doc) Pervasives.format -> 'a
  val warnContextOpt : ('a, unit, Flx_cil_pretty.doc) Pervasives.format -> 'a
  val warnLoc :
    Flx_cil_cil.location ->
    ('a, unit, Flx_cil_pretty.doc) Pervasives.format -> 'a
  val d_plainexp : unit -> Flx_cil_cil.exp -> Flx_cil_pretty.doc
  val d_plaininit : unit -> Flx_cil_cil.init -> Flx_cil_pretty.doc
  val d_plainlval : unit -> Flx_cil_cil.lval -> Flx_cil_pretty.doc
  val d_plaintype : unit -> Flx_cil_cil.typ -> Flx_cil_pretty.doc
  type undoAlphaElement
  type alphaTableData
  val newAlphaName :
    alphaTable:(string, Flx_cil_cil.alphaTableData Pervasives.ref) Hashtbl.t ->
    undolist:Flx_cil_cil.undoAlphaElement list Pervasives.ref option ->
    lookupname:string -> string * Flx_cil_cil.location
  val registerAlphaName :
    alphaTable:(string, Flx_cil_cil.alphaTableData Pervasives.ref) Hashtbl.t ->
    undolist:Flx_cil_cil.undoAlphaElement list Pervasives.ref option ->
    lookupname:string -> unit
  val docAlphaTable :
    unit ->
    (string, Flx_cil_cil.alphaTableData Pervasives.ref) Hashtbl.t ->
    Flx_cil_pretty.doc
  val getAlphaPrefix : lookupname:string -> string
  val undoAlphaChanges :
    alphaTable:(string, Flx_cil_cil.alphaTableData Pervasives.ref) Hashtbl.t ->
    undolist:Flx_cil_cil.undoAlphaElement list -> unit
  val uniqueVarNames : Flx_cil_cil.file -> unit
  val peepHole2 :
    (Flx_cil_cil.instr * Flx_cil_cil.instr -> Flx_cil_cil.instr list option) ->
    Flx_cil_cil.stmt list -> unit
  val peepHole1 :
    (Flx_cil_cil.instr -> Flx_cil_cil.instr list option) ->
    Flx_cil_cil.stmt list -> unit
  exception SizeOfError of Flx_cil_cil.typ
  val bitsSizeOf : Flx_cil_cil.typ -> int
  val sizeOf : Flx_cil_cil.typ -> Flx_cil_cil.exp
  val alignOf_int : Flx_cil_cil.typ -> int
  val bitsOffset : Flx_cil_cil.typ -> Flx_cil_cil.offset -> int * int
  val char_is_unsigned : bool Pervasives.ref
  val little_endian : bool Pervasives.ref
  val locUnknown : Flx_cil_cil.location
  val get_instrLoc : Flx_cil_cil.instr -> Flx_cil_cil.location
  val get_globalLoc : Flx_cil_cil.global -> Flx_cil_cil.location
  val get_stmtLoc : Flx_cil_cil.stmtkind -> Flx_cil_cil.location
  val dExp : Flx_cil_pretty.doc -> Flx_cil_cil.exp
  val dInstr :
    Flx_cil_pretty.doc -> Flx_cil_cil.location -> Flx_cil_cil.instr
  val dGlobal :
    Flx_cil_pretty.doc -> Flx_cil_cil.location -> Flx_cil_cil.global
  val mapNoCopy : ('-> 'a) -> 'a list -> 'a list
  val mapNoCopyList : ('-> 'a list) -> 'a list -> 'a list
  val startsWith : string -> string -> bool
  type formatArg =
      Fe of Flx_cil_cil.exp
    | Feo of Flx_cil_cil.exp option
    | Fu of Flx_cil_cil.unop
    | Fb of Flx_cil_cil.binop
    | Fk of Flx_cil_cil.ikind
    | FE of Flx_cil_cil.exp list
    | Ff of (string * Flx_cil_cil.typ * Flx_cil_cil.attributes)
    | FF of (string * Flx_cil_cil.typ * Flx_cil_cil.attributes) list
    | Fva of bool
    | Fv of Flx_cil_cil.varinfo
    | Fl of Flx_cil_cil.lval
    | Flo of Flx_cil_cil.lval option
    | Fo of Flx_cil_cil.offset
    | Fc of Flx_cil_cil.compinfo
    | Fi of Flx_cil_cil.instr
    | FI of Flx_cil_cil.instr list
    | Ft of Flx_cil_cil.typ
    | Fd of int
    | Fg of string
    | Fs of Flx_cil_cil.stmt
    | FS of Flx_cil_cil.stmt list
    | FA of Flx_cil_cil.attributes
    | Fp of Flx_cil_cil.attrparam
    | FP of Flx_cil_cil.attrparam list
    | FX of string
  val d_formatarg : unit -> Flx_cil_cil.formatArg -> Flx_cil_pretty.doc
end