package goblint

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Helpful functions for dealing with Cil.

module GU = Goblintutil
include module type of struct include Cilfacade0 end

Cilfacade functions to avoid dependency cycles.

val get_labelsLoc : GoblintCil.label list -> GoblintCil.Cil.location

Following functions are similar to Cil versions, but return expression location instead of entire statement location, where possible.

Get expression location for Cil.instr.

Get expression location for Cil.stmt.

val isCharType : GoblintCil.Cil.typ -> bool

Is character type (N1570 6.2.5.15)?

val isFloatType : GoblintCil.Cil.typ -> bool
val init_options : unit -> unit
val init : unit -> unit
val current_file : GoblintCil.file Stdlib.ref
val parse : Fpath.t -> GoblintCil.Cil.file
val print : GoblintCil.file -> unit
val rmTemps : GoblintCil.Cil.file -> unit
val visitors : (string * (GoblintCil.fundec -> GoblintCil.cilVisitor)) list Stdlib.ref
val register_preprocess : string -> (GoblintCil.fundec -> GoblintCil.cilVisitor) -> unit
val do_preprocess : GoblintCil.file -> unit
val getAST : Fpath.t -> GoblintCil.Cil.file
class addConstructors : GoblintCil.fundec list -> object ... end
val getMergedAST : GoblintCil.Cil.file list -> GoblintCil.Cil.file
val callConstructors : GoblintCil.file -> GoblintCil.file
val in_section : (string -> bool) -> GoblintCil.attribute list -> bool
val is_init : GoblintCil.attribute list -> bool
val is_exit : GoblintCil.attribute list -> bool
type startfuns = GoblintCil.fundec list * GoblintCil.fundec list * GoblintCil.fundec list
val getFuns : GoblintCil.file -> startfuns
val getFirstStmt : GoblintCil.fundec -> GoblintCil.stmt
val ptrdiff_ikind : unit -> GoblintCil.ikind
val ptr_ikind : unit -> GoblintCil.ikind

Cil.typeOf, etc reimplemented to raise sensible exceptions instead of printing all errors directly...

type typeOfError =
  1. | RealImag_NonNumerical
    (*

    unexpected non-numerical type for argument to __real__/__imag__

    *)
  2. | StartOf_NonArray
    (*

    typeOf: StartOf on a non-array

    *)
  3. | Mem_NonPointer of GoblintCil.exp
    (*

    typeOfLval: Mem on a non-pointer (exp)

    *)
  4. | Index_NonArray
    (*

    typeOffset: Index on a non-array

    *)
  5. | Field_NonCompound
    (*

    typeOffset: Field on a non-compound

    *)
exception TypeOfError of typeOfError
val stringLiteralType : GoblintCil.typ Stdlib.ref
val typeOfRealAndImagComponents : GoblintCil.typ -> GoblintCil.typ
val typeOfInit : GoblintCil.init -> GoblintCil.typ
val typeOfLval : GoblintCil.lval -> GoblintCil.typ

Cil.mkCast using our typeOf.

val get_ikind_exp : GoblintCil.exp -> GoblintCil.ikind
val get_fkind_exp : GoblintCil.exp -> GoblintCil.fkind

Make Cil.BinOp with correct implicit casts inserted.

val locs : (int, unit) Stdlib.Hashtbl.t

HashSet of line numbers

class countFnVisitor : object ... end

Visitor to count locs appearing inside a fundec.

val fnvis : countFnVisitor
val countLoc : GoblintCil.fundec -> int

Count the number of unique locations appearing in fundec fn. Uses Cilfacade.locs hashtable for intermediate computations

val fundec_return_type : GoblintCil.fundec -> GoblintCil.typ
module StmtH : sig ... end
val pseudo_return_to_fun : GoblintCil.fundec StmtH.t
val find_stmt_fundec : StmtH.key -> GoblintCil.fundec

Find fundec which the stmt is in.

module VarinfoH : sig ... end
val find_varinfo_fundec : VarinfoH.key -> GoblintCil.fundec

Find fundec by the function's varinfo (has the function name and type).

module StringH : sig ... end
val find_name_fundec : StringH.key -> GoblintCil.fundec

Find fundec by the function's name.

type varinfo_role =
  1. | Formal of GoblintCil.fundec
  2. | Local of GoblintCil.fundec
  3. | Function
  4. | Global
val find_varinfo_role : VarinfoH.key -> varinfo_role

Find the role of the varinfo.

val is_varinfo_formal : VarinfoH.key -> bool
val find_scope_fundec : VarinfoH.key -> GoblintCil.fundec option

Find the scope of the varinfo. If varinfo is a local or a formal argument of fundec, then returns Some fundec. If varinfo is a global or a function itself, then returns None.

val original_names : string VarinfoH.t ResettableLazy.t
val find_original_name : VarinfoH.key -> string option

Find the original name (in input source code) of the varinfo. If it was renamed by CIL, then returns the original name before renaming. If it wasn't renamed by CIL, then returns the same name. If it was inserted by CIL (or Goblint), then returns None.

val reset_lazy : unit -> unit
val stmt_pretty_short : unit -> GoblintCil.stmt -> GoblintCil.Pretty.doc
val add_function_declarations : GoblintCil.Cil.file -> unit

Given a Cil.file, reorders its globals, inserts function declarations before function definitions. This function may be used after a code transformation to ensure that the order of globals yields a compilable program.

OCaml

Innovation. Community. Security.