outcome
nanofil
In Fil-C a program ends by exiting, by a signal, or in a Fil-C panic
An outcome is how a run ends: a return, unreachable, undefined behaviour, a trap, unchecked, or running out of fuel. interp.pl and the model give the same outcomes term for term, which is what the outcome gate compares.
| interp.pl | Semantics.v |
|---|---|
retV, retsX1, X2, ret | Ret, Rets, RetVoid |
unreachable | Unreachable |
ubReason | UB |
trapReason | Trap |
uncheckedReason | Unchecked |
out_of_fuel | OutOfFuel |
outcome is defined in Semantics.v; Transport.v's eoutcome encodes it back as interp.pl's term. interp.pl also has unknownasmM, Xs for asm_fixed, outside the core subset.
unchecked is the one a valid module never reaches (soundness, valid_no_unchecked). Campaign 7 sorts the others into panics and not: formal.md, What counts as a panic.
The subtlety: in the model UB comes only from an invalid float-to-integer conversion; plain mode's ubout_of_boundsA, Size is outside the subset.
Linked from
- ExternalMachine.v: ending
- ExternalMachine.v: external_outcome
- How Fil-C works: The promise
- How Iris works: The machine as a language
- Language.v: Language
- Language.v: returning
- Panics.v: failure
- Panics.v: refusal
- Run.v: data_base
- Run.v: run_result
- Semantics.v: inst_out
- Semantics.v: outcome
- Semantics.v: outcome_words
- Semantics.v: pending
- Semantics.v: step_result
- Term.v: term
- Transport.v: dz
- Transport.v: eoutcome
- interpreter
- refines
- run
- step
- the formal campaign: What counts as a panic
- transport
- unchecked