rust/compiler
Dylan DPC 8c89601647
Rollup merge of #111494 - compiler-errors:variant-order, r=petrochenkov
Encode `VariantIdx` so we can decode ADT variants in the right order

As far as I can tell, we don't guarantee anything about the ordering of `DefId`s and module children...

The code that motivated this PR (#111483) looks something like:

```rust
#[derive(Protocol)]
pub enum Data {
    #[protocol(discriminator(0x00))]
    Disconnect(Disconnect),
    EncryptionRequest,
    /* more variants... */
}
```

The specific macro ([`protocol`](https://github.com/dylanmckay/protocol)) doesn't really matter, but as far as I can tell (from calls to `build_reduced_graph`), the presence of that `#[protocol(..)]` helper attribute causes the def-id of the `Disconnect` enum variant to be collected *after* its siblings, and it shows up after the other variants in `module_children`.

When we decode the variants for `Data` in a child crate (an example test, in this case), this means that the `Disconnect` variant is moved to the end of the variants list, and all of the other variants now have incorrect relative discriminant data, causing the ICE.

This PR fixes this by sorting manually by variant index after they are decoded. I guess there are alternative ways of fixing this, such as not reusing `module_children_non_reexports` to encode the order-sensitive ADT variants, or to do some sorting in `rustc_resolve`... but none of those seemed particularly satisfying either.

~I really struggled to create a reproduction here -- it required at least 3 crates, one of which is a proc macro, and then some code to actually compute discriminants in the child crate... Needless to say, I failed to repro this in a test, but I can confirm that it fixes the regression in #111483.~ Test exists now.

r? `@petrochenkov` but feel free to reassign. ~Again, sorry for no test, but I hope the explanation at least suggests why a fix like this is likely necessary.~ Feedback is welcome.
2023-05-13 11:05:34 +05:30
..
rustc
rustc_abi Reorder to keep duplicate checks in sync. 2023-05-05 16:30:32 -07:00
rustc_apfloat
rustc_arena Deny the unsafe_op_in_unsafe_fn lint in 2023-04-28 21:00:54 -07:00
rustc_ast Rollup merge of #111215 - BoxyUwU:resolve_anon_consts_differently, r=cjgillot 2023-05-09 20:49:32 +02:00
rustc_ast_lowering Require impl Trait in associated types to appear in method signatures 2023-05-12 10:24:03 +00:00
rustc_ast_passes Add feature gate 2023-05-05 21:44:48 +02:00
rustc_ast_pretty Migrate offset_of from a macro to builtin # syntax 2023-05-05 21:44:13 +02:00
rustc_attr Improve check-cfg diagnostics (part 2) 2023-05-05 13:06:48 +02:00
rustc_baked_icu_data Regen baked data 2023-05-02 10:45:16 -07:00
rustc_borrowck Rollup merge of #110454 - oli-obk:limited_impl_trait_in_assoc_type, r=compiler-errors 2023-05-13 11:05:32 +05:30
rustc_builtin_macros Auto merge of #109732 - Urgau:uplift_drop_forget_ref_lints, r=davidtwco 2023-05-12 12:04:32 +00:00
rustc_codegen_cranelift use EarlyBinder in tcx.(try_)subst_mir_and_normalize_erasing_regions 2023-05-06 22:32:39 -06:00
rustc_codegen_gcc Add todo for filter landing pad 2023-05-07 12:38:47 +01:00
rustc_codegen_llvm Rollup merge of #111375 - rcvalle:rust-cfi-fix-106547, r=bjorn3 2023-05-11 17:43:07 -07:00
rustc_codegen_ssa Rollup merge of #111393 - klensy:win-0.48, r=oli-obk 2023-05-12 07:11:12 +02:00
rustc_const_eval use EarlyBinder in tcx.(try_)subst_mir_and_normalize_erasing_regions 2023-05-06 22:32:39 -06:00
rustc_data_structures Rollup merge of #111393 - klensy:win-0.48, r=oli-obk 2023-05-12 07:11:12 +02:00
rustc_driver
rustc_driver_impl bump windows crate 0.46 -> 0.48 in workspace 2023-05-09 18:20:13 +03:00
rustc_error_codes Rollup merge of #111215 - BoxyUwU:resolve_anon_consts_differently, r=cjgillot 2023-05-09 20:49:32 +02:00
rustc_error_messages Rollup merge of #111104 - Manishearth:icuup, r=compiler-errors 2023-05-03 16:42:50 -07:00
rustc_errors bump windows crate 0.46 -> 0.48 in workspace 2023-05-09 18:20:13 +03:00
rustc_expand Rollup merge of #108801 - fee1-dead-contrib:c-str, r=compiler-errors 2023-05-05 18:40:33 +05:30
rustc_feature Add support for cfg(overflow_checks) 2023-05-11 18:06:31 +04:00
rustc_fluent_macro Remove unused synstructure dep 2023-04-22 22:03:33 +01:00
rustc_fs_util
rustc_graphviz enable rust_2018_idioms for doctests 2023-05-07 00:12:29 +03:00
rustc_hir Require impl Trait in associated types to appear in method signatures 2023-05-12 10:24:03 +00:00
rustc_hir_analysis Add a convenience function 2023-05-12 10:25:34 +00:00
rustc_hir_pretty Rip it out 2023-05-01 16:15:13 +08:00
rustc_hir_typeck Use the opaque_types_defined_by query to cheaply check for whether a hidden type may be registered for an opaque type 2023-05-12 10:26:50 +00:00
rustc_incremental Rollup merge of #111024 - saethlin:stringify-full-svh, r=oli-obk 2023-05-04 08:09:04 +02:00
rustc_index Decorative changes to IndexVec 2023-04-24 13:53:37 +00:00
rustc_infer Rollup merge of #110454 - oli-obk:limited_impl_trait_in_assoc_type, r=compiler-errors 2023-05-13 11:05:32 +05:30
rustc_interface Rollup merge of #111292 - Urgau:check-cfg-issue-111291, r=petrochenkov 2023-05-11 07:05:27 +02:00
rustc_lexer address comments 2023-05-02 10:32:07 +00:00
rustc_lint Auto merge of #109732 - Urgau:uplift_drop_forget_ref_lints, r=davidtwco 2023-05-12 12:04:32 +00:00
rustc_lint_defs Auto merge of #106621 - ozkanonur:enable-elided-lifetimes-for-doctests, r=Mark-Simulacrum 2023-05-08 04:50:28 +00:00
rustc_llvm Usage of atomic counters for llvm code coverage 2023-05-12 01:40:04 +03:00
rustc_log Stabilize IsTerminal 2023-04-10 17:24:23 +09:00
rustc_macros Rollup merge of #111120 - chenyukang:yukang-suggest-let, r=Nilstrieb 2023-05-09 12:33:46 +05:30
rustc_metadata Rollup merge of #111494 - compiler-errors:variant-order, r=petrochenkov 2023-05-13 11:05:34 +05:30
rustc_middle Rollup merge of #111451 - compiler-errors:note-cast-origin, r=b-naber 2023-05-13 11:05:33 +05:30
rustc_mir_build Rollup merge of #108705 - clubby789:refutable-let-closure-borrow, r=cjgillot 2023-05-11 07:05:26 +02:00
rustc_mir_dataflow Auto merge of #110820 - cjgillot:faster-dcp, r=oli-obk 2023-05-10 20:54:31 +00:00
rustc_mir_transform Rollup merge of #111441 - cjgillot:issue-111422, r=JakobDegen 2023-05-12 07:11:13 +02:00
rustc_monomorphize use EarlyBinder in tcx.(try_)subst_mir_and_normalize_erasing_regions 2023-05-06 22:32:39 -06:00
rustc_parse Rollup merge of #111120 - chenyukang:yukang-suggest-let, r=Nilstrieb 2023-05-09 12:33:46 +05:30
rustc_parse_format Fix typos in compiler 2023-04-10 22:02:52 +02:00
rustc_passes Auto merge of #111014 - klensy:no-rc, r=WaffleLapkin 2023-05-04 20:49:23 +00:00
rustc_plugin_impl Add rustc_fluent_macro to decouple fluent from rustc_macros 2023-04-18 18:56:22 +00:00
rustc_privacy Auto merge of #111371 - compiler-errors:revert-110907, r=petrochenkov 2023-05-09 15:16:17 +00:00
rustc_query_impl Remove QueryEngine trait 2023-04-26 07:46:13 +02:00
rustc_query_system Restrict From<S> for {D,Subd}iagnosticMessage. 2023-05-03 08:44:39 +10:00
rustc_resolve Rollup merge of #111460 - clubby789:lowercase-box-self, r=compiler-errors 2023-05-11 17:43:09 -07:00
rustc_serialize Factor out more repeated code in {write,read}_leb128!. 2023-05-04 13:52:14 +10:00
rustc_session Rollup merge of #111096 - AngelicosPhosphoros:overflow_checks_issue_91130, r=petrochenkov 2023-05-13 11:05:33 +05:30
rustc_smir Encode types in SMIR 2023-05-08 14:23:19 +00:00
rustc_span Add support for cfg(overflow_checks) 2023-05-11 18:06:31 +04:00
rustc_symbol_mangling CFI: Fix SIGILL reached via trait objects 2023-05-09 20:04:19 +00:00
rustc_target Rollup merge of #111375 - rcvalle:rust-cfi-fix-106547, r=bjorn3 2023-05-11 17:43:07 -07:00
rustc_trait_selection Note base types of coercion 2023-05-12 00:10:52 +00:00
rustc_traits IAT: Introduce AliasKind::Inherent 2023-05-04 16:59:10 +02:00
rustc_transmute Remove unused TypeFoldable/TypeVisitable impls. 2023-04-26 15:19:50 +10:00
rustc_ty_utils Use the opaque_types_defined_by query to cheaply check for whether a hidden type may be registered for an opaque type 2023-05-12 10:26:50 +00:00
rustc_type_ir Rollup merge of #111366 - obeis:ascribe-user-type-variance, r=lcnr 2023-05-11 17:43:07 -07:00