pub enum EmitKind {
Executable,
Object,
Asm,
Preprocessed,
Tast,
Ir,
MirFinal,
SafetySummary,
TypeGranules,
}Expand description
What the compiler should produce.
The intermediate forms are not a debugging convenience bolted on later. Every one of them
is a documented textual form that round-trips, which is what makes the per-stage testing
in spec/15-testing.md section 15.2 possible.
Variants§
Executable
A linked executable. The default.
Object
An object file, -c.
Asm
Assembly text, -S.
Preprocessed
Preprocessed source, -E.
Tast
The typed AST, --emit=tast.
Ir
The IR, --emit=ir.
MirFinal
The machine IR after register allocation, --emit=mir-final.
SafetySummary
The safety summary, --emit=safety-summary.
Not an intermediate form of the program the way the three above are. It is the answer to
“what does this build’s guarantee actually rest on”, which
spec/safe-memory/07-check-elimination.md section 7.8 asks for and
spec/safe-memory/10-boundaries.md section 10.2 says why.
TypeGranules
How the bytes of the translation unit’s records fall into granules,
--emit=type-granules.
Not an intermediate form either. It is the measurement
spec/safe-memory/17-open-questions.md question 6 asks for, which decides whether the
type plane fits inside Tier D’s memory budget, and it needs nothing past the type
checker because it is a question about layouts rather than about code.