let doEdge s succ d =
    let kinstr = Kstmt s in
    (* Check if there are some after-annotations to verify *)
    let annots_after, specs =
      Annotations.single_fold_stmt
        (fun annot (annot_after,spec as acc) ->
           match annot with
             | Before
                 (User { annot_content = AStmtSpec spec' }
                 | AI (_,{annot_content = AStmtSpec spec' }) )
               ->
                 let spec = match spec with
                   | None -> spec'
                   | Some s -> Logic_utils.merge_funspec s spec'; s
                 in
                 (annot_after, Some spec)
             | After
                 (User { annot_content = AStmtSpec _spec' }
                 | AI (_,{annot_content = AStmtSpec _spec' }) ) ->
                 CilE.warn_once
                   "Ignoring statement contract rooted after statement";
                   acc
             | After (AI (_, a) | User a) -> a :: annot_after, spec
             | Before _ -> acc)
        s
        ([], None)
    in
    CilE.start_stmt kinstr;
    List.iter
      (fun annot ->
         d.value := interp_annot !(d.value) annot)
      annots_after;
    Extlib.may
      (fun spec ->
         let init_state = find_current kinstr in
         d.value :=
           check_postconditions ~result:None
             ~slevel
             "statement"
             init_state.superposition
             !(d.value)
             Normal
             spec.spec_behavior)
      specs;
    CilE.end_stmt ();
    match AnalysisParam.blocks_closed_by_edge s succ with
        [] -> d
      | closed_blocks ->
          CilE.start_stmt kinstr;
          let d = copy d in
          d.value :=
            State_set.fold
              (fun state set ->
                 let state =
                   Relations_type.Model.uninitialize_locals closed_blocks state
                 in
                 State_set.add
                   (block_top_addresses_of_locals closed_blocks state) set)
              !(d.value) State_set.empty;
          CilE.end_stmt ();
          d