rust/compiler
bors 7349f6b503 Auto merge of #135057 - compiler-errors:project-unconstrained, r=oli-obk
Project to `TyKind::Error` when there are unconstrained non-lifetime (ty/const) impl params

It splits the `enforce_impl_params_are_constrained` function into lifetime/non-lifetime, and queryfies the latter. We can then use the result of the latter query (`Result<(), ErrorGuaranteed>`) to intercept projection and constrain the projected type to `TyKind::Error`, which ensures that we leak no ty or const vars to places that don't expect them, like `normalize_erasing_regions`.

The reason we split `enforce_impl_params_are_constrained` into two parts is because we only error for *lifetimes* if the lifetime ends up showing up in any of the associated types of the impl (e.g. we allow `impl<'a> Foo { type Assoc = (); }`). However, in order to compute the `type_of` query for the anonymous associated type of an RPITIT, we need to do trait solving (in `query collect_return_position_impl_trait_in_trait_tys`). That would induce cycles. Luckily, it turns out for lifetimes we don't even care about if they're unconstrained, since they're erased in all contexts that we are trying to fix ICEs. So it's sufficient to keep this check separated out of the query.

I think this is a bit less invasive of an approach compared to #127973. The major difference between this PR and that PR is that we queryify the check instead of merging it into the `explicit_predicates_of` query, and we use the result to taint just projection goals, rather than trait goals too. This doesn't require a lot of new tracking in `ItemCtxt` and `GenericPredicates`, and it also seems to not require any other changes to typeck like that PR did.

Fixes #123141
Fixes #125874
Fixes #126942
Fixes #127804
Fixes #130967

r? oli-obk
2025-01-04 04:35:55 +00: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 compiler: Add a statement-of-intent to rustc_abi 2024-12-30 15:21:27 -08:00
rustc_arena move strict provenance lints to new feature gate, remove old feature gates 2024-10-21 15:22:17 +01:00
rustc_ast upstream rustc_codegen_llvm changes for enzyme/autodiff 2025-01-01 21:42:45 +01:00
rustc_ast_ir Add sugar for &pin (const|mut) types 2024-10-07 11:15:04 -07:00
rustc_ast_lowering Unconditionally lower generic_arg_infer 2025-01-02 23:39:16 +00:00
rustc_ast_passes Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_ast_pretty Rollup merge of #134834 - dtolnay:unnamedcall, r=compiler-errors 2024-12-27 18:43:05 -08:00
rustc_attr_data_structures rename rustc_attr to rustc_attr_parsing and create rustc_attr_data_structures 2024-12-16 19:08:19 +01:00
rustc_attr_parsing Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_baked_icu_data Delete the cfg(not(parallel)) serial compiler 2024-11-12 13:38:58 +00:00
rustc_borrowck Rollup merge of #134945 - compiler-errors:map-mutate-nits, r=estebank 2025-01-01 16:35:31 +11:00
rustc_builtin_macros Rollup merge of #134877 - DavisRayM:129966-format-string-help-message, r=estebank 2025-01-01 16:35:30 +11:00
rustc_codegen_cranelift Update compiler-builtins to 0.1.140 2024-12-27 22:26:08 +00:00
rustc_codegen_gcc upstream rustc_codegen_llvm changes for enzyme/autodiff 2025-01-01 21:42:45 +01:00
rustc_codegen_llvm Remove range-metadata amdgpu workaround 2025-01-02 15:45:04 +01:00
rustc_codegen_ssa Pass objcopy args for stripping on OSX 2025-01-02 22:17:39 +01:00
rustc_const_eval Auto merge of #134757 - RalfJung:const_swap, r=scottmcm 2024-12-30 23:46:42 +00:00
rustc_data_structures MatchBranchSimplification: Consider empty-unreachable otherwise branch 2024-12-27 10:57:46 +00:00
rustc_driver Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_driver_impl Rollup merge of #131439 - mu001999-contrib:cleanup/static-mut, r=estebank 2025-01-01 16:35:29 +11:00
rustc_error_codes Rewrite the error-code docs for coverage attributes [E0788] 2024-12-25 19:23:48 +11:00
rustc_error_messages Convert some Into impls into From impls 2024-12-31 01:56:33 +00:00
rustc_errors Convert some Into impls into From impls 2024-12-31 01:56:33 +00:00
rustc_expand Rollup merge of #131522 - c410-f3r:unlock-rfc-2011, r=chenyukang 2024-12-26 21:56:47 -05:00
rustc_feature Revert "Auto merge of #130766 - clarfonthey:stable-coverage-attribute, r=wesleywiser" 2024-12-23 12:30:37 +11:00
rustc_fluent_macro use tracked_path in rustc_fluent_macro 2024-10-19 22:32:38 +08:00
rustc_fs_util Couple of changes to make it easier to compile rustc for wasm 2024-09-26 19:51:14 +00:00
rustc_graphviz Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_hir nit: Make get_infer_ret_ty name more consistent with is_suggestable_infer_ty 2025-01-02 23:39:16 +00:00
rustc_hir_analysis Auto merge of #135057 - compiler-errors:project-unconstrained, r=oli-obk 2025-01-04 04:35:55 +00:00
rustc_hir_pretty Support pretty-printing dyn* trait objects 2024-12-20 21:31:21 -08:00
rustc_hir_typeck Rollup merge of #135044 - compiler-errors:better-infer-suggestions-in-const, r=oli-obk 2025-01-03 22:12:45 +01:00
rustc_incremental Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_index improve bit_set assertion 2024-12-29 17:47:30 +00:00
rustc_index_macros update rustc_index_macros feature handling 2024-12-19 20:32:12 +03:00
rustc_infer Simplify declared_generic_bounds_from_env 2025-01-02 01:30:55 +00:00
rustc_interface Rollup merge of #134514 - bjorn3:more_driver_refactors, r=jieyouxu 2024-12-20 21:47:00 +08:00
rustc_lexer Add test to check unicode identifier version 2024-12-09 06:23:59 -08:00
rustc_lint Rollup merge of #134979 - estebank:default-lint-sugg, r=compiler-errors 2025-01-01 16:35:32 +11:00
rustc_lint_defs Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_llvm upstream rustc_codegen_llvm changes for enzyme/autodiff 2025-01-01 21:42:45 +01:00
rustc_log Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_macros Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_metadata Convert some Into impls into From impls 2024-12-31 01:56:33 +00:00
rustc_middle Auto merge of #135057 - compiler-errors:project-unconstrained, r=oli-obk 2025-01-04 04:35:55 +00:00
rustc_mir_build Fix typos 2024-12-27 21:35:57 +08:00
rustc_mir_dataflow Auto merge of #134625 - compiler-errors:unsafe-binders-ty, r=oli-obk 2024-12-24 00:51:51 +00:00
rustc_mir_transform MatchBranchSimplification: Consider empty-unreachable otherwise branch 2024-12-27 10:57:46 +00:00
rustc_monomorphize Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_next_trait_solver Also in the new solver 2025-01-03 05:22:14 +00:00
rustc_parse Rollup merge of #134884 - calciumbe:patch1, r=jieyouxu 2024-12-29 21:18:07 +01:00
rustc_parse_format add suggestion for wrongly ordered format parameters 2024-12-30 06:14:26 -08:00
rustc_passes Overhaul error messages for disallowed coverage attributes 2024-12-25 16:17:09 +11:00
rustc_pattern_analysis Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_privacy Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +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 Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_resolve Fix spacing of markdown code block fences in compiler rustdoc 2024-12-22 10:16:31 -08:00
rustc_sanitizers Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_serialize Fix explicit_iter_loop in rustc_serialize 2024-10-16 15:44:16 +02:00
rustc_session Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
rustc_smir Auto merge of #134625 - compiler-errors:unsafe-binders-ty, r=oli-obk 2024-12-24 00:51:51 +00:00
rustc_span Auto merge of #134757 - RalfJung:const_swap, r=scottmcm 2024-12-30 23:46:42 +00:00
rustc_symbol_mangling Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_target Rollup merge of #133420 - thesummer:rtems-unwind, r=workingjubilee 2025-01-03 22:12:41 +01:00
rustc_trait_selection Auto merge of #135057 - compiler-errors:project-unconstrained, r=oli-obk 2025-01-04 04:35:55 +00: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 add comment explaining why ty_and_layout_field is not used 2024-12-18 11:01:54 +01:00
rustc_ty_utils nit: Make get_infer_ret_ty name more consistent with is_suggestable_infer_ty 2025-01-02 23:39:16 +00:00
rustc_type_ir Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_type_ir_macros do not relate Abi and Safety 2024-10-22 23:13:04 +02:00
stable_mir make no-variant types a dedicated Variants variant 2024-12-18 11:01:54 +01:00