let check_unspecified_sequence state seq =
    let rec check_one_stmt ((stmt1,_,writes1,_) as my_stmt) = function
        [] -> ()
      | (stmt2,_,_,_)::seq when stmt1 == stmt2 -> check_one_stmt my_stmt seq
      | (stmt2,modified2,writes2,reads2) :: seq ->
          let unauthorized_reads =
            (* TODO: try to have a more semantical interpretation of modified *)
            List.filter
              (fun x ->
                 not (List.exists (fun y -> LvalComparable.compare x y = 0)
                        modified2)) writes1
          in
          check_non_overlapping state unauthorized_reads reads2;
          if stmt1.sid < stmt2.sid then
            check_non_overlapping state writes1 writes2;
          check_one_stmt my_stmt seq
    in
    if Parameters.UnspecifiedAccess.get () then
      List.iter (fun x -> check_one_stmt x seq) seq