rust/compiler
Nicholas Nethercote 4d8316f4d4 Simplify dataflow SwitchInt handling.
Current `SwitchInt` handling has complicated control flow.

- The dataflow engine calls `Analysis::apply_switch_int_edge_effects`,
  passing in an "applier" that impls `SwitchIntEdgeEffects`.
- `apply_switch_int_edge_effects` possibly calls `apply` on the applier,
  passing it a closure.
- The `apply` method calls the closure on each `SwitchInt` edge.
- The closure operates on the edge.

I.e. control flow goes from the engine, to the analysis, to the applier
(which came from the engine), to the closure (which came from the
analysis). It took me a while to work this out.

This commit changes to a simpler structure that maintains the important
characteristics.

- The dataflow engine calls `Analysis::get_switch_int_data`.
- `get_switch_int_data` returns an `Option<Self::SwitchIntData>` value.
- If that returned value was `Some`, the dataflow engine calls
  `Analysis::apply_switch_int_edge_effect` on each edge, passing the
  `Self::SwitchIntData` value.
- `Analysis::apply_switch_int_edge_effect` operates on the edge.

I.e. control flow goes from the engine, to the analysis, to the
engine, to the analysis.

Added:
- The `Analysis::SwitchIntData` assoc type and the
  `Analysis::get_switch_int_data` method. Both only need to be
  defined by analyses that look at `SwitchInt` terminators.
- The `MaybePlacesSwitchIntData` struct, which has three fields.

Changes:
- `Analysis::apply_switch_int_edge_effects` becomes
  `Analysis::apply_switch_int_edge_effect`, which is a little simpler
  because it's dealing with a single edge instead of all edges.

Removed:
- The `SwitchIntEdgeEffects` trait, and its two impls:
  `BackwardSwitchIntEdgeEffectsApplier` (which has six fields) and
  `ForwardSwitchIntEdgeEffectsApplier` structs (which has four fields).
- The closure.

The new structure is more concise and simpler.
2024-12-16 09:36:07 +11:00
..
rustc switch jemalloc-sys back to tikv-jemalloc-sys, and update to 0.6.0 2024-12-03 08:56:33 +00:00
rustc_abi fix safe-transmute handling of enums 2024-12-01 18:28:04 +01:00
rustc_arena
rustc_ast Rollup merge of #134140 - compiler-errors:unsafe-binders-ast, r=oli-obk 2024-12-13 17:25:31 +01:00
rustc_ast_ir
rustc_ast_lowering (Re-)Implement impl_trait_in_bindings 2024-12-14 03:21:24 +00:00
rustc_ast_passes Rollup merge of #134140 - compiler-errors:unsafe-binders-ast, r=oli-obk 2024-12-13 17:25:31 +01:00
rustc_ast_pretty Add unwrap_unsafe_binder and wrap_unsafe_binder macro operators 2024-12-12 16:29:40 +00:00
rustc_attr ensure that all publicly reachable const fn have const stability info 2024-11-10 10:16:26 +01:00
rustc_baked_icu_data Delete the cfg(not(parallel)) serial compiler 2024-11-12 13:38:58 +00:00
rustc_borrowck Simplify dataflow SwitchInt handling. 2024-12-16 09:36:07 +11:00
rustc_builtin_macros Rollup merge of #134140 - compiler-errors:unsafe-binders-ast, r=oli-obk 2024-12-13 17:25:31 +01:00
rustc_codegen_cranelift Rollup merge of #134251 - bjorn3:various_cleanups2, r=oli-obk 2024-12-14 03:54:35 +01:00
rustc_codegen_gcc target_features: control separately whether enabling and disabling a target feature is allowed 2024-12-14 08:24:18 +01:00
rustc_codegen_llvm Auto merge of #133417 - RalfJung:aarch64-float-abi, r=workingjubilee 2024-12-15 16:32:03 +00:00
rustc_codegen_ssa Auto merge of #133417 - RalfJung:aarch64-float-abi, r=workingjubilee 2024-12-15 16:32:03 +00:00
rustc_const_eval Rollup merge of #134285 - oli-obk:push-vwrqsqlwnuxo, r=Urgau 2024-12-15 20:01:38 +11:00
rustc_data_structures Remove jobserver from Session 2024-12-13 10:21:22 +00:00
rustc_driver
rustc_driver_impl Rollup merge of #134251 - bjorn3:various_cleanups2, r=oli-obk 2024-12-14 03:54:35 +01:00
rustc_error_codes Auto merge of #132706 - compiler-errors:async-closures, r=oli-obk 2024-12-13 00:37:51 +00:00
rustc_error_messages Delete the cfg(not(parallel)) serial compiler 2024-11-12 13:38:58 +00:00
rustc_errors Rollup merge of #134181 - estebank:trim-render, r=oli-obk 2024-12-14 03:54:31 +01:00
rustc_expand Keep track of parse errors in mods and don't emit resolve errors for paths involving them 2024-12-10 18:17:24 +00:00
rustc_feature (Re-)Implement impl_trait_in_bindings 2024-12-14 03:21:24 +00:00
rustc_fluent_macro
rustc_fs_util
rustc_graphviz
rustc_hir Rollup merge of #134285 - oli-obk:push-vwrqsqlwnuxo, r=Urgau 2024-12-15 20:01:38 +11:00
rustc_hir_analysis Rollup merge of #134285 - oli-obk:push-vwrqsqlwnuxo, r=Urgau 2024-12-15 20:01:38 +11:00
rustc_hir_pretty (Re-)Implement impl_trait_in_bindings 2024-12-14 03:21:24 +00:00
rustc_hir_typeck Rollup merge of #134285 - oli-obk:push-vwrqsqlwnuxo, r=Urgau 2024-12-15 20:01:38 +11:00
rustc_incremental Remove all threading through of ErrorGuaranteed from the driver 2024-12-06 18:42:31 +00:00
rustc_index Use BitSet in SparseBitMatrix. 2024-12-09 08:53:33 +11:00
rustc_index_macros Auto merge of #130867 - michirakara:steps_between, r=dtolnay 2024-11-22 10:54:22 +00:00
rustc_infer Assert that obligations are empty before deeply normalizing 2024-12-02 22:51:18 +00:00
rustc_interface Rollup merge of #134251 - bjorn3:various_cleanups2, r=oli-obk 2024-12-14 03:54:35 +01:00
rustc_lexer Add test to check unicode identifier version 2024-12-09 06:23:59 -08:00
rustc_lint Rollup merge of #133221 - Urgau:check-cfg-macro-diag, r=jieyouxu 2024-12-14 14:07:56 +01:00
rustc_lint_defs Actually walk into lifetimes and attrs in EarlyContextAndPass 2024-12-07 02:08:40 +00:00
rustc_llvm Auto merge of #129181 - beetrees:asm-spans, r=pnkfelix,compiler-errors 2024-12-12 02:34:06 +00:00
rustc_log
rustc_macros
rustc_metadata Rollup merge of #134251 - bjorn3:various_cleanups2, r=oli-obk 2024-12-14 03:54:35 +01:00
rustc_middle Rollup merge of #134285 - oli-obk:push-vwrqsqlwnuxo, r=Urgau 2024-12-15 20:01:38 +11:00
rustc_mir_build Rollup merge of #134285 - oli-obk:push-vwrqsqlwnuxo, r=Urgau 2024-12-15 20:01:38 +11:00
rustc_mir_dataflow Simplify dataflow SwitchInt handling. 2024-12-16 09:36:07 +11:00
rustc_mir_transform Auto merge of #133734 - scottmcm:lower-indexing-to-ptrmetadata, r=davidtwco,RalfJung 2024-12-14 22:43:39 +00:00
rustc_monomorphize Implement projection and shim for AFIDT 2024-12-10 16:52:20 +00:00
rustc_next_trait_solver Rename projection_def_id to item_def_id 2024-12-11 00:59:43 +00:00
rustc_parse Rollup merge of #134192 - nnethercote:rm-Lexer-Parser-dep, r=compiler-errors 2024-12-14 05:01:06 +01:00
rustc_parse_format
rustc_passes Rollup merge of #134285 - oli-obk:push-vwrqsqlwnuxo, r=Urgau 2024-12-15 20:01:38 +11:00
rustc_pattern_analysis no more Reveal :( 2024-11-23 13:52:54 +01:00
rustc_privacy Introduce default_field_values feature 2024-12-09 21:55:01 +00:00
rustc_query_impl Rename ty_def_id so people will stop using it by accident 2024-12-13 16:36:38 +00:00
rustc_query_system Rename ty_def_id so people will stop using it by accident 2024-12-13 16:36:38 +00:00
rustc_resolve Don't make a def id for impl_trait_in_bindings 2024-12-14 18:08:30 +00:00
rustc_sanitizers Remove more traces of anonymous ADTs 2024-12-10 19:50:47 +00:00
rustc_serialize
rustc_session Rollup merge of #134251 - bjorn3:various_cleanups2, r=oli-obk 2024-12-14 03:54:35 +01:00
rustc_smir Encode coroutine-closures in SMIR 2024-12-14 03:45:35 +00:00
rustc_span Auto merge of #134258 - bjorn3:no_public_specialization, r=petrochenkov 2024-12-15 04:45:24 +00:00
rustc_symbol_mangling Rollup merge of #134285 - oli-obk:push-vwrqsqlwnuxo, r=Urgau 2024-12-15 20:01:38 +11:00
rustc_target Auto merge of #133417 - RalfJung:aarch64-float-abi, r=workingjubilee 2024-12-15 16:32:03 +00:00
rustc_trait_selection Rollup merge of #134285 - oli-obk:push-vwrqsqlwnuxo, r=Urgau 2024-12-15 20:01:38 +11:00
rustc_traits Delay a bug when encountering an impl with unconstrained generics in codegen_select 2024-11-23 05:27:45 +00:00
rustc_transmute fix safe-transmute handling of enums 2024-12-01 18:28:04 +01:00
rustc_ty_utils Implement projection and shim for AFIDT 2024-12-10 16:52:20 +00:00
rustc_type_ir Rename projection_def_id to item_def_id 2024-12-11 00:59:43 +00:00
rustc_type_ir_macros
stable_mir Encode coroutine-closures in SMIR 2024-12-14 03:45:35 +00:00