FAILURE MAP
← Case archive

FA-44061 / Borrow checking / Open access

A diverging branch contributes an ordinary ownership state instead of bottom · case 01

A diverging branch contributes an ordinary ownership state instead of bottom.

Verified by executionVariant 1 · 21 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The static analyzer mishandles divergent bottom: a diverging branch contributes an ordinary ownership state instead of bottom.

THE FAILURE

The static analyzer mishandles divergent bottom: a diverging branch contributes an ordinary ownership state instead of bottom.

Unsuccessful approach: The partial repair uses if set(d['diverged'])==set(d['included']) and bool(d['diverged']): errors.append('divergent-bottom'), which still violates the stipulated analysis contract.

Case contract

Check ownership lattice join certificates. Definitely initialized paths intersect predecessor sets; possibly moved paths union; unique capabilities survive only if same owner on all paths; returned paths excluded from continuing join; divergent predecessors contribute bottom; reference alternatives union origins; assignment on every path restores initialization; storage incarnations cannot merge by variable spelling; drop flags reflect possibly initialized fields; conditional ownership is not unconditional ownership. Input is a fully explicit descriptor of the stated toy IR. Return rule identifiers in declaration order; absent optional obligations use the provided neutral defaults. No rule is an assertion about a production language.

Why this case matters

A finite offline static-analysis model of ownership and borrowing; it does not execute the analyzed program.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    errors=[]
    if set(d['joined_initialized'])!=(set.intersection(*(set(x) for x in d['pred_initialized'])) if d['pred_initialized'] else set()): errors.append('definite-meet')
    if set(d['joined_moved'])!=set(x for xs in d['pred_moved'] for x in xs): errors.append('possible-move-union')
    if d['unique_retained'] and len(set(d['unique_owners']))!=1: errors.append('unique-owner-agreement')
    if bool(set(d['returned'])&set(d['included'])): errors.append('returned-path-exclusion')
    if False: errors.append('divergent-bottom')
    if set(d['joined_origins'])!=set(x for xs in d['origin_sets'] for x in xs): errors.append('origin-alternative-union')
    if not set(d['assigned_everywhere'])<=set(d['restored']): errors.append('all-path-reinitialization')
    if d['merged_incarnation'] is not None and any(x!=d['merged_incarnation'] for x in d['incarnations']): errors.append('incarnation-separation')
    if set(d['possibly_initialized'])!=set(d['drop_flags']): errors.append('conditional-drop-flags')
    if bool(set(d['conditional'])&set(d['unconditional'])): errors.append('conditional-capability')
    return errors
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
base={'pred_initialized': [], 'joined_initialized': [], 'pred_moved': [], 'joined_moved': [], 'unique_owners': [], 'unique_retained': False, 'returned': [], 'included': [], 'diverged': [], 'origin_sets': [], 'joined_origins': [], 'assigned_everywhere': [], 'restored': [], 'incarnations': [], 'merged_incarnation': None, 'possibly_initialized': [], 'drop_flags': [], 'conditional': [], 'unconditional': []}
check('well formed empty obligations',solve(base),[])
check('definite-meet regression 0', solve(dict(base, **({'pred_initialized':[['a'],[]],'joined_initialized':['a']}))), ['definite-meet'])
check('definite-meet regression 1', solve(dict(base, **({'pred_initialized':[[N,N+1],[N]],'joined_initialized':[N,N+1]}))), ['definite-meet'])
check('possible-move-union regression 0', solve(dict(base, **({'pred_moved':[['a'],[]]}))), ['possible-move-union'])
check('possible-move-union regression 1', solve(dict(base, **({'pred_moved':[[N],[N+1]],'joined_moved':[N]}))), ['possible-move-union'])
check('unique-owner-agreement regression 0', solve(dict(base, **({'unique_retained':True,'unique_owners':['a','b']}))), ['unique-owner-agreement'])
check('unique-owner-agreement regression 1', solve(dict(base, **({'unique_retained':True,'unique_owners':[N,N+1]}))), ['unique-owner-agreement'])
check('returned-path-exclusion regression 0', solve(dict(base, **({'returned':['a'],'included':['a','b']}))), ['returned-path-exclusion'])
check('returned-path-exclusion regression 1', solve(dict(base, **({'returned':[N],'included':[N,N+1]}))), ['returned-path-exclusion'])
check('divergent-bottom regression 0', solve(dict(base, **({'diverged':['a'],'included':['a','b']}))), ['divergent-bottom'])
check('divergent-bottom regression 1', solve(dict(base, **({'diverged':[N],'included':[N,N+1]}))), ['divergent-bottom'])
check('origin-alternative-union regression 0', solve(dict(base, **({'origin_sets':[['a'],['b']],'joined_origins':['a']}))), ['origin-alternative-union'])
check('origin-alternative-union regression 1', solve(dict(base, **({'origin_sets':[[N],[N+1]],'joined_origins':[N]}))), ['origin-alternative-union'])
check('all-path-reinitialization regression 0', solve(dict(base, **({'assigned_everywhere':['a','b'],'restored':['a']}))), ['all-path-reinitialization'])
check('all-path-reinitialization regression 1', solve(dict(base, **({'assigned_everywhere':[N,N+1],'restored':[N]}))), ['all-path-reinitialization'])
check('incarnation-separation regression 0', solve(dict(base, **({'merged_incarnation':N,'incarnations':[N,N+1]}))), ['incarnation-separation'])
check('incarnation-separation regression 1', solve(dict(base, **({'merged_incarnation':'x1','incarnations':['x1','x2']}))), ['incarnation-separation'])
check('conditional-drop-flags regression 0', solve(dict(base, **({'possibly_initialized':['a']}))), ['conditional-drop-flags'])
check('conditional-drop-flags regression 1', solve(dict(base, **({'possibly_initialized':[N,N+1],'drop_flags':[N]}))), ['conditional-drop-flags'])
check('conditional-capability regression 0', solve(dict(base, **({'conditional':['r'],'unconditional':['r']}))), ['conditional-capability'])
check('conditional-capability regression 1', solve(dict(base, **({'conditional':[N],'unconditional':[N]}))), ['conditional-capability'])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
well formed empty obligations[][]Passed
definite-meet regression 0['definite-meet']['definite-meet']Passed
definite-meet regression 1['definite-meet']['definite-meet']Passed
possible-move-union regression 0['possible-move-union']['possible-move-union']Passed
possible-move-union regression 1['possible-move-union']['possible-move-union']Passed
unique-owner-agreement regression 0['unique-owner-agreement']['unique-owner-agreement']Passed
unique-owner-agreement regression 1['unique-owner-agreement']['unique-owner-agreement']Passed
returned-path-exclusion regression 0['returned-path-exclusion']['returned-path-exclusion']Passed
returned-path-exclusion regression 1['returned-path-exclusion']['returned-path-exclusion']Passed
divergent-bottom regression 0[]['divergent-bottom']Failed
divergent-bottom regression 1[]['divergent-bottom']Failed
origin-alternative-union regression 0['origin-alternative-union']['origin-alternative-union']Passed
origin-alternative-union regression 1['origin-alternative-union']['origin-alternative-union']Passed
all-path-reinitialization regression 0['all-path-reinitialization']['all-path-reinitialization']Passed
all-path-reinitialization regression 1['all-path-reinitialization']['all-path-reinitialization']Passed
incarnation-separation regression 0['incarnation-separation']['incarnation-separation']Passed
incarnation-separation regression 1['incarnation-separation']['incarnation-separation']Passed
conditional-drop-flags regression 0['conditional-drop-flags']['conditional-drop-flags']Passed
conditional-drop-flags regression 1['conditional-drop-flags']['conditional-drop-flags']Passed
conditional-capability regression 0['conditional-capability']['conditional-capability']Passed
conditional-capability regression 1['conditional-capability']['conditional-capability']Passed

SHA-256 / d83e6388eac8b9aee4f1ccb3a8f284900738c357b520157881ccbdbfd97784c1

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    errors=[]
    if set(d['joined_initialized'])!=(set.intersection(*(set(x) for x in d['pred_initialized'])) if d['pred_initialized'] else set()): errors.append('definite-meet')
    if set(d['joined_moved'])!=set(x for xs in d['pred_moved'] for x in xs): errors.append('possible-move-union')
    if d['unique_retained'] and len(set(d['unique_owners']))!=1: errors.append('unique-owner-agreement')
    if bool(set(d['returned'])&set(d['included'])): errors.append('returned-path-exclusion')
    if set(d['diverged'])==set(d['included']) and bool(d['diverged']): errors.append('divergent-bottom')
    if set(d['joined_origins'])!=set(x for xs in d['origin_sets'] for x in xs): errors.append('origin-alternative-union')
    if not set(d['assigned_everywhere'])<=set(d['restored']): errors.append('all-path-reinitialization')
    if d['merged_incarnation'] is not None and any(x!=d['merged_incarnation'] for x in d['incarnations']): errors.append('incarnation-separation')
    if set(d['possibly_initialized'])!=set(d['drop_flags']): errors.append('conditional-drop-flags')
    if bool(set(d['conditional'])&set(d['unconditional'])): errors.append('conditional-capability')
    return errors
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
base={'pred_initialized': [], 'joined_initialized': [], 'pred_moved': [], 'joined_moved': [], 'unique_owners': [], 'unique_retained': False, 'returned': [], 'included': [], 'diverged': [], 'origin_sets': [], 'joined_origins': [], 'assigned_everywhere': [], 'restored': [], 'incarnations': [], 'merged_incarnation': None, 'possibly_initialized': [], 'drop_flags': [], 'conditional': [], 'unconditional': []}
check('well formed empty obligations',solve(base),[])
check('definite-meet regression 0', solve(dict(base, **({'pred_initialized':[['a'],[]],'joined_initialized':['a']}))), ['definite-meet'])
check('definite-meet regression 1', solve(dict(base, **({'pred_initialized':[[N,N+1],[N]],'joined_initialized':[N,N+1]}))), ['definite-meet'])
check('possible-move-union regression 0', solve(dict(base, **({'pred_moved':[['a'],[]]}))), ['possible-move-union'])
check('possible-move-union regression 1', solve(dict(base, **({'pred_moved':[[N],[N+1]],'joined_moved':[N]}))), ['possible-move-union'])
check('unique-owner-agreement regression 0', solve(dict(base, **({'unique_retained':True,'unique_owners':['a','b']}))), ['unique-owner-agreement'])
check('unique-owner-agreement regression 1', solve(dict(base, **({'unique_retained':True,'unique_owners':[N,N+1]}))), ['unique-owner-agreement'])
check('returned-path-exclusion regression 0', solve(dict(base, **({'returned':['a'],'included':['a','b']}))), ['returned-path-exclusion'])
check('returned-path-exclusion regression 1', solve(dict(base, **({'returned':[N],'included':[N,N+1]}))), ['returned-path-exclusion'])
check('divergent-bottom regression 0', solve(dict(base, **({'diverged':['a'],'included':['a','b']}))), ['divergent-bottom'])
check('divergent-bottom regression 1', solve(dict(base, **({'diverged':[N],'included':[N,N+1]}))), ['divergent-bottom'])
check('origin-alternative-union regression 0', solve(dict(base, **({'origin_sets':[['a'],['b']],'joined_origins':['a']}))), ['origin-alternative-union'])
check('origin-alternative-union regression 1', solve(dict(base, **({'origin_sets':[[N],[N+1]],'joined_origins':[N]}))), ['origin-alternative-union'])
check('all-path-reinitialization regression 0', solve(dict(base, **({'assigned_everywhere':['a','b'],'restored':['a']}))), ['all-path-reinitialization'])
check('all-path-reinitialization regression 1', solve(dict(base, **({'assigned_everywhere':[N,N+1],'restored':[N]}))), ['all-path-reinitialization'])
check('incarnation-separation regression 0', solve(dict(base, **({'merged_incarnation':N,'incarnations':[N,N+1]}))), ['incarnation-separation'])
check('incarnation-separation regression 1', solve(dict(base, **({'merged_incarnation':'x1','incarnations':['x1','x2']}))), ['incarnation-separation'])
check('conditional-drop-flags regression 0', solve(dict(base, **({'possibly_initialized':['a']}))), ['conditional-drop-flags'])
check('conditional-drop-flags regression 1', solve(dict(base, **({'possibly_initialized':[N,N+1],'drop_flags':[N]}))), ['conditional-drop-flags'])
check('conditional-capability regression 0', solve(dict(base, **({'conditional':['r'],'unconditional':['r']}))), ['conditional-capability'])
check('conditional-capability regression 1', solve(dict(base, **({'conditional':[N],'unconditional':[N]}))), ['conditional-capability'])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
well formed empty obligations[][]Passed
definite-meet regression 0['definite-meet']['definite-meet']Passed
definite-meet regression 1['definite-meet']['definite-meet']Passed
possible-move-union regression 0['possible-move-union']['possible-move-union']Passed
possible-move-union regression 1['possible-move-union']['possible-move-union']Passed
unique-owner-agreement regression 0['unique-owner-agreement']['unique-owner-agreement']Passed
unique-owner-agreement regression 1['unique-owner-agreement']['unique-owner-agreement']Passed
returned-path-exclusion regression 0['returned-path-exclusion']['returned-path-exclusion']Passed
returned-path-exclusion regression 1['returned-path-exclusion']['returned-path-exclusion']Passed
divergent-bottom regression 0[]['divergent-bottom']Failed
divergent-bottom regression 1[]['divergent-bottom']Failed
origin-alternative-union regression 0['origin-alternative-union']['origin-alternative-union']Passed
origin-alternative-union regression 1['origin-alternative-union']['origin-alternative-union']Passed
all-path-reinitialization regression 0['all-path-reinitialization']['all-path-reinitialization']Passed
all-path-reinitialization regression 1['all-path-reinitialization']['all-path-reinitialization']Passed
incarnation-separation regression 0['incarnation-separation']['incarnation-separation']Passed
incarnation-separation regression 1['incarnation-separation']['incarnation-separation']Passed
conditional-drop-flags regression 0['conditional-drop-flags']['conditional-drop-flags']Passed
conditional-drop-flags regression 1['conditional-drop-flags']['conditional-drop-flags']Passed
conditional-capability regression 0['conditional-capability']['conditional-capability']Passed
conditional-capability regression 1['conditional-capability']['conditional-capability']Passed

SHA-256 / 1420e2a093a00d4adfe63fc77a8c22a301abf568e32e5af52df544df11743a5f

HELD IN THE MEMBER ARCHIVE

The verified repair and its recorded checks are member-only.

This mechanism has 21 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.

Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.

Member access is invitation-based. Sign in with your invited account to inspect the repair.

Sign in to the archive ↗

Verification & scope

The explicitly stated toy language is the complete scope; this is not a production compiler or a claim about Rust semantics. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:44:08.622259+00:00.

Case digest / b61cc92f6beb84d704865604bacf341cb8025d1f79e6e2067d025a420380ff1a