rust/compiler
Matthias Krüger acf3791c16
Rollup merge of #114628 - cedihegi:master, r=oli-obk
Allowing re-implementation of mir_drops_elaborated query

For our use case of the rust compiler interface (a rust verifier called [Prusti](https://github.com/viperproject/prusti-dev/)), it would be extremely useful if we were able to "copy" the implementation of the `mir_drops_elaborated_and_const_checked` query to override it. This would mean that the following items would need to be made public:
>6d55184d05/compiler/rustc_mir_transform/src/lib.rs (L434)
>6d55184d05/compiler/rustc_mir_transform/src/inline.rs (L32)
(for the latter its module needs to be public or it needs to be re-exported)

To explain why (we think) this is necessary: I am currently working on a new feature, where we try to modify the generated executables by inserting certain additional checks, and potentially perform some optimizations based on verification results.
We are using the rust compiler interface and most of our goals can be achieved by overriding queries, in our case this is currently `mir_drops_elaborated_and_const_checked`.

However, at the moment this approach is somewhat limited. When overriding queries, we can call and steal the base-query and then modify the results before allocating and returning those.
The problem is that the verification works with a copy of `mir_promoted`. For the modifications we want to make to the mir, we would often want to rely on results of the verifier that refer to Locations in the `mir_promoted`. We can not modify the `mir_promoted` query using these results, because to run the verification we also need the results of `mir_borrowck()`, which means `mir_promoted` will already be constructed and cached.
The Locations we get from the verifier are also no longer usable to modify `mir_drops_elaborated_and_const_checked`, because the MIR obviously changes between those 2 phases. Tracking all Locations between the two seems to be pretty much unfeasible, and would also be extremely unstable.

By being able to override the query with its original implementation, we could modify the MIR before drop elaboration and the various other passes are performed.

I have spent quite a bit of time investigating other solutions, and didn't find any other way solving this problem. If I still missed something I would of course be happy to hear any suggestions that do not require exposing more internal compiler functionality. However, I think being able to re-implement certain queries could also benefit other use cases in the future, for example in PR #108328 one of the approaches discussed involved doing the same thing for `mir_promoted`.
2023-08-08 21:44:46 +02:00
..
rustc inline format!() args up to and including rustc_middle 2023-07-30 13:18:33 +02:00
rustc_abi Add internal_features lint 2023-08-03 14:50:50 +02:00
rustc_arena Add internal_features lint 2023-08-03 14:50:50 +02:00
rustc_ast Generate better function argument names in global_allocator expansion 2023-08-06 07:36:05 -07:00
rustc_ast_lowering Unconditionally record lifetime mapping 2023-08-08 03:16:04 +00:00
rustc_ast_passes inline format!() args up to and including rustc_middle 2023-07-30 13:18:33 +02:00
rustc_ast_pretty Improve spans for indexing expressions 2023-08-04 13:17:39 +02:00
rustc_attr [rustc_attr][nit] Replace filter + is_some with map_or. 2023-08-01 12:39:32 -07:00
rustc_baked_icu_data
rustc_borrowck Rollup merge of #114566 - fmease:type-alias-laziness-is-crate-specific, r=oli-obk 2023-08-08 03:30:56 +02:00
rustc_builtin_macros Generate better function argument names in global_allocator expansion 2023-08-06 07:36:05 -07:00
rustc_codegen_cranelift Rollup merge of #114382 - scottmcm:compare-bytes-intrinsic, r=cjgillot 2023-08-07 05:29:12 +02:00
rustc_codegen_gcc Rollup merge of #114382 - scottmcm:compare-bytes-intrinsic, r=cjgillot 2023-08-07 05:29:12 +02:00
rustc_codegen_llvm Rollup merge of #113593 - rcvalle:rust-cfi-fix-90546, r=wesleywiser 2023-08-08 21:44:43 +02:00
rustc_codegen_ssa Rollup merge of #114500 - taiki-e:arm-crypto, r=Amanieu 2023-08-08 03:30:55 +02:00
rustc_const_eval Rollup merge of #114615 - RalfJung:interpret-invalid-where, r=lcnr 2023-08-08 21:44:45 +02:00
rustc_data_structures Auto merge of #114339 - ttsugriy:unsafe-utf8, r=davidtwco 2023-08-08 10:25:37 +00:00
rustc_driver Update rustix 2023-07-03 07:20:51 +00:00
rustc_driver_impl rustc_interface: Dismantle register_plugins query 2023-08-07 19:33:23 +08:00
rustc_error_codes Auto merge of #109348 - cjgillot:issue-109146, r=petrochenkov 2023-08-05 11:52:07 +00:00
rustc_error_messages Add internal_features lint 2023-08-03 14:50:50 +02:00
rustc_errors Auto merge of #114104 - oli-obk:syn2, r=compiler-errors 2023-08-04 18:46:19 +00:00
rustc_expand Auto merge of #114104 - oli-obk:syn2, r=compiler-errors 2023-08-04 18:46:19 +00:00
rustc_feature Rollup merge of #114562 - Trolldemorted:thiscall, r=oli-obk 2023-08-07 16:47:57 +02:00
rustc_fluent_macro
rustc_fs_util
rustc_graphviz
rustc_hir Auto merge of #114602 - compiler-errors:rpit-outlives-sadness, r=oli-obk 2023-08-08 13:03:10 +00:00
rustc_hir_analysis Auto merge of #114602 - compiler-errors:rpit-outlives-sadness, r=oli-obk 2023-08-08 13:03:10 +00:00
rustc_hir_pretty Improve spans for indexing expressions 2023-08-04 13:17:39 +02:00
rustc_hir_typeck Rollup merge of #114594 - compiler-errors:new-solver-resolve-aliases, r=lcnr 2023-08-08 03:30:56 +02:00
rustc_incremental Add internal_features lint 2023-08-03 14:50:50 +02:00
rustc_index Add internal_features lint 2023-08-03 14:50:50 +02:00
rustc_infer Rollup merge of #114566 - fmease:type-alias-laziness-is-crate-specific, r=oli-obk 2023-08-08 03:30:56 +02:00
rustc_interface rustc_interface: Dismantle register_plugins query 2023-08-07 19:33:23 +08:00
rustc_lexer Update lexer emoji diagnostics to Unicode 15.0 2023-07-29 08:47:21 +08:00
rustc_lint Rollup merge of #114486 - Urgau:const-context-nan-suggestion-114471, r=compiler-errors 2023-08-06 03:56:09 +02:00
rustc_lint_defs Auto merge of #114414 - cjgillot:early-unnameable-test, r=petrochenkov 2023-08-04 14:13:11 +00:00
rustc_llvm Rollup merge of #114612 - lqd:east-17-warning, r=nikic 2023-08-08 21:44:44 +02:00
rustc_log inline format!() args up to and including rustc_middle 2023-07-30 13:18:33 +02:00
rustc_macros Add internal_features lint 2023-08-03 14:50:50 +02:00
rustc_metadata Auto merge of #114578 - petrochenkov:noplugin, r=cjgillot 2023-08-08 05:10:11 +00:00
rustc_middle Rollup merge of #114615 - RalfJung:interpret-invalid-where, r=lcnr 2023-08-08 21:44:45 +02:00
rustc_mir_build Rollup merge of #114566 - fmease:type-alias-laziness-is-crate-specific, r=oli-obk 2023-08-08 03:30:56 +02:00
rustc_mir_dataflow Rollup merge of #114505 - ouz-a:cleanup_mir, r=RalfJung 2023-08-06 17:26:29 +02:00
rustc_mir_transform Added comment on reason for method being public 2023-08-08 17:36:30 +02:00
rustc_monomorphize Store the laziness of type aliases in the DefKind 2023-08-07 15:54:31 +02:00
rustc_parse Rollup merge of #114434 - Nilstrieb:indexing-spans, r=est31 2023-08-04 21:31:57 +02:00
rustc_parse_format Fix unit tests 2023-07-19 16:37:09 +00:00
rustc_passes Rollup merge of #114566 - fmease:type-alias-laziness-is-crate-specific, r=oli-obk 2023-08-08 03:30:56 +02:00
rustc_plugin_impl
rustc_privacy Store the laziness of type aliases in the DefKind 2023-08-07 15:54:31 +02:00
rustc_query_impl Add internal_features lint 2023-08-03 14:50:50 +02:00
rustc_query_system Rollup merge of #114566 - fmease:type-alias-laziness-is-crate-specific, r=oli-obk 2023-08-08 03:30:56 +02:00
rustc_resolve Rollup merge of #114566 - fmease:type-alias-laziness-is-crate-specific, r=oli-obk 2023-08-08 03:30:56 +02:00
rustc_serialize Upgrade to indexmap 2.0.0 2023-07-03 13:51:54 -07:00
rustc_session Rollup merge of #113593 - rcvalle:rust-cfi-fix-90546, r=wesleywiser 2023-08-08 21:44:43 +02:00
rustc_smir Add TraitDef::trait_decl method 2023-08-07 10:24:12 -03:00
rustc_span Rollup merge of #114549 - chenyukang:yukang-review-resolve-part, r=petrochenkov 2023-08-07 05:29:13 +02:00
rustc_symbol_mangling avoid 'miri' when refering to the shared interpreter 2023-08-02 16:52:03 +02:00
rustc_target Rollup merge of #113480 - Sword-Destiny:master, r=petrochenkov 2023-08-08 21:44:42 +02:00
rustc_trait_selection Rollup merge of #114594 - compiler-errors:new-solver-resolve-aliases, r=lcnr 2023-08-08 03:30:56 +02:00
rustc_traits refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00
rustc_transmute Don't attempt to compute layout of type referencing error 2023-07-27 18:24:08 +00:00
rustc_ty_utils Auto merge of #114602 - compiler-errors:rpit-outlives-sadness, r=oli-obk 2023-08-08 13:03:10 +00:00
rustc_type_ir Rollup merge of #114355 - compiler-errors:resolve_vars_early, r=lcnr 2023-08-04 09:18:59 +02:00