1.9 KiB
ErrorGuaranteed
The previous sections have been about the error message that a user of the
compiler sees. But emitting an error can also have a second important side
effect within the compiler source code: it generates an
ErrorGuaranteed.
ErrorGuaranteed is a zero-sized type that is unconstructable outside of the
rustc_errors crate. It is generated whenever an error is reported
to the user, so that if your compiler code ever encounters a value of type
ErrorGuaranteed, the compilation is statically guaranteed to fail. This is
useful for avoiding unsoundness bugs because you can statically check that an
error code path leads to a failure.
There are some important considerations about the usage of ErrorGuaranteed:
- It does not convey information about the kind of error. For example, the
error may be due (indirectly) to a
delay_span_bugor other compiler error. Thus, you should not rely onErrorGuaranteedwhen deciding whether to emit an error, or what kind of error to emit. ErrorGuaranteedshould not be used to indicate that a compilation will emit an error in the future. It should be used to indicate that an error has already been emitted -- that is, theemit()function has already been called. For example, if we detect that a future part of the compiler will error, we cannot useErrorGuaranteedunless we first emit an error ourselves.
Thankfully, in most cases, it should be statically impossible to abuse
ErrorGuaranteed.