rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
98.9k stars 12.78k forks source link

Compiling with `overflow-checks = true` is slow and uses high amounts of RAM #117295

Open Zannick opened 1 year ago

Zannick commented 1 year ago

I tried this code:

https://github.com/Zannick/logic-graph/tree/24989d291cd65aa2ba0c22d717ca179a39aeeced/games/AxiomVerge2

Apologies, this is generated code implementing traits for a library in the same repository, and since I don't know what the issue is, I cannot quickly provide a smaller test case. I suspect something relating to traits similar to #117257, #117275, and #116914 but this is complicated by my observation that adding variants to enum SpotId (an associated type used in the trait impls) in graph.rs increases rustc's peak memory usage. Since I'm expecting to roughly quintuple the size of that enum before the project is finished, I'm concerned about being able to track down what is going on (although compilation is quite smooth with overflow-checks disabled).

I expected to see this happen: compilation of the package itself is fast and does not use more memory than running the program will...

Instead, this happened: compilation slows down from 40s to 3m40s and spikes to 33 GiB. With -Z time passes, this section appears after the spikes:

Watching usage by refreshing top: As-is, 836 SpotIds: Spikes (GiB) 32.6, 32.4, 17.7, 17.7 With 820 SpotIds: Spikes (GiB): 30.7, 30.2, 17.7, 17.6

With -Z time passes, this section appears after the spikes:

time:   0.351; rss: 2858MB -> 2878MB (  +20MB)  monomorphization_collector_graph_walk
time:   0.021; rss: 2878MB -> 2878MB (   +0MB)  partition_and_assert_distinct_symbols
time:  78.799; rss: 3492MB -> 2878MB ( -614MB)  generate_crate_metadata
time:   5.878; rss: 2885MB -> 4563MB (+1678MB)  codegen_to_LLVM_IR
time:   5.891; rss: 2878MB -> 4563MB (+1685MB)  codegen_crate

The earlier stage "MIR borrow checking" uses around 9-10GiB and also takes longer when overflow-checks is enabled.

I've also made a thread on the users forum where advice on debugging or reducing this overhead are appreciated: https://users.rust-lang.org/t/how-to-debug-rustc-memory-usage-spikes/100750

Meta

rustc --version --verbose:

$ cargo +nightly --version --verbose
cargo 1.75.0-nightly (df3509237 2023-10-24)
release: 1.75.0-nightly
commit-hash: df3509237935f9418351b77803df7bc05c009b3d
commit-date: 2023-10-24
host: x86_64-unknown-linux-gnu
libgit2: 1.7.1 (sys:0.18.1 vendored)
libcurl: 8.4.0-DEV (sys:0.4.68+curl-8.4.0 vendored ssl:OpenSSL/1.1.1u)
ssl: OpenSSL 1.1.1u  30 May 2023
os: Ubuntu 20.04 (focal) [64-bit]

$ rustc +nightly --version --verbose
rustc 1.75.0-nightly (aa1a71e9e 2023-10-26)
binary: rustc
commit-hash: aa1a71e9e90f6eb3aed8cf79fc80bea304c17ecb
commit-date: 2023-10-26
host: x86_64-unknown-linux-gnu
release: 1.75.0-nightly
LLVM version: 17.0.3

There are some recent rust features used in dependencies so I can't compile to check back more than a handful of stable versions.

overflow-checks = true

``` ~/logic-graph/games/AxiomVerge2$ /usr/bin/time -v cargo +nightly rustc -p axiom_verge2 --lib -- -Z time-passes Compiling axiom_verge2 v0.1.0 (/home/bswolf/logic-graph/games/AxiomVerge2) time: 0.000; rss: 40MB -> 44MB ( +4MB) incr_comp_prepare_session_directory time: 0.854; rss: 46MB -> 497MB ( +451MB) expand_crate time: 0.854; rss: 46MB -> 497MB ( +451MB) macro_expand_crate time: 0.034; rss: 497MB -> 497MB ( +0MB) AST_validation time: 0.002; rss: 497MB -> 498MB ( +1MB) finalize_macro_resolutions time: 0.147; rss: 498MB -> 527MB ( +29MB) late_resolve_crate time: 0.034; rss: 527MB -> 527MB ( +0MB) resolve_check_unused time: 0.066; rss: 527MB -> 527MB ( +0MB) resolve_postprocess time: 0.250; rss: 497MB -> 527MB ( +30MB) resolve_crate time: 0.033; rss: 527MB -> 527MB ( +0MB) prepare_outputs time: 0.036; rss: 527MB -> 527MB ( +0MB) complete_gated_feature_checking time: 0.096; rss: 871MB -> 691MB ( -180MB) drop_ast time: 1.039; rss: 527MB -> 672MB ( +145MB) looking_for_derive_registrar time: 1.251; rss: 527MB -> 672MB ( +145MB) misc_checking_1 time: 0.073; rss: 672MB -> 680MB ( +7MB) type_collecting time: 0.038; rss: 680MB -> 687MB ( +7MB) coherence_checking time: 0.061; rss: 687MB -> 690MB ( +4MB) wf_checking time: 0.011; rss: 690MB -> 695MB ( +4MB) item_types_checking time: 16.638; rss: 672MB -> 1462MB ( +790MB) type_check_crate time: 47.011; rss: 1462MB -> 3880MB (+2418MB) MIR_borrow_checking time: 2.974; rss: 3880MB -> 3492MB ( -388MB) MIR_effect_checking time: 0.353; rss: 3492MB -> 3492MB ( +0MB) module_lints time: 0.353; rss: 3492MB -> 3492MB ( +0MB) lint_checking time: 0.262; rss: 3492MB -> 3492MB ( +0MB) privacy_checking_modules time: 0.668; rss: 3492MB -> 3492MB ( +0MB) misc_checking_3 time: 0.351; rss: 2858MB -> 2878MB ( +20MB) monomorphization_collector_graph_walk time: 0.021; rss: 2878MB -> 2878MB ( +0MB) partition_and_assert_distinct_symbols time: 78.799; rss: 3492MB -> 2878MB ( -614MB) generate_crate_metadata time: 5.878; rss: 2885MB -> 4563MB (+1678MB) codegen_to_LLVM_IR time: 5.891; rss: 2878MB -> 4563MB (+1685MB) codegen_crate time: 0.000; rss: 4563MB -> 4563MB ( +0MB) assert_dep_graph time: 0.000; rss: 4563MB -> 4563MB ( +0MB) incr_comp_persist_dep_graph time: 0.561; rss: 4563MB -> 4524MB ( -39MB) encode_query_results time: 0.569; rss: 4563MB -> 4524MB ( -39MB) incr_comp_serialize_result_cache time: 0.569; rss: 4563MB -> 4524MB ( -39MB) incr_comp_persist_result_cache time: 0.569; rss: 4563MB -> 4524MB ( -39MB) serialize_dep_graph time: 0.204; rss: 4524MB -> 3201MB (-1324MB) free_global_ctxt time: 68.533; rss: 4451MB -> 3199MB (-1252MB) LLVM_passes time: 0.000; rss: 3199MB -> 3196MB ( -3MB) join_worker_thread time: 67.330; rss: 3201MB -> 3196MB ( -4MB) finish_ongoing_codegen time: 0.363; rss: 3183MB -> 946MB (-2238MB) link_rlib time: 0.379; rss: 3183MB -> 946MB (-2238MB) link_binary time: 0.385; rss: 3183MB -> 781MB (-2402MB) link_crate time: 67.715; rss: 3201MB -> 781MB (-2420MB) link time: 222.921; rss: 29MB -> 367MB ( +338MB) total Finished dev [unoptimized + debuginfo] target(s) in 3m 42s warning: the following packages contain code that will be rejected by a future version of Rust: svg v0.7.2 note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1` Command being timed: "cargo +nightly rustc -p axiom_verge2 --lib -- -Z time-passes" User time (seconds): 155.32 System time (seconds): 69.97 Percent of CPU this job got: 101% Elapsed (wall clock) time (h:mm:ss or m:ss): 3:43.00 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 34584552 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 0 Minor (reclaiming a frame) page faults: 43728345 Voluntary context switches: 1154 Involuntary context switches: 277 Swaps: 0 File system inputs: 0 File system outputs: 2448208 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0 ```

overflow-checks = false

``` ~/logic-graph/games/AxiomVerge2$ /usr/bin/time -v cargo +nightly rustc -p axiom_verge2 --lib -- -Z time-passes Compiling axiom_verge2 v0.1.0 (/home/bswolf/logic-graph/games/AxiomVerge2) time: 0.846; rss: 46MB -> 502MB ( +456MB) expand_crate time: 0.846; rss: 46MB -> 502MB ( +456MB) macro_expand_crate time: 0.050; rss: 502MB -> 502MB ( +0MB) AST_validation time: 0.145; rss: 502MB -> 532MB ( +30MB) late_resolve_crate time: 0.034; rss: 532MB -> 532MB ( +0MB) resolve_check_unused time: 0.066; rss: 532MB -> 532MB ( +0MB) resolve_postprocess time: 0.248; rss: 502MB -> 532MB ( +30MB) resolve_crate time: 0.033; rss: 532MB -> 532MB ( +0MB) prepare_outputs time: 0.036; rss: 532MB -> 532MB ( +0MB) complete_gated_feature_checking time: 0.097; rss: 874MB -> 694MB ( -180MB) drop_ast time: 1.013; rss: 532MB -> 675MB ( +142MB) looking_for_derive_registrar time: 1.213; rss: 532MB -> 675MB ( +142MB) misc_checking_1 time: 0.071; rss: 675MB -> 682MB ( +8MB) type_collecting time: 0.039; rss: 682MB -> 690MB ( +7MB) coherence_checking time: 0.063; rss: 690MB -> 697MB ( +7MB) wf_checking time: 0.011; rss: 697MB -> 697MB ( +0MB) item_types_checking time: 16.490; rss: 675MB -> 1468MB ( +794MB) type_check_crate time: 14.551; rss: 1468MB -> 2096MB ( +627MB) MIR_borrow_checking time: 1.111; rss: 2096MB -> 2119MB ( +24MB) MIR_effect_checking time: 0.360; rss: 2119MB -> 2112MB ( -8MB) module_lints time: 0.360; rss: 2119MB -> 2112MB ( -8MB) lint_checking time: 0.262; rss: 2112MB -> 2112MB ( +0MB) privacy_checking_modules time: 0.676; rss: 2119MB -> 2112MB ( -8MB) misc_checking_3 time: 0.242; rss: 2128MB -> 2144MB ( +16MB) monomorphization_collector_graph_walk time: 0.013; rss: 2144MB -> 2144MB ( +0MB) partition_and_assert_distinct_symbols time: 1.301; rss: 2112MB -> 2144MB ( +32MB) generate_crate_metadata time: 0.834; rss: 2148MB -> 2284MB ( +136MB) codegen_to_LLVM_IR time: 0.848; rss: 2144MB -> 2284MB ( +140MB) codegen_crate time: 0.000; rss: 2284MB -> 2284MB ( +0MB) incr_comp_persist_dep_graph time: 0.265; rss: 2284MB -> 2273MB ( -12MB) encode_query_results time: 0.272; rss: 2284MB -> 2273MB ( -12MB) incr_comp_serialize_result_cache time: 0.272; rss: 2284MB -> 2273MB ( -12MB) incr_comp_persist_result_cache time: 0.272; rss: 2284MB -> 2273MB ( -11MB) serialize_dep_graph time: 0.091; rss: 2273MB -> 1228MB (-1045MB) free_global_ctxt time: 0.763; rss: 2168MB -> 1190MB ( -977MB) LLVM_passes time: 0.001; rss: 1158MB -> 1147MB ( -11MB) join_worker_thread time: 0.001; rss: 1147MB -> 1103MB ( -45MB) copy_all_cgu_workproducts_to_incr_comp_cache_dir time: 0.045; rss: 1228MB -> 1103MB ( -125MB) finish_ongoing_codegen time: 0.000; rss: 1079MB -> 1079MB ( +0MB) incr_comp_finalize_session_directory time: 0.000; rss: 1078MB -> 1073MB ( -4MB) link_binary_check_files_are_writeable time: 0.107; rss: 1062MB -> 1101MB ( +39MB) link_rlib time: 0.114; rss: 1078MB -> 1101MB ( +24MB) link_binary time: 0.117; rss: 1078MB -> 982MB ( -95MB) link_crate time: 0.163; rss: 1228MB -> 982MB ( -245MB) link time: 37.925; rss: 29MB -> 146MB ( +116MB) total Finished dev [unoptimized + debuginfo] target(s) in 37.98s warning: the following packages contain code that will be rejected by a future version of Rust: svg v0.7.2 note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1` Command being timed: "cargo +nightly rustc -p axiom_verge2 --lib -- -Z time-passes" User time (seconds): 38.38 System time (seconds): 1.33 Percent of CPU this job got: 104% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:37.98 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 2245232 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 0 Minor (reclaiming a frame) page faults: 375156 Voluntary context switches: 908 Involuntary context switches: 56 Swaps: 0 File system inputs: 0 File system outputs: 818960 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0 ```

Zannick commented 1 year ago

The latest version of my code is at 975 SpotIds, and now uses more RAM than my WSL has available (so it is not possible to build with overflow-checks on anymore). I was able to get a heap trace using heaptrack:

msrdc exe 11_8_2023 10_40_54 PM

Stack trace (with rust mangled names) ``` alloc::alloc::alloc_zeroed::h340c6d4f7d2a1dae in librustc_driver-5a1863ba703f721e.so alloc::alloc::Global::alloc_impl::h562c960d9606a1c7 in librustc_driver-5a1863ba703f721e.so _$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT$::allocate_zeroed::hf24441fbe692e257 in librustc_driver-5a1863ba703f721e.so _RNvMs_NtCscyMe3NAR9lL_5alloc7raw_vecINtB4_6RawVecyE11allocate_inCs5MN4J8h9fJF_18rustc_mir_dataflow in librustc_driver-5a1863ba703f721e.so _RNvMs_NtCscyMe3NAR9lL_5alloc7raw_vecINtB4_6RawVecyE23with_capacity_zeroed_inCs5MN4J8h9fJF_18rustc_mir_dataflow in librustc_driver-5a1863ba703f721e.so _RINvXs_NtNtCscyMe3NAR9lL_5alloc3vec14spec_from_elemyNtB5_12SpecFromElem9from_elemNtNtB9_5alloc6GlobalECs5MN4J8h9fJF_18rustc_mir_dataflow in librustc_driver-5a1863ba703f721e.so _RINvNtCscyMe3NAR9lL_5alloc3vec9from_elemyECs5MN4J8h9fJF_18rustc_mir_dataflow in librustc_driver-5a1863ba703f721e.so _RNvMse_CshpbqGJFNPkR_8smallvecINtB5_8SmallVecAyj2_E9from_elemCs5MN4J8h9fJF_18rustc_mir_dataflow in librustc_driver-5a1863ba703f721e.so _RNvMs_NtCsjatpk81HTFp_11rustc_index7bit_setINtB4_6BitSetNtNtCshhmrbn8irU5_12rustc_middle3mir5LocalE9new_emptyCs5MN4J8h9fJF_18rustc_mir_dataflow in librustc_driver-5a1863ba703f721e.so _RNvXs0_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow5impls16storage_livenessNtB5_16MaybeStorageLiveNtNtB9_9framework14AnalysisDomain12bottom_value in librustc_driver-5a1863ba703f721e.so _RNCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB7_6EngineNtNtNtBb_5impls16storage_liveness16MaybeStorageLiveE3new0Csj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtNtCs7IzIM6SviTH_4core4iter8adapters3map8map_foldNtNtCshhmrbn8irU5_12rustc_middle3mir10BasicBlockINtNtCsjatpk81HTFp_11rustc_index7bit_set6BitSetNtBW_5LocalEuNCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB2M_6EngineNtNtNtB2Q_5impls16storage_liveness16MaybeStorageLiveE3new0NCINvNvNtNtNtB8_6traits8iterator8Iterator8for_each4callB1G_NCINvMsh_NtCscyMe3NAR9lL_5alloc3vecINtB5V_3VecB1G_E14extend_trustedINtB4_3MapIB6S_INtNtNtBa_3ops5range5RangejENvYBU_NtNtB1L_3idx3Idx3newEB2E_EE0E0E0Csj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtNtCs7IzIM6SviTH_4core4iter8adapters3map8map_foldjNtNtCshhmrbn8irU5_12rustc_middle3mir10BasicBlockuNvYBV_NtNtCsjatpk81HTFp_11rustc_index3idx3Idx3newNCIB2_BV_INtNtB1S_7bit_set6BitSetNtBX_5LocalEuNCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB3n_6EngineNtNtNtB3r_5impls16storage_liveness16MaybeStorageLiveE3new0NCINvNvNtNtNtB8_6traits8iterator8Iterator8for_each4callB2E_NCINvMsh_NtCscyMe3NAR9lL_5alloc3vecINtB6w_3VecB2E_E14extend_trustedINtB4_3MapIB7t_INtNtNtBa_3ops5range5RangejEB1I_EB3f_EE0E0E0E0Csj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RINvYINtNtNtCs7IzIM6SviTH_4core3ops5range5RangejENtNtNtNtBa_4iter6traits8iterator8Iterator4folduNCINvNtNtBR_8adapters3map8map_foldjNtNtCshhmrbn8irU5_12rustc_middle3mir10BasicBlockuNvYB25_NtNtCsjatpk81HTFp_11rustc_index3idx3Idx3newNCIB1z_B25_INtNtB33_7bit_set6BitSetNtB27_5LocalEuNCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB4B_6EngineNtNtNtB4F_5impls16storage_liveness16MaybeStorageLiveE3new0NCINvNvBL_8for_each4callB3R_NCINvMsh_NtCscyMe3NAR9lL_5alloc3vecINtB7f_3VecB3R_E14extend_trustedINtB1B_3MapIB8c_B3_B2S_EB4t_EE0E0E0E0ECsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RINvXs0_NtNtNtCs7IzIM6SviTH_4core4iter8adapters3mapINtB6_3MapINtNtNtBc_3ops5range5RangejENvYNtNtCshhmrbn8irU5_12rustc_middle3mir10BasicBlockNtNtCsjatpk81HTFp_11rustc_index3idx3Idx3newENtNtNtBa_6traits8iterator8Iterator4folduNCINvB6_8map_foldB1s_INtNtB2i_7bit_set6BitSetNtB1u_5LocalEuNCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB4F_6EngineNtNtNtB4J_5impls16storage_liveness16MaybeStorageLiveE3new0NCINvNvB2W_8for_each4callB3V_NCINvMsh_NtCscyMe3NAR9lL_5alloc3vecINtB7k_3VecB3V_E14extend_trustedIBO_BN_B4x_EE0E0E0ECsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RINvXs0_NtNtNtCs7IzIM6SviTH_4core4iter8adapters3mapINtB6_3MapIBO_INtNtNtBc_3ops5range5RangejENvYNtNtCshhmrbn8irU5_12rustc_middle3mir10BasicBlockNtNtCsjatpk81HTFp_11rustc_index3idx3Idx3newENCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB38_6EngineNtNtNtB3c_5impls16storage_liveness16MaybeStorageLiveE3new0ENtNtNtBa_6traits8iterator8Iterator4folduNCINvNvB5c_8for_each4callINtNtB2m_7bit_set6BitSetNtB1y_5LocalENCINvMsh_NtCscyMe3NAR9lL_5alloc3vecINtB6Z_3VecB6f_E14extend_trustedBN_E0E0ECsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RINvYINtNtNtNtCs7IzIM6SviTH_4core4iter8adapters3map3MapIB4_INtNtNtBc_3ops5range5RangejENvYNtNtCshhmrbn8irU5_12rustc_middle3mir10BasicBlockNtNtCsjatpk81HTFp_11rustc_index3idx3Idx3newENCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB32_6EngineNtNtNtB36_5impls16storage_liveness16MaybeStorageLiveE3new0ENtNtNtBa_6traits8iterator8Iterator8for_eachNCINvMsh_NtCscyMe3NAR9lL_5alloc3vecINtB5W_3VecINtNtB2g_7bit_set6BitSetNtB1s_5LocalEE14extend_trustedB3_E0ECsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RINvMsh_NtCscyMe3NAR9lL_5alloc3vecINtB6_3VecINtNtCsjatpk81HTFp_11rustc_index7bit_set6BitSetNtNtCshhmrbn8irU5_12rustc_middle3mir5LocalEE14extend_trustedINtNtNtNtCs7IzIM6SviTH_4core4iter8adapters3map3MapIB2q_INtNtNtB2y_3ops5range5RangejENvYNtB1t_10BasicBlockNtNtBL_3idx3Idx3newENCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB4y_6EngineNtNtNtB4C_5impls16storage_liveness16MaybeStorageLiveE3new0EECsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RNvXs_NtNtCscyMe3NAR9lL_5alloc3vec11spec_extendINtB6_3VecINtNtCsjatpk81HTFp_11rustc_index7bit_set6BitSetNtNtCshhmrbn8irU5_12rustc_middle3mir5LocalEEINtB4_10SpecExtendBT_INtNtNtNtCs7IzIM6SviTH_4core4iter8adapters3map3MapIB2I_INtNtNtB2Q_3ops5range5RangejENvYNtB1G_10BasicBlockNtNtBY_3idx3Idx3newENCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB4Q_6EngineNtNtNtB4U_5impls16storage_liveness16MaybeStorageLiveE3new0EE11spec_extendCsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RNvXs_NtNtCscyMe3NAR9lL_5alloc3vec21spec_from_iter_nestedINtB6_3VecINtNtCsjatpk81HTFp_11rustc_index7bit_set6BitSetNtNtCshhmrbn8irU5_12rustc_middle3mir5LocalEEINtB4_18SpecFromIterNestedB13_INtNtNtNtCs7IzIM6SviTH_4core4iter8adapters3map3MapIB31_INtNtNtB39_3ops5range5RangejENvYNtB1Q_10BasicBlockNtNtB18_3idx3Idx3newENCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB5a_6EngineNtNtNtB5e_5impls16storage_liveness16MaybeStorageLiveE3new0EE9from_iterCsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RNvXNtNtCscyMe3NAR9lL_5alloc3vec14spec_from_iterINtB4_3VecINtNtCsjatpk81HTFp_11rustc_index7bit_set6BitSetNtNtCshhmrbn8irU5_12rustc_middle3mir5LocalEEINtB2_12SpecFromIterBU_INtNtNtNtCs7IzIM6SviTH_4core4iter8adapters3map3MapIB2L_INtNtNtB2T_3ops5range5RangejENvYNtB1H_10BasicBlockNtNtBZ_3idx3Idx3newENCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB4T_6EngineNtNtNtB4X_5impls16storage_liveness16MaybeStorageLiveE3new0EE9from_iterCsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RINvXsc_NtCscyMe3NAR9lL_5alloc3vecINtB6_3VecINtNtCsjatpk81HTFp_11rustc_index7bit_set6BitSetNtNtCshhmrbn8irU5_12rustc_middle3mir5LocalEEINtNtNtNtCs7IzIM6SviTH_4core4iter6traits7collect12FromIteratorBG_E9from_iterINtNtNtB2g_8adapters3map3MapIB3o_INtNtNtB2i_3ops5range5RangejENvYNtB1t_10BasicBlockNtNtBL_3idx3Idx3newENCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB5a_6EngineNtNtNtB5e_5impls16storage_liveness16MaybeStorageLiveE3new0EECsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RINvYINtNtNtNtCs7IzIM6SviTH_4core4iter8adapters3map3MapIB4_INtNtNtBc_3ops5range5RangejENvYNtNtCshhmrbn8irU5_12rustc_middle3mir10BasicBlockNtNtCsjatpk81HTFp_11rustc_index3idx3Idx3newENCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB32_6EngineNtNtNtB36_5impls16storage_liveness16MaybeStorageLiveE3new0ENtNtNtBa_6traits8iterator8Iterator7collectINtNtCscyMe3NAR9lL_5alloc3vec3VecINtNtB2g_7bit_set6BitSetNtB1s_5LocalEEECsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RINvMNtCsjatpk81HTFp_11rustc_index3vecINtB3_8IndexVecNtNtCshhmrbn8irU5_12rustc_middle3mir10BasicBlockINtNtB5_7bit_set6BitSetNtBR_5LocalEE9from_fn_nNCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB2t_6EngineNtNtNtB2x_5impls16storage_liveness16MaybeStorageLiveE3new0ECsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB5_6EngineNtNtNtB9_5impls16storage_liveness16MaybeStorageLiveE3newCsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RNvMs2_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB5_6EngineNtNtNtB9_5impls16storage_liveness16MaybeStorageLiveE12new_gen_killCsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RNvXs1_NtCs5MN4J8h9fJF_18rustc_mir_dataflow9frameworkNtNtNtB7_5impls16storage_liveness16MaybeStorageLiveNtB5_8Analysis11into_engineCsj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so _RNvXNtNtCsj7pHd1IXyO8_16rustc_const_eval9transform8validateNtB2_9ValidatorNtNtCshhmrbn8irU5_12rustc_middle3mir7MirPass8run_pass in librustc_driver-5a1863ba703f721e.so _RNvNtCsbynrWkb32PA_19rustc_mir_transform12pass_manager13validate_body in librustc_driver-5a1863ba703f721e.so _RNvNtCsbynrWkb32PA_19rustc_mir_transform12pass_manager16run_passes_inner in librustc_driver-5a1863ba703f721e.so _RNvNtCsbynrWkb32PA_19rustc_mir_transform12pass_manager10run_passes in librustc_driver-5a1863ba703f721e.so _RNvCsbynrWkb32PA_19rustc_mir_transform23run_optimization_passes in librustc_driver-5a1863ba703f721e.so _RNvCsbynrWkb32PA_19rustc_mir_transform19inner_optimized_mir in librustc_driver-5a1863ba703f721e.so _RNvCsbynrWkb32PA_19rustc_mir_transform13optimized_mir in librustc_driver-5a1863ba703f721e.so _RNCNCNvNtNtCs6Q1ZEFNLnxl_16rustc_query_impl10query_impl13optimized_mir13dynamic_querys0_00B9_ in librustc_driver-5a1863ba703f721e.so _RINvNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing28___rust_begin_short_backtraceNCNCNvNtNtB4_10query_impl13optimized_mir13dynamic_querys0_00INtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_EEB4_ in librustc_driver-5a1863ba703f721e.so _RNCNvNtNtCs6Q1ZEFNLnxl_16rustc_query_impl10query_impl13optimized_mir13dynamic_querys0_0B7_ in librustc_driver-5a1863ba703f721e.so _RNvYNCNvNtNtCs6Q1ZEFNLnxl_16rustc_query_impl10query_impl13optimized_mir13dynamic_querys0_0INtNtNtCs7IzIM6SviTH_4core3ops8function6FnOnceTNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context6TyCtxtNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdEE9call_onceBa_ in librustc_driver-5a1863ba703f721e.so _RNCNCINvMs2_NtNtCseVGtbWHxry9_18rustc_query_system9dep_graph5graphINtBa_12DepGraphDataNtNtCshhmrbn8irU5_12rustc_middle9dep_graph8DepsTypeE9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB2r_13DynamicConfigINtNtNtBe_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB1q_5query5erase6ErasedAhj8_EEKb0_KB5w_KB5w_EEB4d_B4U_E00B2r_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCNCINvMs2_NtNtCseVGtbWHxry9_18rustc_query_system9dep_graph5graphINtB1h_12DepGraphDataNtNtBa_9dep_graph8DepsTypeE9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB3a_13DynamicConfigINtNtNtB1l_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtBa_5query5erase6ErasedAhj8_EEKb0_KB6f_KB6f_EEB4X_B5E_E00B5E_E0B3a_ in librustc_driver-5a1863ba703f721e.so _RINvMs2_NtNtCsgIvBXrcXzSU_3std6thread5localINtB6_8LocalKeyINtNtCs7IzIM6SviTH_4core4cell4CellPuEE8try_withNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCNCINvMs2_NtNtCseVGtbWHxry9_18rustc_query_system9dep_graph5graphINtB2X_12DepGraphDataNtNtB1Q_9dep_graph8DepsTypeE9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB4R_13DynamicConfigINtNtNtB31_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB1Q_5query5erase6ErasedAhj8_EEKb0_KB7X_KB7X_EEB6E_B7l_E00B7l_E0B7l_EB4R_ in librustc_driver-5a1863ba703f721e.so _RINvMs2_NtNtCsgIvBXrcXzSU_3std6thread5localINtB6_8LocalKeyINtNtCs7IzIM6SviTH_4core4cell4CellPuEE4withNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCNCINvMs2_NtNtCseVGtbWHxry9_18rustc_query_system9dep_graph5graphINtB2T_12DepGraphDataNtNtB1M_9dep_graph8DepsTypeE9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB4N_13DynamicConfigINtNtNtB2X_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB1M_5query5erase6ErasedAhj8_EEKb0_KB7T_KB7T_EEB6A_B7h_E00B7h_E0B7h_EB4N_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCNCINvMs2_NtNtCseVGtbWHxry9_18rustc_query_system9dep_graph5graphINtB1f_12DepGraphDataNtNtB8_9dep_graph8DepsTypeE9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB38_13DynamicConfigINtNtNtB1j_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB8_5query5erase6ErasedAhj8_EEKb0_KB6d_KB6d_EEB4V_B5C_E00B5C_EB38_ in librustc_driver-5a1863ba703f721e.so _RNCINvXNtCshhmrbn8irU5_12rustc_middle9dep_graphNtB5_8DepsTypeNtNtCseVGtbWHxry9_18rustc_query_system9dep_graph4Deps9with_depsNCNCINvMs2_NtBZ_5graphINtB29_12DepGraphDataBJ_E9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB2Y_13DynamicConfigINtNtNtB11_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB7_5query5erase6ErasedAhj8_EEKb0_KB63_KB63_EEB4L_B5s_E00B5s_E0B2Y_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls12with_contextNCINvXNtBa_9dep_graphNtB1b_8DepsTypeNtNtCseVGtbWHxry9_18rustc_query_system9dep_graph4Deps9with_depsNCNCINvMs2_NtB1H_5graphINtB2R_12DepGraphDataB1q_E9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB3I_13DynamicConfigINtNtNtB1J_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtBa_5query5erase6ErasedAhj8_EEKb0_KB6N_KB6N_EEB5v_B6c_E00B6c_E0B6c_E0B3I_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls16with_context_optNCINvB2_12with_contextNCINvXNtB8_9dep_graphNtB1z_8DepsTypeNtNtCseVGtbWHxry9_18rustc_query_system9dep_graph4Deps9with_depsNCNCINvMs2_NtB25_5graphINtB3f_12DepGraphDataB1O_E9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB46_13DynamicConfigINtNtNtB27_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB8_5query5erase6ErasedAhj8_EEKb0_KB7b_KB7b_EEB5T_B6A_E00B6A_E0B6A_E0B6A_EB46_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls12with_contextNCINvXNtB8_9dep_graphNtB19_8DepsTypeNtNtCseVGtbWHxry9_18rustc_query_system9dep_graph4Deps9with_depsNCNCINvMs2_NtB1F_5graphINtB2P_12DepGraphDataB1o_E9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB3G_13DynamicConfigINtNtNtB1H_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB8_5query5erase6ErasedAhj8_EEKb0_KB6L_KB6L_EEB5t_B6a_E00B6a_E0B6a_EB3G_ in librustc_driver-5a1863ba703f721e.so _RINvXNtCshhmrbn8irU5_12rustc_middle9dep_graphNtB3_8DepsTypeNtNtCseVGtbWHxry9_18rustc_query_system9dep_graph4Deps9with_depsNCNCINvMs2_NtBX_5graphINtB27_12DepGraphDataBH_E9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB2W_13DynamicConfigINtNtNtBZ_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB5_5query5erase6ErasedAhj8_EEKb0_KB60_KB60_EEB4I_B5p_E00B5p_EB2W_ in librustc_driver-5a1863ba703f721e.so _RNCINvMs2_NtNtCseVGtbWHxry9_18rustc_query_system9dep_graph5graphINtB8_12DepGraphDataNtNtCshhmrbn8irU5_12rustc_middle9dep_graph8DepsTypeE9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB2p_13DynamicConfigINtNtNtBc_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB1o_5query5erase6ErasedAhj8_EEKb0_KB5u_KB5u_EEB4b_B4S_E0B2p_ in librustc_driver-5a1863ba703f721e.so _RINvMs2_NtNtCseVGtbWHxry9_18rustc_query_system9dep_graph5graphINtB6_12DepGraphDataNtNtCshhmrbn8irU5_12rustc_middle9dep_graph8DepsTypeE9with_taskTNtNtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbing9QueryCtxtINtB2n_13DynamicConfigINtNtNtBa_5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB1m_5query5erase6ErasedAhj8_EEKb0_KB5s_KB5s_EEB49_B4Q_EB2n_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtCseVGtbWHxry9_18rustc_query_system5query8plumbing16execute_job_incrINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB6_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_EEKb0_KB4b_KB4b_ENtNtB1g_8plumbing9QueryCtxtEs0_0B1g_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCINvNtNtCseVGtbWHxry9_18rustc_query_system5query8plumbing16execute_job_incrINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB1d_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtBa_5query5erase6ErasedAhj8_EEKb0_KB4U_KB4U_ENtNtB2n_8plumbing9QueryCtxtEs0_0TB4j_NtNtNtB1f_9dep_graph5graph12DepNodeIndexEE0B2n_ in librustc_driver-5a1863ba703f721e.so _RINvMs2_NtNtCsgIvBXrcXzSU_3std6thread5localINtB6_8LocalKeyINtNtCs7IzIM6SviTH_4core4cell4CellPuEE8try_withNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCINvNtNtCseVGtbWHxry9_18rustc_query_system5query8plumbing16execute_job_incrINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB2T_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB1Q_5query5erase6ErasedAhj8_EEKb0_KB6B_KB6B_ENtNtB43_8plumbing9QueryCtxtEs0_0TB5Z_NtNtNtB2V_9dep_graph5graph12DepNodeIndexEE0B7l_EB43_ in librustc_driver-5a1863ba703f721e.so _RINvMs2_NtNtCsgIvBXrcXzSU_3std6thread5localINtB6_8LocalKeyINtNtCs7IzIM6SviTH_4core4cell4CellPuEE4withNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCINvNtNtCseVGtbWHxry9_18rustc_query_system5query8plumbing16execute_job_incrINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB2P_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB1M_5query5erase6ErasedAhj8_EEKb0_KB6x_KB6x_ENtNtB3Z_8plumbing9QueryCtxtEs0_0TB5V_NtNtNtB2R_9dep_graph5graph12DepNodeIndexEE0B7h_EB3Z_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCINvNtNtCseVGtbWHxry9_18rustc_query_system5query8plumbing16execute_job_incrINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB1b_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtB8_5query5erase6ErasedAhj8_EEKb0_KB4S_KB4S_ENtNtB2l_8plumbing9QueryCtxtEs0_0TB4h_NtNtNtB1d_9dep_graph5graph12DepNodeIndexEEB2l_ in librustc_driver-5a1863ba703f721e.so _RNCINvXs1_NtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbingNtB8_9QueryCtxtNtNtCseVGtbWHxry9_18rustc_query_system5query12QueryContext11start_queryTINtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_ENtNtNtB18_9dep_graph5graph12DepNodeIndexENCINvNtB16_8plumbing16execute_job_incrINtBa_13DynamicConfigINtNtB16_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdB2e_EKb0_KB65_KB65_EBP_Es0_0E0Ba_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls20with_related_contextNCINvXs1_NtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbingNtB1m_9QueryCtxtNtNtCseVGtbWHxry9_18rustc_query_system5query12QueryContext11start_queryTINtNtNtBa_5query5erase6ErasedAhj8_ENtNtNtB2n_9dep_graph5graph12DepNodeIndexENCINvNtB2l_8plumbing16execute_job_incrINtB1o_13DynamicConfigINtNtB2l_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdB3t_EKb0_KB6W_KB6W_EB23_Es0_0E0B3s_E0B1o_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls12with_contextNCINvB4_20with_related_contextNCINvXs1_NtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbingNtB1I_9QueryCtxtNtNtCseVGtbWHxry9_18rustc_query_system5query12QueryContext11start_queryTINtNtNtBa_5query5erase6ErasedAhj8_ENtNtNtB2J_9dep_graph5graph12DepNodeIndexENCINvNtB2H_8plumbing16execute_job_incrINtB1K_13DynamicConfigINtNtB2H_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdB3P_EKb0_KB7i_KB7i_EB2p_Es0_0E0B3O_E0B3O_E0B1K_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls16with_context_optNCINvB2_12with_contextNCINvB2_20with_related_contextNCINvXs1_NtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbingNtB26_9QueryCtxtNtNtCseVGtbWHxry9_18rustc_query_system5query12QueryContext11start_queryTINtNtNtB8_5query5erase6ErasedAhj8_ENtNtNtB37_9dep_graph5graph12DepNodeIndexENCINvNtB35_8plumbing16execute_job_incrINtB28_13DynamicConfigINtNtB35_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdB4d_EKb0_KB7G_KB7G_EB2N_Es0_0E0B4c_E0B4c_E0B4c_EB28_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls12with_contextNCINvB2_20with_related_contextNCINvXs1_NtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbingNtB1G_9QueryCtxtNtNtCseVGtbWHxry9_18rustc_query_system5query12QueryContext11start_queryTINtNtNtB8_5query5erase6ErasedAhj8_ENtNtNtB2H_9dep_graph5graph12DepNodeIndexENCINvNtB2F_8plumbing16execute_job_incrINtB1I_13DynamicConfigINtNtB2F_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdB3N_EKb0_KB7g_KB7g_EB2n_Es0_0E0B3M_E0B3M_EB1I_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls20with_related_contextNCINvXs1_NtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbingNtB1k_9QueryCtxtNtNtCseVGtbWHxry9_18rustc_query_system5query12QueryContext11start_queryTINtNtNtB8_5query5erase6ErasedAhj8_ENtNtNtB2l_9dep_graph5graph12DepNodeIndexENCINvNtB2j_8plumbing16execute_job_incrINtB1m_13DynamicConfigINtNtB2j_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdB3r_EKb0_KB6U_KB6U_EB21_Es0_0E0B3q_EB1m_ in librustc_driver-5a1863ba703f721e.so _RINvXs1_NtCs6Q1ZEFNLnxl_16rustc_query_impl8plumbingNtB6_9QueryCtxtNtNtCseVGtbWHxry9_18rustc_query_system5query12QueryContext11start_queryTINtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_ENtNtNtB16_9dep_graph5graph12DepNodeIndexENCINvNtB14_8plumbing16execute_job_incrINtB8_13DynamicConfigINtNtB14_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdB2c_EKb0_KB63_KB63_EBN_Es0_0EB8_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtCseVGtbWHxry9_18rustc_query_system5query8plumbing16execute_job_incrINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB4_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_EEKb0_KB49_KB49_ENtNtB1e_8plumbing9QueryCtxtEB1e_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtCseVGtbWHxry9_18rustc_query_system5query8plumbing11execute_jobINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB4_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_EEKb0_KB44_KB44_ENtNtB19_8plumbing9QueryCtxtKb1_EB19_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtCseVGtbWHxry9_18rustc_query_system5query8plumbing17try_execute_queryINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB4_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_EEKb0_KB4a_KB4a_ENtNtB1f_8plumbing9QueryCtxtKb1_EB1f_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtCseVGtbWHxry9_18rustc_query_system5query8plumbing14get_query_incrINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB6_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_EEKb0_KB49_KB49_ENtNtB1e_8plumbing9QueryCtxtE0B1e_ in librustc_driver-5a1863ba703f721e.so _RINvCshbDRVuloQ4_7stacker10maybe_growTINtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_EINtNtCs7IzIM6SviTH_4core6option6OptionNtNtNtCseVGtbWHxry9_18rustc_query_system9dep_graph5graph12DepNodeIndexEENCINvNtNtB2g_5query8plumbing14get_query_incrINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB3r_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdBA_EKb0_KB66_KB66_ENtNtB45_8plumbing9QueryCtxtE0EB45_ in librustc_driver-5a1863ba703f721e.so _RINvNtCs5zwKCclelum_21rustc_data_structures5stack23ensure_sufficient_stackTINtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_EINtNtCs7IzIM6SviTH_4core6option6OptionNtNtNtCseVGtbWHxry9_18rustc_query_system9dep_graph5graph12DepNodeIndexEENCINvNtNtB2R_5query8plumbing14get_query_incrINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB42_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdB1b_EKb0_KB6I_KB6I_ENtNtB4G_8plumbing9QueryCtxtE0EB4G_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtCseVGtbWHxry9_18rustc_query_system5query8plumbing14get_query_incrINtCs6Q1ZEFNLnxl_16rustc_query_impl13DynamicConfigINtNtB4_6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtNtCshhmrbn8irU5_12rustc_middle5query5erase6ErasedAhj8_EEKb0_KB47_KB47_ENtNtB1c_8plumbing9QueryCtxtEB1c_ in librustc_driver-5a1863ba703f721e.so _RNvNtNtNtCs6Q1ZEFNLnxl_16rustc_query_impl10query_impl13optimized_mir14get_query_incr26___rust_end_short_backtrace in librustc_driver-5a1863ba703f721e.so _RINvNtNtCshhmrbn8irU5_12rustc_middle5query8plumbing12query_get_atINtNtNtCseVGtbWHxry9_18rustc_query_system5query6caches12DefaultCacheNtNtCsatIe0WbCZ4X_10rustc_span6def_id5DefIdINtNtB4_5erase6ErasedAhj8_EEECs9DsMBy8Q6Vt_14rustc_metadata in librustc_driver-5a1863ba703f721e.so _RINvMs2_NtCshhmrbn8irU5_12rustc_middle5queryNtNtB6_8plumbing8TyCtxtAt13optimized_mirNtNtCsatIe0WbCZ4X_10rustc_span6def_id10LocalDefIdECs9DsMBy8Q6Vt_14rustc_metadata in librustc_driver-5a1863ba703f721e.so _RINvMs1_NtCshhmrbn8irU5_12rustc_middle5queryNtNtNtB8_2ty7context6TyCtxt13optimized_mirNtNtCsatIe0WbCZ4X_10rustc_span6def_id10LocalDefIdECs9DsMBy8Q6Vt_14rustc_metadata in librustc_driver-5a1863ba703f721e.so _RNvMsd_NtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoderNtB5_13EncodeContext10encode_mir in librustc_driver-5a1863ba703f721e.so _RNCNvMsc_NtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoderNtB7_13EncodeContext17encode_crate_rootsd_0Bb_ in librustc_driver-5a1863ba703f721e.so _RNvMsc_NtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoderNtB5_13EncodeContext17encode_crate_root in librustc_driver-5a1863ba703f721e.so _RNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder20encode_metadata_impl in librustc_driver-5a1863ba703f721e.so _RNCNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder15encode_metadata0B7_ in librustc_driver-5a1863ba703f721e.so _RNvXsl_NtNtCs7IzIM6SviTH_4core5panic11unwind_safeINtB5_16AssertUnwindSafeNCNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder15encode_metadata0EINtNtNtB9_3ops8function6FnOnceuE9call_onceB1h_ in librustc_driver-5a1863ba703f721e.so _RINvNvNtCsgIvBXrcXzSU_3std9panicking3try7do_callINtNtNtCs7IzIM6SviTH_4core5panic11unwind_safe16AssertUnwindSafeNCNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder15encode_metadata0EuEB1T_ in librustc_driver-5a1863ba703f721e.so _RINvNtCsgIvBXrcXzSU_3std9panicking3tryuINtNtNtCs7IzIM6SviTH_4core5panic11unwind_safe16AssertUnwindSafeNCNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder15encode_metadata0EEB1K_ in librustc_driver-5a1863ba703f721e.so _RINvMNtNtCs5zwKCclelum_21rustc_data_structures4sync8parallelNtB3_13ParallelGuard3runuNCNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder15encode_metadata0EB1t_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtNtCs5zwKCclelum_21rustc_data_structures4sync8parallel8disabled4joinNCNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder15encode_metadata0NCB1f_s_0uuE0B1l_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtCs5zwKCclelum_21rustc_data_structures4sync8parallel14parallel_guardTINtNtCs7IzIM6SviTH_4core6option6OptionuEB1c_ENCINvNtB2_8disabled4joinNCNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder15encode_metadata0NCB2l_s_0uuE0EB2r_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtNtCs5zwKCclelum_21rustc_data_structures4sync8parallel8disabled4joinNCNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder15encode_metadata0NCB1d_s_0uuEB1j_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtNtCs5zwKCclelum_21rustc_data_structures4sync8parallel7enabled4joinNCNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder15encode_metadata0NCB1c_s_0uuEB1i_ in librustc_driver-5a1863ba703f721e.so _RNvNtNtCs9DsMBy8Q6Vt_14rustc_metadata5rmeta7encoder15encode_metadata in librustc_driver-5a1863ba703f721e.so _RNvNtCs9DsMBy8Q6Vt_14rustc_metadata2fs25encode_and_write_metadata in librustc_driver-5a1863ba703f721e.so _RNvNtCse6tXywgNo7E_15rustc_interface6passes13start_codegen in librustc_driver-5a1863ba703f721e.so _RNCNvMs3_NtCse6tXywgNo7E_15rustc_interface7queriesNtB7_7Queries15ongoing_codegen0B9_ in librustc_driver-5a1863ba703f721e.so _RNCINvMs7_NtNtCshhmrbn8irU5_12rustc_middle2ty7contextNtB8_10GlobalCtxt5enterNCNvMs3_NtCse6tXywgNo7E_15rustc_interface7queriesNtB1k_7Queries15ongoing_codegen0INtNtCs7IzIM6SviTH_4core6result6ResultINtNtCscyMe3NAR9lL_5alloc5boxed3BoxDNtNtB2A_3any3AnyEL_ENtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedEE0B1m_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCINvMs7_B6_NtB6_10GlobalCtxt5enterNCNvMs3_NtCse6tXywgNo7E_15rustc_interface7queriesNtB1N_7Queries15ongoing_codegen0INtNtCs7IzIM6SviTH_4core6result6ResultINtNtCscyMe3NAR9lL_5alloc5boxed3BoxDNtNtB33_3any3AnyEL_ENtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedEE0B2Y_E0B1P_ in librustc_driver-5a1863ba703f721e.so _RINvMs2_NtNtCsgIvBXrcXzSU_3std6thread5localINtB6_8LocalKeyINtNtCs7IzIM6SviTH_4core4cell4CellPuEE8try_withNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCINvMs7_B1M_NtB1M_10GlobalCtxt5enterNCNvMs3_NtCse6tXywgNo7E_15rustc_interface7queriesNtB3v_7Queries15ongoing_codegen0INtNtBZ_6result6ResultINtNtCscyMe3NAR9lL_5alloc5boxed3BoxDNtNtBZ_3any3AnyEL_ENtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedEE0B4G_E0B4G_EB3x_ in librustc_driver-5a1863ba703f721e.so _RINvMs2_NtNtCsgIvBXrcXzSU_3std6thread5localINtB6_8LocalKeyINtNtCs7IzIM6SviTH_4core4cell4CellPuEE4withNCINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCINvMs7_B1I_NtB1I_10GlobalCtxt5enterNCNvMs3_NtCse6tXywgNo7E_15rustc_interface7queriesNtB3r_7Queries15ongoing_codegen0INtNtBZ_6result6ResultINtNtCscyMe3NAR9lL_5alloc5boxed3BoxDNtNtBZ_3any3AnyEL_ENtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedEE0B4C_E0B4C_EB3t_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtNtCshhmrbn8irU5_12rustc_middle2ty7context3tls13enter_contextNCINvMs7_B4_NtB4_10GlobalCtxt5enterNCNvMs3_NtCse6tXywgNo7E_15rustc_interface7queriesNtB1L_7Queries15ongoing_codegen0INtNtCs7IzIM6SviTH_4core6result6ResultINtNtCscyMe3NAR9lL_5alloc5boxed3BoxDNtNtB31_3any3AnyEL_ENtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedEE0B2W_EB1N_ in librustc_driver-5a1863ba703f721e.so _RINvMs7_NtNtCshhmrbn8irU5_12rustc_middle2ty7contextNtB6_10GlobalCtxt5enterNCNvMs3_NtCse6tXywgNo7E_15rustc_interface7queriesNtB1i_7Queries15ongoing_codegen0INtNtCs7IzIM6SviTH_4core6result6ResultINtNtCscyMe3NAR9lL_5alloc5boxed3BoxDNtNtB2y_3any3AnyEL_ENtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedEEB1k_ in librustc_driver-5a1863ba703f721e.so _RNvMs3_NtCse6tXywgNo7E_15rustc_interface7queriesNtB5_7Queries15ongoing_codegen in librustc_driver-5a1863ba703f721e.so _RNCNCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0s0_0B5_ in librustc_driver-5a1863ba703f721e.so _RINvMs5_NtCse6tXywgNo7E_15rustc_interface7queriesNtNtB8_9interface8Compiler5enterNCNCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0s0_0INtNtCs7IzIM6SviTH_4core6result6ResultINtNtB2k_6option6OptionNtB6_6LinkerENtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedEEB1n_ in librustc_driver-5a1863ba703f721e.so _RNCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0B3_ in librustc_driver-5a1863ba703f721e.so _RNCNCINvNtCse6tXywgNo7E_15rustc_interface9interface12run_compilerINtNtCs7IzIM6SviTH_4core6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E00B2s_ in librustc_driver-5a1863ba703f721e.so _RINvCsatIe0WbCZ4X_10rustc_span14set_source_mapINtNtCs7IzIM6SviTH_4core6result6ResultuNtB2_15ErrorGuaranteedENCNCINvNtCse6tXywgNo7E_15rustc_interface9interface12run_compilerBI_NCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E00EB2R_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtCse6tXywgNo7E_15rustc_interface9interface12run_compilerINtNtCs7IzIM6SviTH_4core6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B2q_ in librustc_driver-5a1863ba703f721e.so _RNCINvNtCse6tXywgNo7E_15rustc_interface4util31run_in_thread_pool_with_globalsNCINvNtB6_9interface12run_compilerINtNtCs7IzIM6SviTH_4core6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B1L_E0B3c_ in librustc_driver-5a1863ba703f721e.so _RINvMs_CscYwdxnElk6L_10scoped_tlsINtB5_9ScopedKeyNtCsatIe0WbCZ4X_10rustc_span14SessionGlobalsE3setNCINvNtCse6tXywgNo7E_15rustc_interface4util31run_in_thread_pool_with_globalsNCINvNtB1F_9interface12run_compilerINtNtCs7IzIM6SviTH_4core6result6ResultuNtBN_15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B3l_E0B3l_EB4p_ in librustc_driver-5a1863ba703f721e.so _RINvCsatIe0WbCZ4X_10rustc_span27create_session_globals_thenINtNtCs7IzIM6SviTH_4core6result6ResultuNtB2_15ErrorGuaranteedENCINvNtCse6tXywgNo7E_15rustc_interface4util31run_in_thread_pool_with_globalsNCINvNtB22_9interface12run_compilerBV_NCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0BV_E0EB3P_ in librustc_driver-5a1863ba703f721e.so _RNCNCINvNtCse6tXywgNo7E_15rustc_interface4util26run_in_thread_with_globalsNCINvB6_31run_in_thread_pool_with_globalsNCINvNtB8_9interface12run_compilerINtNtCs7IzIM6SviTH_4core6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B2n_E0B2n_E00B3O_ in librustc_driver-5a1863ba703f721e.so _RINvNtNtCsgIvBXrcXzSU_3std10sys_common9backtrace28___rust_begin_short_backtraceNCNCINvNtCse6tXywgNo7E_15rustc_interface4util26run_in_thread_with_globalsNCINvB1m_31run_in_thread_pool_with_globalsNCINvNtB1o_9interface12run_compilerINtNtCs7IzIM6SviTH_4core6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B3F_E0B3F_E00B3F_EB56_ in librustc_driver-5a1863ba703f721e.so _RNCNCINvMNtCsgIvBXrcXzSU_3std6threadNtB7_7Builder16spawn_unchecked_NCNCINvNtCse6tXywgNo7E_15rustc_interface4util26run_in_thread_with_globalsNCINvB1a_31run_in_thread_pool_with_globalsNCINvNtB1c_9interface12run_compilerINtNtCs7IzIM6SviTH_4core6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B3t_E0B3t_E00B3t_Es_00B4U_ in librustc_driver-5a1863ba703f721e.so _RNvXsl_NtNtCs7IzIM6SviTH_4core5panic11unwind_safeINtB5_16AssertUnwindSafeNCNCINvMNtCsgIvBXrcXzSU_3std6threadNtB1h_7Builder16spawn_unchecked_NCNCINvNtCse6tXywgNo7E_15rustc_interface4util26run_in_thread_with_globalsNCINvB2l_31run_in_thread_pool_with_globalsNCINvNtB2n_9interface12run_compilerINtNtB9_6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B4E_E0B4E_E00B4E_Es_00EINtNtNtB9_3ops8function6FnOnceuE9call_onceB5P_ in librustc_driver-5a1863ba703f721e.so _RINvNvNtCsgIvBXrcXzSU_3std9panicking3try7do_callINtNtNtCs7IzIM6SviTH_4core5panic11unwind_safe16AssertUnwindSafeNCNCINvMNtB6_6threadNtB1T_7Builder16spawn_unchecked_NCNCINvNtCse6tXywgNo7E_15rustc_interface4util26run_in_thread_with_globalsNCINvB2I_31run_in_thread_pool_with_globalsNCINvNtB2K_9interface12run_compilerINtNtBR_6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B51_E0B51_E00B51_Es_00EB51_EB6c_ in librustc_driver-5a1863ba703f721e.so _RINvNtCsgIvBXrcXzSU_3std9panicking3tryINtNtCs7IzIM6SviTH_4core6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedEINtNtNtBF_5panic11unwind_safe16AssertUnwindSafeNCNCINvMNtB4_6threadNtB2Q_7Builder16spawn_unchecked_NCNCINvNtCse6tXywgNo7E_15rustc_interface4util26run_in_thread_with_globalsNCINvB3F_31run_in_thread_pool_with_globalsNCINvNtB3H_9interface12run_compilerBA_NCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0BA_E0BA_E00BA_Es_00EEB65_ in librustc_driver-5a1863ba703f721e.so _RINvNtCsgIvBXrcXzSU_3std5panic12catch_unwindINtNtNtCs7IzIM6SviTH_4core5panic11unwind_safe16AssertUnwindSafeNCNCINvMNtB4_6threadNtB1P_7Builder16spawn_unchecked_NCNCINvNtCse6tXywgNo7E_15rustc_interface4util26run_in_thread_with_globalsNCINvB2E_31run_in_thread_pool_with_globalsNCINvNtB2G_9interface12run_compilerINtNtBN_6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B4X_E0B4X_E00B4X_Es_00EB4X_EB68_ in librustc_driver-5a1863ba703f721e.so _RNCINvMNtCsgIvBXrcXzSU_3std6threadNtB5_7Builder16spawn_unchecked_NCNCINvNtCse6tXywgNo7E_15rustc_interface4util26run_in_thread_with_globalsNCINvB18_31run_in_thread_pool_with_globalsNCINvNtB1a_9interface12run_compilerINtNtCs7IzIM6SviTH_4core6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B3r_E0B3r_E00B3r_Es_0B4S_ in librustc_driver-5a1863ba703f721e.so _RNSNvYNCINvMNtCsgIvBXrcXzSU_3std6threadNtBa_7Builder16spawn_unchecked_NCNCINvNtCse6tXywgNo7E_15rustc_interface4util26run_in_thread_with_globalsNCINvB1d_31run_in_thread_pool_with_globalsNCINvNtB1f_9interface12run_compilerINtNtCs7IzIM6SviTH_4core6result6ResultuNtCsatIe0WbCZ4X_10rustc_span15ErrorGuaranteedENCNvCs8x0aP3NKi2u_17rustc_driver_impl12run_compilers_0E0B3w_E0B3w_E00B3w_Es_0INtNtNtB3B_3ops8function6FnOnceuE9call_once6vtableB4X_ in librustc_driver-5a1863ba703f721e.so _$LT$alloc..boxed..Box$LT$F$C$A$GT$$u20$as$u20$core..ops..function..FnOnce$LT$Args$GT$$GT$::call_once::h677514e8801634eb in libstd-9799784a3fa98339.so _$LT$alloc..boxed..Box$LT$F$C$A$GT$$u20$as$u20$core..ops..function..FnOnce$LT$Args$GT$$GT$::call_once::h7bf3784d10fe4428 in libstd-9799784a3fa98339.so std::sys::unix::thread::Thread::new::thread_start::h9bcdcbae0ef5ae51 in libstd-9799784a3fa98339.so start_thread in libc.so.6 __clone3 in libc.so.6 ```

The most interesting callee/caller entry with the fewest allocations is _RNCNvMs3_NtNtCs5MN4J8h9fJF_18rustc_mir_dataflow9framework6engineINtB7_6EngineNtNtNtBb_5impls16storage_liveness16MaybeStorageLiveE3new0Csj7pHd1IXyO8_16rustc_const_eval in librustc_driver-5a1863ba703f721e.so with 1703375 allocations for 56.7 GiB, which is an average of about 35 KiB.

saethlin commented 1 year ago

Post-expansion, this crate has a few functions which look like this:

                Self::Irikar__Sight_Room
            } else if value
                == ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((0usize
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1)
            {
                Self::Irikar_Breach__Save_Room
            } else if value
                == (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((0usize
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1) + 1)
                    + 1) + 1) + 1) + 1) + 1) + 1) + 1)
            {
                Self::Menu__Upgrade_Menu
            } else { 
                ::enum_map::out_of_bounds()
            }

There are N different arms before this, and a handful of functions like this that end up with a few tens of thousands of MIR locals. It looks like this code was written assuming constant propagation exists, but currently in rustc, there is no constant propagation in debug builds. Every one of these + has a runtime check for overflow inserted, and they are not optimized out.

This explodes memory usage because MIR validation has memory usage which is O(blocks * locals). For this program, every one of these + is lowered to a few new locals plus a new block so the complexity is more like O(n^2) but since the number of + is quadratic with the size of these enums like SpotId, the memory usage probably looks cubic or even worse, if the number of variants in SpotId is quadratic with map size or something like that.

This flavor of problem is not unique to rustc, basically every compiler has quadratic or worse resource usage but with a small enough constant factor that normal programs don't notice it. In this case, the memory in those huge spikes is used for bitsets; for most functions all the memory for the bitsets is not very significant compared to the memory used for the MIR that the bitsets are being used to analyze. But if a function has thousands of + in it, things go a bit haywire.

On my machine with overflow-checks enabled, adding RUSTFLAGS=-Zmir-enable-passes=+ConstProp drops clean debug build time from 4m32s to 1m55s and peak memory from 34 GB to 10 GB (enabling GVN has the same effect). It's still 10 GB because ConstProp on its own can't fully clean up all the overflow checks, and if you enable too many MIR opts, build time re-regresses. Didn't look into why.

@rust-lang/wg-compiler-performance What do you think about adding something like this to the benchmark suite? Or should this already be covered by one of the stress-tests?

Zannick commented 1 year ago

That's very interesting, thank you for the analysis. It looks like that comes from the enum-map-derive crate, which explains the correlation with my enum sizes. Someone's already opened a bug about that code generation, so I can follow up there to recommend improving that.

I have some ability to control constant propagation in my own generated code but I don't think anything's going to reach that level.

KamilaBorowska commented 1 year ago

enum-map 2.7.2 was released which generates somewhat nicer code.