pub enum EmitKind {
Executable,
Object,
Archive,
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.
Archive
A static library holding the objects of every input, --emit=archive.
Not a GCC mode, because GCC has ar beside it and we have said we ship a toolchain rather
than half of one. What needs it first is cargo xtask builtins, which has to turn a
directory of C files into the librucc_builtins.a a cross link looks for, for a target
whose machine may have no ar that knows the format.
It is a mode of the compiler rather than a second program because of the symbol index. A
static link resolves through it, so writing one means knowing what each member defines, and
the compiler has just finished compiling them. An ar would have to read the objects back
to find out the same thing.
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.