thread optimisation obligations through rewrite passes
This commit is contained in:
@@ -18,6 +18,9 @@ let find_case name =
|
||||
| Some case -> case
|
||||
| None -> failwith ("missing case " ^ name)
|
||||
|
||||
let has_obligation kind obligations =
|
||||
List.exists (fun (o : Pipeline.obligation) -> o.kind = kind) obligations
|
||||
|
||||
let () =
|
||||
List.iter
|
||||
(fun (case : Corpus.case) ->
|
||||
@@ -33,6 +36,16 @@ let () =
|
||||
assert_true
|
||||
"expected representation exposure witness"
|
||||
(repr.failure_mode = Audit.Representation_exposure);
|
||||
assert_true
|
||||
"expected unsafe inlining to emit representation exposure obligation"
|
||||
(has_obligation Pipeline.Exposed_representation repr.compiled.obligations);
|
||||
let safe = Audit.audit_case (find_case "safe-polymorphic-instantiation") in
|
||||
assert_true
|
||||
"safe instantiation should not emit representation exposure obligation"
|
||||
(not (has_obligation Pipeline.Exposed_representation safe.compiled.obligations));
|
||||
assert_true
|
||||
"safe instantiation should emit preserve relation obligations at rewrite sites"
|
||||
(has_obligation Pipeline.Preserve_relation safe.compiled.obligations);
|
||||
let strict = Audit.audit_case (find_case "strictness-induced-termination-change") in
|
||||
assert_true
|
||||
"expected strictness shift witness"
|
||||
|
||||
Reference in New Issue
Block a user