50b68267fe
Closes the 19a/19a.1/19b arc. Corpus signal from 19a.1 (5/65
fixtures fire over-strict-mode, all deliberate RC codegen-test
fixtures) justified shipping the suppress mechanism end-to-end.
Schema: Suppress { code, because } on FnDef. Pre-19b hashes
bit-identical via skip_serializing_if. Typechecker drops matching
diagnostics; empty 'because' is Error severity; wrong codes are
silent no-ops (open-set registry).
Form-A: (suppress (code "...") (because "...")) clause, parser
+ printer round-trip clean. Form-B: '// @suppress <code>: <reason>'
above the doc string, lossless contract metadata.
5 RC fixtures migrated (.ail.json + .ailx + .prose.txt). Corpus
signal: 5/65 -> 0/65. Lint still fires on any future fn that's
accidentally over-strict without an authored reason.
Test counts: ailang-check 55->61, ailang-core 26->28, ailang-surface
21->26, ailang-prose 49->52, e2e 70 unchanged.
Known debt: .ailx comment headers lost on regen (ail render's
contract excludes comments); parse_suppress_attr accepts
duplicate code/because attrs without diagnose (bounded by canonical
print order).
25 lines
522 B
Plaintext
25 lines
522 B
Plaintext
// module rc_match_arm_partial_drop_leak
|
|
|
|
data Wrap = MkWrap(Int)
|
|
|
|
data Cell = MkCell(Wrap, Wrap)
|
|
|
|
data Pair = MkPair(Cell, Cell)
|
|
|
|
fn build_pair(n: Int) -> own Pair {
|
|
MkPair(MkCell(MkWrap(n), MkWrap(2)), MkCell(MkWrap(3), MkWrap(4)))
|
|
}
|
|
|
|
// @suppress over-strict-mode: RC codegen test: exercises Iter A outer-arm-close partial-drop
|
|
fn use_first(p: own Pair) -> Int {
|
|
match p {
|
|
MkPair(a, b) => match a {
|
|
MkCell(w1, _) => 1
|
|
}
|
|
}
|
|
}
|
|
|
|
fn main() -> Unit with IO {
|
|
do io/print_int(use_first(build_pair(1)))
|
|
}
|