let do_wp_passes fun_iter behaviors property =
  let model = Wp_parameters.get_model () in
  let goals = ref Bag.empty in
  let wp_pass computer assigns =
    do_compute goals computer fun_iter assigns behaviors property
  in
  begin 
    match computer model with
      | NonAssigns c ->
          Wp_parameters.warning
            ~current:false ~once:true
            "Ignored Assigns-Goals with '%s' model"
            (Wp_parameters.Model.get ()) ;
          wp_pass c WpAnnot.NoAssigns
      | OneforBoth c -> 
          wp_pass c WpAnnot.WithAssigns
      | OneforEach(c1,c2) ->
          match property with
            | None | Some (NamedProp _ | IdProp(IPBlob _ | IPBehavior _)) ->
                begin
                  wp_pass c1 WpAnnot.NoAssigns ;
                  wp_pass c2 WpAnnot.OnlyAssigns ;
                end
            | Some(IdPropIPPredicate _ | IPAxiom _
                   | IPCodeAnnot _ | IPComplete _
                   | IPDisjoint _ | IPDecrease _ )) ->
                wp_pass c1 WpAnnot.NoAssigns
            | Some (IdProp(IPAssigns _)) ->
                wp_pass c2 WpAnnot.OnlyAssigns
  end ; !goals