mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-02 04:57:35 +00:00
![]() rustc_target: `TyAndLayout::field` should never error. This refactor (making `TyAndLayout::field` return `TyAndLayout` without any `Result` around it) is based on a simple observation, regarding `TyAndLayout::field`: If `cx.layout_of(ty)` succeeds (for some `cx` and `ty`), then `.field(cx, i)` on the resulting `TyAndLayout` should *always* succeed in computing `cx.layout_of(field_ty)` (where `field_ty` is the type of the `i`th field of `ty`). The reason for this is that no matter which field is chosen, `cx.layout_of(field_ty)` *will have already been computed*, as part of computing `cx.layout_of(ty)`, as we cannot determine the layout of *any* type without considering the layouts of *all* of its fields. And so it should be fine to turn any errors into ICEs, since they likely indicate a `cx` mismatch, or some other edge case that is due to a compiler bug (as opposed to ever being an user-facing error). <hr/> Each commit should probably be reviewed separately, though note that there's some `where` clauses (in `rustc_target::abi::call::*`) that change in most commits. cc `@nagisa` `@oli-obk` |
||
---|---|---|
.. | ||
liveness | ||
check_attr.rs | ||
check_const.rs | ||
dead.rs | ||
diagnostic_items.rs | ||
entry.rs | ||
hir_id_validator.rs | ||
hir_stats.rs | ||
intrinsicck.rs | ||
lang_items.rs | ||
layout_test.rs | ||
lib_features.rs | ||
lib.rs | ||
liveness.rs | ||
loops.rs | ||
naked_functions.rs | ||
reachable.rs | ||
region.rs | ||
stability.rs | ||
upvars.rs | ||
weak_lang_items.rs |