let compile compinfo =
let record = record_of compinfo in
let pid = LogicId.create ("Is_" ^ compinfo.cname) in
let pool = LogicLang.pool () in
let r_var = LogicLang.fresh pool "r" (Record record) in
let r_val = e_var r_var in
let has_ftype f =
!dhas_ctype f.Cil_types.ftype (e_getfield r_val (field_of f))
in
let condition = p_conj (List.map has_ftype compinfo.cfields) in
LogicDef.declare {
d_name = pid ;
d_item = PREDICATE([r_var],Some condition) ;
d_descr = {
t_source = Lexing.dummy_pos ;
t_short = "subtype " ^ compinfo.corig_name ;
t_descr = "" ;
} ;
} ; pid