rust/compiler
bors 7120fdac7a Auto merge of #126963 - runtimeverification:smir_serde_derive, r=celinval
Add basic Serde serialization capabilities to Stable MIR

This PR adds basic Serde serialization capabilities to Stable MIR. It is intentionally minimal (just wrapping all stable MIR types with a Serde `derive`), so that any important design decisions can be discussed before going further. A simple test is included with this PR to validate that JSON can actually be emitted.

## Notes

When I wrapped the Stable MIR error types in `compiler/stable_mir/src/error.rs`, it caused test failures (though I'm not sure why) so I backed those out.

## Future Work

So, this PR will support serializing basic stable MIR, but it _does not_ support serializing interned values beneath `Ty`s and `AllocId`s, etc... My current thinking about how to handle this is as follows:

1.  Add new `visited_X` fields to the `Tables` struct for each interned category of interest.

2.  As serialization is occuring, serialize interned values as usual _and_ also record the interned value we referenced in `visited_X`.

    (Possibly) In addition, if an interned value recursively references other interned values, record those interned values as well.

3.  Teach the stable MIR `Context` how to access the `visited_X` values and expose them with wrappers in `stable_mir/src/lib.rs` to users (e.g. to serialize and/or further analyze them).

### Pros

This approach does not commit to any specific serialization format regarding interned values or other more complex cases, which avoids us locking into any behaviors that may not be desired long-term.

### Cons

The user will need to manually handle serializing interned values.

### Alternatives

1.  We can directly provide access to the underlying `Tables` maps for interned values; the disadvantage of this approach is that it either requires extra processing for users to filter out to only use the values that they need _or_ users may serialize extra values that they don't need. The advantage is that the implementation is even simpler. The other pros/cons are similar to the above.

2.  We can directly serialize interned values by expanding them in-place. The pro is that this may make some basic inputs easier to consume. However, the cons are that there will need to be special provisions for dealing with cyclical values on both the producer and consumer _and_ global values will possibly need to be de-duplicated on the consumer side.
2024-07-25 20:27:51 +00:00
..
rustc The rustc crate feature is called jemalloc 2024-07-15 13:01:20 -04:00
rustc_abi Rollup merge of #127769 - compiler-errors:ed-2024-dep, r=oli-obk 2024-07-17 16:22:31 +02:00
rustc_arena Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_ast Auto merge of #128195 - matthiaskrgr:rollup-195dfdf, r=matthiaskrgr 2024-07-25 18:05:00 +00:00
rustc_ast_ir Use dep: for crate dependencies 2024-07-15 12:40:10 -04:00
rustc_ast_lowering Gate AsyncFn* under async_closure feature 2024-07-23 19:56:06 -04:00
rustc_ast_passes Rollup merge of #127054 - compiler-errors:bound-ordering, r=fmease 2024-07-25 04:43:18 +02:00
rustc_ast_pretty centralize turning asm flags into human readable names 2024-07-24 15:27:18 +02:00
rustc_attr Use a dedicated type instead of a reference for the diagnostic context 2024-06-18 15:42:11 +00:00
rustc_baked_icu_data Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_borrowck Don't ICE if HIR and middle types disagree in borrowck error reporting 2024-07-24 23:36:47 -04:00
rustc_builtin_macros Use Cow<'static, str> for InlineAsmTemplatePiece::String 2024-07-24 21:11:55 +01:00
rustc_codegen_cranelift Use Cow<'static, str> for InlineAsmTemplatePiece::String 2024-07-24 21:11:55 +01:00
rustc_codegen_gcc Format cg_gcc with same formatting parameters 2024-07-17 20:22:07 +02:00
rustc_codegen_llvm Auto merge of #127995 - workingjubilee:say-turings-prayer, r=BoxyUwU 2024-07-25 07:52:31 +00:00
rustc_codegen_ssa Auto merge of #127995 - workingjubilee:say-turings-prayer, r=BoxyUwU 2024-07-25 07:52:31 +00:00
rustc_const_eval Do not try to reveal hidden types when trying to prove Freeze in the defining scope 2024-07-24 16:00:48 +00:00
rustc_data_structures Use dep: for crate dependencies 2024-07-15 12:40:10 -04:00
rustc_driver Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_driver_impl Move codegen_and_build_linker from Queries to Linker 2024-07-01 11:00:49 +00:00
rustc_error_codes Rollup merge of #126994 - Alexendoo:explain-markdown, r=tgross35 2024-07-23 19:42:35 +02:00
rustc_error_messages Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_errors Rollup merge of #127528 - estebank:ascii-control-chars, r=oli-obk 2024-07-25 04:43:19 +02:00
rustc_expand Rollup merge of #128133 - nnethercote:fix-cfg_attr-spans, r=petrochenkov 2024-07-24 18:00:41 +02:00
rustc_feature Rollup merge of #127506 - liushuyu:s390x-target-features, r=davidtwco 2024-07-22 11:40:19 -05:00
rustc_fluent_macro Avoid ref when using format! in compiler 2024-07-19 14:52:07 -04:00
rustc_fs_util Remove useless tidy-alphabetical markers. 2024-06-20 09:23:20 +10:00
rustc_graphviz Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_hir Rollup merge of #127717 - gurry:127441-stray-impl-sugg, r=compiler-errors 2024-07-24 22:22:16 +02:00
rustc_hir_analysis Revert suggestion verbosity change 2024-07-22 22:51:53 +00:00
rustc_hir_pretty Rollup merge of #128138 - folkertdev:asm-option-allowlist, r=lcnr 2024-07-25 16:48:20 +02:00
rustc_hir_typeck Rollup merge of #128140 - veera-sivarajan:remove-ident-to-str-conversions, r=compiler-errors 2024-07-24 22:22:18 +02:00
rustc_incremental Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_index Fix feature gating on rustc_index to not use implicit features 2024-07-15 12:44:24 -04:00
rustc_index_macros Remove usage of specialization from newtype_index! 2024-06-30 16:42:53 +00:00
rustc_infer Get rid of can_eq_shallow 2024-07-22 13:54:48 -04:00
rustc_interface Use dep: for crate dependencies 2024-07-15 12:40:10 -04:00
rustc_lexer Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_lint Rollup merge of #121364 - Urgau:unary_precedence, r=compiler-errors 2024-07-25 16:48:17 +02:00
rustc_lint_defs Mark missing_fragment_specifier as FutureReleaseErrorReportInDeps 2024-07-24 13:16:46 -04:00
rustc_llvm Rollup merge of #124033 - bjorn3:ar_archive_writer_0_3_0, r=davidtwco 2024-07-16 16:15:13 -05:00
rustc_log Bump tracing-tree and allow rendering lines again 2024-06-12 10:11:41 +00:00
rustc_macros lift_to_tcx -> lift_to_interner 2024-07-17 10:46:10 -04:00
rustc_metadata Rollup merge of #127528 - estebank:ascii-control-chars, r=oli-obk 2024-07-25 04:43:19 +02:00
rustc_middle Rollup merge of #127717 - gurry:127441-stray-impl-sugg, r=compiler-errors 2024-07-24 22:22:16 +02:00
rustc_mir_build Turn an unreachable code path into an ICE 2024-07-25 15:33:34 +00:00
rustc_mir_dataflow Avoid ref when using format! in compiler 2024-07-19 14:52:07 -04:00
rustc_mir_transform Move all error reporting into rustc_trait_selection 2024-07-21 22:34:35 -04:00
rustc_monomorphize Move compiler_builtin check to the use case 2024-07-15 23:43:52 +00:00
rustc_next_trait_solver Use dep: for crate dependencies 2024-07-15 12:40:10 -04:00
rustc_parse Fix a span error when parsing a wrong param of function. 2024-07-25 22:33:45 +08:00
rustc_parse_format Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_passes Rollup merge of #128138 - folkertdev:asm-option-allowlist, r=lcnr 2024-07-25 16:48:20 +02:00
rustc_pattern_analysis Auto merge of #128015 - Nadrieril:two-step-or-expansion, r=compiler-errors 2024-07-23 06:35:42 +00:00
rustc_privacy Do not ICE in privacy when type inference fails. 2024-06-17 10:09:27 +00:00
rustc_query_impl Allow tracing through item_bounds query invocations on opaques 2024-06-19 08:47:55 +00:00
rustc_query_system Be more accurate about calculating display_col from a BytePos 2024-07-18 20:08:38 +00:00
rustc_resolve Do not use question as label 2024-07-24 21:03:27 +00:00
rustc_sanitizers Rollup merge of #127980 - nyurik:compiler-refs, r=oli-obk 2024-07-20 07:13:45 +02:00
rustc_serialize chore: remove duplicate words 2024-07-02 11:25:31 +08:00
rustc_session Auto merge of #127670 - compiler-errors:no-type-length-limit, r=jackh726 2024-07-14 12:44:07 +00:00
rustc_smir Avoid comments that describe multiple use items. 2024-07-17 08:02:46 +10:00
rustc_span Rollup merge of #127528 - estebank:ascii-control-chars, r=oli-obk 2024-07-25 04:43:19 +02:00
rustc_symbol_mangling Fix FnMut/Fn shim for coroutine-closures that capture references 2024-06-29 17:38:02 -04:00
rustc_target Auto merge of #127755 - no1wudi:master, r=michaelwoerister 2024-07-23 09:45:28 +00:00
rustc_trait_selection Rollup merge of #128160 - compiler-errors:auto, r=jackh726 2024-07-25 04:43:20 +02:00
rustc_traits Move all error reporting into rustc_trait_selection 2024-07-21 22:34:35 -04:00
rustc_transmute Use dep: for crate dependencies 2024-07-15 12:40:10 -04:00
rustc_ty_utils Make sure that args are compatible in resolve_associated_item 2024-07-24 22:59:57 -04:00
rustc_type_ir Avoid ref when using format! in compiler 2024-07-19 14:52:07 -04:00
rustc_type_ir_macros lift_to_tcx -> lift_to_interner 2024-07-17 10:46:10 -04:00
stable_mir Auto merge of #126963 - runtimeverification:smir_serde_derive, r=celinval 2024-07-25 20:27:51 +00:00