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 =
List.filter
(fun x -> List.for_all (fun y -> not (Lval.equal x y)) 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