let compile compinfo =
       let record = record_of compinfo in
       let cid = LogicId.create ("Eq_" ^ compinfo.cname) in
       let pool = LogicLang.pool () in
       let a = LogicLang.fresh pool "a" (Record record) in
       let b = LogicLang.fresh pool "b" (Record record) in
       let a_val = e_var a in
       let b_val = e_var b in
       let eq_field f =
         let fd = field_of f in
         !deq_ctype f.Cil_types.ftype (e_getfield a_val fd) (e_getfield b_val fd)
       in
       let condition = p_conj (List.map eq_field compinfo.cfields) in
       LogicDef.declare {
         d_name = cid ;
         d_item = PREDICATE([a;b],Some condition) ;
         d_descr = {
           t_source = Lexing.dummy_pos ;
           t_short = "equality for " ^ compinfo.corig_name ;
           t_descr = "" ;
         } ;
       } ; cid