diff options
| author | Nicholas Nethercote <n.nethercote@gmail.com> | 2024-02-17 09:13:45 +1100 |
|---|---|---|
| committer | Nicholas Nethercote <n.nethercote@gmail.com> | 2024-02-17 09:40:44 +1100 |
| commit | e72e7e9ae3a6938f1a926ca10f693d89948134cb (patch) | |
| tree | bde4ce12be4df4cb5a0881d74f71d644ea05a1a3 /compiler/rustc_llvm/llvm-wrapper/ArchiveWrapper.cpp | |
| parent | cefa14bf2fc4cbc23a0f5e7d1daa04d258f8d62b (diff) | |
| download | rust-e72e7e9ae3a6938f1a926ca10f693d89948134cb.tar.gz rust-e72e7e9ae3a6938f1a926ca10f693d89948134cb.zip | |
Merge `CompilerError::CompilationFailed` and `CompilerError::ICE`.
`CompilerError` has `CompilationFailed` and `ICE` variants, which seems
reasonable at first. But the way it identifies them is flawed:
- If compilation errors out, i.e. `RunCompiler::run` returns an `Err`,
it uses `CompilationFailed`, which is reasonable.
- If compilation panics with `FatalError`, it catches the panic and uses
`ICE`. This is sometimes right, because ICEs do cause `FatalError`
panics, but sometimes wrong, because certain compiler errors also
cause `FatalError` panics. (The compiler/rustdoc/clippy/whatever just
catches the `FatalError` with `catch_with_exit_code` in `main`.)
In other words, certain non-ICE compilation failures get miscategorized
as ICEs. It's not possible to reliably distinguish the two cases, so
this commit merges them. It also renames the combined variant as just
`Failed`, to better match the existing `Interrupted` and `Skipped`
variants.
Here is an example of a non-ICE failure that causes a `FatalError`
panic, from `tests/ui/recursion_limit/issue-105700.rs`:
```
#![recursion_limit="4"]
#![invalid_attribute]
#![invalid_attribute]
#![invalid_attribute]
#![invalid_attribute]
#![invalid_attribute]
//~^ERROR recursion limit reached while expanding
fn main() {{}}
```
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/ArchiveWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
