rust/compiler
David Wood 037b27430b
abi: unsized field in union - assert to delay bug
Unions cannot have unsized fields, and as such, layout computation for
unions asserts that each union field is sized (as this would normally
have halted compilation earlier).

However, if a generator ends up with an unsized local - a circumstance
in which an error will always have been emitted earlier, for example, if
attempting to dereference a `&str` - then the generator transform will
produce a union with an unsized field.

Since #110107, later passes will be run, such as constant propagation,
and can attempt layout computation on the generator, which will result
in layout computation of `str` in the context of it being a field of a
union - and so the aforementioned assertion would cause an ICE.

It didn't seem appropriate to try and detect this case in the MIR body
and skip this specific pass; tainting the MIR body or delaying a bug
from the generator transform (or elsewhere) wouldn't prevent this either
(as neither would prevent the later pass from running); and tainting when
the deref of `&str` is reported, if that's possible, would unnecessarily
prevent potential other errors from being reported later in compilation,
and is very tailored to this specific case of getting a unsized type in
a generator.

Given that this circumstance can only happen when an error should have
already been reported, the correct fix appears to be just changing the
assert to a delayed bug. This will still assert if there is some
circumstance where this occurs and no error has been reported, but it
won't crash the compiler in this instance.

Signed-off-by: David Wood <david@davidtw.co>
2023-07-25 15:50:39 +01:00
..
rustc fix link 2023-03-11 10:53:47 -06:00
rustc_abi abi: unsized field in union - assert to delay bug 2023-07-25 15:50:39 +01:00
rustc_apfloat
rustc_arena Extend unused_must_use to cover block exprs 2023-06-15 17:59:13 +08:00
rustc_ast more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_ast_lowering more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_ast_passes Lint against misplaced where-clauses on assoc tys in traits 2023-07-11 01:19:11 +02:00
rustc_ast_pretty more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_attr Add infrastructure #[rustc_confusables] attribute to allow targeted 2023-07-16 19:22:03 +08:00
rustc_baked_icu_data Regen baked data 2023-05-02 10:45:16 -07:00
rustc_borrowck borrowck/errors: fix i18n error in delayed bug 2023-07-24 15:47:03 +01:00
rustc_builtin_macros fix couple of clippy findings: 2023-07-23 10:50:14 +02:00
rustc_codegen_cranelift Merge commit '1eded3619d' into sync_cg_clif-2023-07-22 2023-07-22 13:32:34 +00:00
rustc_codegen_gcc Revert "Auto merge of #113166 - moulins:ref-niches-initial, r=oli-obk" 2023-07-21 22:35:57 -07:00
rustc_codegen_llvm Revert "Auto merge of #113166 - moulins:ref-niches-initial, r=oli-obk" 2023-07-21 22:35:57 -07:00
rustc_codegen_ssa remove redundant clones 2023-07-23 09:48:07 +02:00
rustc_const_eval Auto merge of #113853 - cjgillot:split-validator, r=compiler-errors 2023-07-22 16:59:23 +00:00
rustc_data_structures more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_driver Update rustix 2023-07-03 07:20:51 +00:00
rustc_driver_impl Rollup merge of #113780 - dtolnay:printkindpath, r=b-naber 2023-07-21 06:52:28 +02:00
rustc_error_codes error/E0691: include alignment in error message 2023-07-21 11:04:16 +02:00
rustc_error_messages borrowck/errors: fix i18n error in delayed bug 2023-07-24 15:47:03 +01:00
rustc_errors Don't translate compiler-internal bug messages 2023-07-20 09:51:47 +00:00
rustc_expand Don't translate compiler-internal bug messages 2023-07-20 09:51:47 +00:00
rustc_feature Add infrastructure #[rustc_confusables] attribute to allow targeted 2023-07-16 19:22:03 +08:00
rustc_fluent_macro Fix diagnostics with errors 2023-05-26 10:44:18 +00:00
rustc_fs_util Add try_canonicalize to rustc_fs_util and use it over fs::canonicalize 2023-03-16 21:50:23 +01:00
rustc_graphviz enable rust_2018_idioms for doctests 2023-05-07 00:12:29 +03:00
rustc_hir more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_hir_analysis fix clippy::useless_format 2023-07-23 11:14:52 +02:00
rustc_hir_pretty hir: Add Become expression kind 2023-06-26 08:56:32 +00:00
rustc_hir_typeck fix some clippy::style findings 2023-07-23 23:36:56 +02:00
rustc_incremental Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_index Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_infer fix some clippy::style findings 2023-07-23 23:36:56 +02:00
rustc_interface Revert "Auto merge of #113166 - moulins:ref-niches-initial, r=oli-obk" 2023-07-21 22:35:57 -07:00
rustc_lexer fix some clippy::style findings 2023-07-23 23:36:56 +02:00
rustc_lint Rollup merge of #113832 - WaffleLapkin:track_lint_caller, r=compiler-errors 2023-07-18 19:06:04 +02:00
rustc_lint_defs Fix removal span calculation of unused_qualifications suggestion 2023-07-18 09:52:08 +08:00
rustc_llvm Support .comment section like GCC/Clang (!llvm.ident) 2023-07-21 22:01:50 +02:00
rustc_log Downgrade tracing and syn 2023-07-02 21:02:31 +02:00
rustc_macros Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_metadata remove redundant clones 2023-07-23 09:48:07 +02:00
rustc_middle match on chars instead of &strs for .split() or .strip_prefix() 2023-07-23 10:13:41 +02:00
rustc_mir_build Make it clearer that edition functions are >=, not == 2023-07-19 16:38:35 +00:00
rustc_mir_dataflow Turn copy into moves during DSE. 2023-07-19 09:59:12 +00:00
rustc_mir_transform Reuse MIR validator for inliner. 2023-07-21 13:58:33 +00:00
rustc_monomorphize more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_parse fix some clippy::style findings 2023-07-23 23:36:56 +02:00
rustc_parse_format Fix unit tests 2023-07-19 16:37:09 +00:00
rustc_passes Add infrastructure #[rustc_confusables] attribute to allow targeted 2023-07-16 19:22:03 +08:00
rustc_plugin_impl Add rustc_fluent_macro to decouple fluent from rustc_macros 2023-04-18 18:56:22 +00:00
rustc_privacy refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00
rustc_query_impl fix couple of clippy findings: 2023-07-23 10:50:14 +02:00
rustc_query_system Revert "Auto merge of #113166 - moulins:ref-niches-initial, r=oli-obk" 2023-07-21 22:35:57 -07:00
rustc_resolve fix clippy::useless_format 2023-07-23 11:14:52 +02:00
rustc_serialize Upgrade to indexmap 2.0.0 2023-07-03 13:51:54 -07:00
rustc_session Auto merge of #113975 - matthiaskrgr:clippy_07_2023, r=fee1-dead 2023-07-23 14:09:19 +00:00
rustc_smir add Alias for smir 2023-07-22 15:38:41 -04:00
rustc_span Make it clearer that edition functions are >=, not == 2023-07-19 16:38:35 +00:00
rustc_symbol_mangling more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_target Revert "Auto merge of #113166 - moulins:ref-niches-initial, r=oli-obk" 2023-07-21 22:35:57 -07:00
rustc_trait_selection more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_traits refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00
rustc_transmute Auto merge of #113677 - bryangarza:unevaluated-const-ice_issue-110892, r=davidtwco 2023-07-18 09:07:32 +00:00
rustc_ty_utils fix some clippy::style findings 2023-07-23 23:36:56 +02:00
rustc_type_ir add docs for AliasKind::Inherent 2023-07-22 15:38:41 -04:00