Files
sx/examples/expected/1042-errors-failable-closure-shape-union-reject.stderr
agra 39c21468ee ERR/E5.1: program-wide inferred-! union per closure/fn shape
All occurrences of Closure(<sig>) -> (T, !) with a structurally identical
value-signature now share one inferred error-set node; every bare-!
closure literal of that shape unions its escape tags in, and a
`try slot(x)` against any matching-shape slot widens the caller's named
set against that union. This closes the gap where a slot call (no static
function name) skipped the widening check entirely.

- shape_inferred_sets keyed by closureShapeKey (params + value-return via
  mangleTypeName, error slot excluded) so bare-!, non-failable, .function
  and .closure of one value-sig collapse to a single key.
- convergeClosureShapeSets pre-pass (lowerRoot Pass 1d', after the
  name-keyed convergeInferredErrorSets): collectClosureShapes walks fn
  bodies through lambda boundaries; recordClosureShape resolves each
  concrete bare-! literal's shape and unions its raises (+ try named_fn()
  edges via calleeEscapeTags) into the shape node.
- checkEscapeWidening falls back to shapeKeyOfCallee for bare-! slot calls
  (computed from the callee expr's .function/.closure type). Empty union
  is silently allowed (sub-feature 6).

Scope: concrete shapes only (generic lambdas skipped); closure-to-closure
try edges are not fix-pointed (under-approximation = a missed diagnostic,
never a miscompile).

Tests: 1041 (positive — union composes, runs), 1042 (reject — two
widening diagnostics, exit 1).
2026-06-01 22:01:38 +03:00

12 lines
546 B
Plaintext

error: error tag 'error.Negative' is not in caller's error set 'Small'
--> /Users/agra/projects/sx/examples/1042-errors-failable-closure-shape-union-reject.sx:13:12
|
13 | return try h(x); // Negative, Other ∉ Small → two diagnostics
| ^^^^^^^^
error: error tag 'error.Other' is not in caller's error set 'Small'
--> /Users/agra/projects/sx/examples/1042-errors-failable-closure-shape-union-reject.sx:13:12
|
13 | return try h(x); // Negative, Other ∉ Small → two diagnostics
| ^^^^^^^^