about summary refs log tree commit diff
path: root/compiler/rustc_middle
AgeCommit message (Collapse)AuthorLines
2023-06-27Auto merge of #113105 - matthiaskrgr:rollup-rci0uym, r=matthiaskrgrbors-5/+18
Rollup of 8 pull requests Successful merges: - #112207 (Add trustzone and virtualization target features for aarch32.) - #112454 (Make compiletest aware of targets without dynamic linking) - #112628 (Allow comparing `Box`es with different allocators) - #112692 (Provide more context for `rustc +nightly -Zunstable-options` on stable) - #112972 (Make `UnwindAction::Continue` explicit in MIR dump) - #113020 (Add tests impl via obj unless denied) - #113084 (Simplify some conditions) - #113103 (Normalize types when applying uninhabited predicate.) r? `@ghost` `@rustbot` modify labels: rollup
2023-06-27Rollup merge of #113103 - cjgillot:normalize-inhabited, r=compiler-errorsMatthias Krüger-1/+12
Normalize types when applying uninhabited predicate. Fixes https://github.com/rust-lang/rust/issues/112997
2023-06-27Rollup merge of #113084 - WaffleLapkin:less_map_or, r=NilstriebMatthias Krüger-3/+4
Simplify some conditions r? `@Nilstrieb` Some things taken out of my `is_none_or` pr.
2023-06-27Rollup merge of #112972 - nbdd0121:mir, r=davidtwcoMatthias Krüger-1/+2
Make `UnwindAction::Continue` explicit in MIR dump Makes it easier to spot unwinding related issues in MIR by making `UnwindAction::Continue` explicit, just like all other `UnwindAction`s.
2023-06-27Normalize types when applying uninhabited predicate.Camille GILLOT-1/+12
2023-06-27Avoid calling queries during query stack printingOli Scherer-4/+9
2023-06-27`thir`: Add `Become` expression kindMaybe Waffle-0/+5
2023-06-27Simplify some conditionsMaybe Waffle-3/+4
2023-06-27Auto merge of #112938 - compiler-errors:clause-3, r=oli-obkbors-115/+100
Migrate `TyCtxt::predicates_of` and `ParamEnv::caller_bounds` to `Clause` The last big change in the series. I will follow-up with additional filed issues once this PR lands: - [ ] Investigate making `TypeFoldable<TyCtxt<'tcx>> for ty::Clause<'tcx>` implementation less weird: https://github.com/rust-lang/rust/blob/2efe09170530fa18e42ff05b8d9dd23f00b5c430/compiler/rustc_middle/src/ty/structural_impls.rs#L672 - [ ] Clean up the elaborator since it should only be emitting child clauses, not predicates - [ ] Rename identifiers like `pred` and `predicates` to `clause` if they're actually clauses around the codebase - [ ] Validate that all of the `ToPredicate` impls are acutally still needed, or prune them if they're not r? `@ghost` until the other branch lands
2023-06-27Auto merge of #112693 - ericmarkmartin:use-more-placeref, r=spastorinobors-7/+4
Use PlaceRef abstractions more often Associated issue: https://github.com/rust-lang/rust/issues/80647 r? `@spastorino`
2023-06-26TypeWellFormedInEnvMichael Goulet-17/+17
2023-06-26Migrate predicates_of and caller_bounds to ClauseMichael Goulet-98/+83
2023-06-26Assert that we don't convert unevaluated MIR promoteds to unevaluated type ↵Oli Scherer-2/+1
constants
2023-06-26Make simd_shuffle_indices use valtreesOli Scherer-17/+9
2023-06-25use PlaceRef abstractions more consistentlyEric Mark Martin-7/+4
2023-06-23Auto merge of #112891 - oli-obk:impl_trait_in_assoc_tys_cleanup, ↵bors-0/+6
r=compiler-errors Various impl trait in assoc tys cleanups r? `@compiler-errors` All commits except for the last are pure refactorings. 274dab5bd658c97886a8987340bf50ae57900c39 allows struct fields to participate in deciding whether a function has an opaque in its signature. best reviewed commit by commit
2023-06-23Rollup merge of #112870 - compiler-errors:clause-2, r=oli-obkMatthias Krüger-21/+90
Migrate `item_bounds` to `ty::Clause` Should be simpler than the next PR that's coming up. Last three commits are the relevant ones. r? ``@oli-obk`` or ``@lcnr``
2023-06-23Rollup merge of #112810 - compiler-errors:dont-ice-on-bad-layout, r=wesleywiserMatthias Krüger-1/+7
Don't ICE on unnormalized struct tail in layout computation 1. We try to compute a `SizeSkeleton` even if a layout error occurs, but we really only need to do this if we get `LayoutError::Unknown`, since that means our type is too polymorphic to actually compute the full layout. If we have other errors, like `LayoutError::NormalizationError` or `LayoutError::Cycle`, then we can't really make any progress, since this represents an actual error. 2. Avoid using `normalize_erasing_regions` and `struct_tail_erasing_lifetimes` since those ICE on normalization errors, and since we may call `layout_of` in HIR typeck, we don't know for certain that we're on the happy path. Fixes #112736
2023-06-23Make `UnwindAction::Continue` explicit in MIR dumpGary Guo-1/+2
2023-06-22migrate inferred_outlives_of to ClauseMichael Goulet-19/+9
2023-06-22Expect clause moreMichael Goulet-5/+2
2023-06-22Migrate item_bounds to ty::ClauseMichael Goulet-11/+93
2023-06-22Move `opaque_type_origin_unchecked` onto `TyCtxt` and re-use it where it was ↵Oli Scherer-0/+6
open coded
2023-06-22Auto merge of #112695 - nnethercote:inline-before-merging-cgus, r=wesleywiserbors-11/+9
Inline before merging cgus Because CGU merging relies on CGU sizes, but the CGU sizes before inlining aren't accurate. This change doesn't have much effect on compile perf, but it makes follow-on changes that involve more sophisticated reasoning about CGU sizes much easier. r? `@wesleywiser`
2023-06-22Tweak CGU size estimate code.Nicholas Nethercote-7/+9
- Rename `create_size_estimate` as `compute_size_estimate`, because that makes more sense for the second and subsequent calls for each CGU. - Change `CodegenUnit::size_estimate` from `Option<usize>` to `usize`. We can still assert that `compute_size_estimate` is called first. - Move the size estimation for `place_mono_items` inside the function, for consistency with `merge_codegen_units`.
2023-06-21Print def_id on EarlyBoundRegion debugSantiago Pastorino-1/+1
2023-06-22Inline before merging CGUs.Nicholas Nethercote-4/+0
Because CGU merging relies on CGU sizes, but the CGU sizes before inlining aren't accurate. This requires tweaking how the sizes are updated during merging: if CGU A and B both have an inlined function F, then `size(A + B)` will be a little less than `size(A) + size(B)`, because `A + B` will only have one copy of F. Also, the minimum CGU size is increased because it now has to account for inlined functions. This change doesn't have much effect on compile perf, but it makes follow-on changes that involve more sophisticated reasoning about CGU sizes much easier.
2023-06-21Rollup merge of #112772 - compiler-errors:clauses-1, r=lcnrNilstrieb-122/+186
Add a fully fledged `Clause` type, rename old `Clause` to `ClauseKind` Does two basic things before I put up a more delicate set of PRs (along the lines of #112714, but hopefully much cleaner) that migrate existing usages of `ty::Predicate` to `ty::Clause` (`predicates_of`/`item_bounds`/`ParamEnv::caller_bounds`). 1. Rename `Clause` to `ClauseKind`, so it's parallel with `PredicateKind`. 2. Add a new `Clause` type which is parallel to `Predicate`. * This type exposes `Clause::kind(self) -> Binder<'tcx, ClauseKind<'tcx>>` which is parallel to `Predicate::kind` 😸 The new `Clause` type essentially acts as a newtype wrapper around `Predicate` that asserts that it is specifically a `PredicateKind::Clause`. Turns out from experimentation[^1] that this is not negative performance-wise, which is wonderful, since this a much simpler design than something that requires encoding the discriminant into the alignment bits of a predicate kind, or something else like that... r? ``@lcnr`` or ``@oli-obk`` [^1]: https://github.com/rust-lang/rust/pull/112714#issuecomment-1595653910
2023-06-21Rollup merge of #112759 - cjgillot:closure-names, r=oli-obkNilstrieb-76/+26
Make closure_saved_names_of_captured_variables a query. As we will start removing debuginfo during MIR optimizations, we need to keep them somewhere.
2023-06-21Auto merge of #112119 - zirconium-n:issue-113072-merge-borrow-kind, r=lcnrbors-36/+27
Merge `BorrowKind::Unique` into `BorrowKind::Mut` Fixes #112072 Might have conflict with #112070 r? `@lcnr` I'm not sure what's the suitable change in a couple places.
2023-06-20yeet upcast_trait_def_id from ImplSourceObjectDataMichael Goulet-6/+2
2023-06-20yeet ImplSource::TraitAlias tooMichael Goulet-31/+0
2023-06-20Auto merge of #112835 - lcnr:proof-tree-nits, r=BoxyUwUbors-8/+12
proof tree nits r? `@BoxyUwU`
2023-06-20update comment on `MutBorrowKind::ClosureCapture`Ziru Niu-4/+7
2023-06-20address most easy commentsZiru Niu-10/+6
2023-06-20merge `BorrowKind::Unique` into `BorrowKind::Mut`Ziru Niu-26/+18
2023-06-20Rollup merge of #112786 - lcnr:early-binder, r=NilstriebGuillaume Gomez-55/+60
change binders from tuple structs to named fields
2023-06-20cleanup importslcnr-8/+12
2023-06-20Auto merge of #112320 - compiler-errors:do-not-impl-via-obj, r=lcnrbors-0/+10
Add `implement_via_object` to `rustc_deny_explicit_impl` to control object candidate assembly Some built-in traits are special, since they are used to prove facts about the program that are important for later phases of compilation such as codegen and CTFE. For example, the `Unsize` trait is used to assert to the compiler that we are able to unsize a type into another type. It doesn't have any methods because it doesn't actually *instruct* the compiler how to do this unsizing, but this is later used (alongside an exhaustive match of combinations of unsizeable types) during codegen to generate unsize coercion code. Due to this, these built-in traits are incompatible with the type erasure provided by object types. For example, the existence of `dyn Unsize<T>` does not mean that the compiler is able to unsize `Box<dyn Unsize<T>>` into `Box<T>`, since `Unsize` is a *witness* to the fact that a type can be unsized, and it doesn't actually encode that unsizing operation in its vtable as mentioned above. The old trait solver gets around this fact by having complex control flow that never considers object bounds for certain built-in traits: https://github.com/rust-lang/rust/blob/2f896da247e0ee8f0bef7cd7c54cfbea255b9f68/compiler/rustc_trait_selection/src/traits/select/candidate_assembly.rs#L61-L132 However, candidate assembly in the new solver is much more lovely, and I'd hate to add this list of opt-out cases into the new solver. Instead of maintaining this complex and hard-coded control flow, instead we can make this a property of the trait via a built-in attribute. We already have such a build attribute that's applied to every single trait that we care about: `rustc_deny_explicit_impl`. This PR adds `implement_via_object` as a meta-item to that attribute that allows us to opt a trait out of object-bound candidate assembly as well. r? `@lcnr`
2023-06-20Merge attrs, better validationMichael Goulet-4/+6
2023-06-20Make rustc_deny_explicit_impl only local as wellMichael Goulet-0/+3
2023-06-20Add rustc_do_not_implement_via_objectMichael Goulet-0/+5
2023-06-19Rollup merge of #112232 - fee1-dead-contrib:match-eq-const-msg, r=b-naberMichael Goulet-5/+29
Better error for non const `PartialEq` call generated by `match` Resolves #90237
2023-06-19Don't ICE on unnormalized struct tail in layout computationMichael Goulet-1/+7
2023-06-19Auto merge of #112238 - scottmcm:mir-add-unchecked, r=cjgillotbors-2/+29
Promote unchecked integer math to MIR `BinOp`s So slice indexing by a range gets down to one basic block, for example. r? cjgillot
2023-06-19Store generator field names in GeneratorLayout.Camille GILLOT-44/+4
2023-06-19Make closure_saved_names_of_captured_variables a query.Camille GILLOT-32/+22
2023-06-19docMichael Goulet-1/+11
2023-06-19Fully fledged Clause typeMichael Goulet-45/+93
2023-06-19s/Clause/ClauseKindMichael Goulet-93/+99