let compile comp =
       let prefix = if comp.cstruct then "S_" else "U_" in
       let record_id = LogicId.create (prefix ^ comp.cname) in
       let record_fields = ref [] in
       let compile_fields = ref Fmap.empty in
       List.iter
         (fun f ->
            let field = { 
              LogicTau.f_name = LogicId.create ("F_" ^ f.fname) ; 
              LogicTau.f_type = !dtau_ctype f.ftype ;
              LogicTau.f_record = record_id ;
            } in
            record_fields := field :: !record_fields ;
            compile_fields := Fmap.add f field !compile_fields ;
         ) comp.cfields ;
       let descr = {
         t_source = fst (List.hd comp.cfields).floc ;
         t_short = (if comp.cstruct then "struct " else "union ") ^ comp.corig_name ;
         t_descr = "" ;
       } in
       LogicDef.declare {
         d_name = record_id ;
         d_item = RECORD (List.rev !record_fields) ;
         d_descr = descr ;
       } ;
       (record_id , !compile_fields)