about summary refs log tree commit diff
path: root/compiler/rustc_borrowck
AgeCommit message (Collapse)AuthorLines
2023-06-22Migrate item_bounds to ty::ClauseMichael Goulet-1/+1
2023-06-23avoid `&format` in error message codeTakayuki Maeda-1/+1
2023-06-21Rollup merge of #112772 - compiler-errors:clauses-1, r=lcnrNilstrieb-17/+21
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-20address most easy commentsZiru Niu-12/+15
2023-06-20merge `BorrowKind::Unique` into `BorrowKind::Mut`Ziru Niu-54/+55
2023-06-19Rollup merge of #112781 - compiler-errors:new-solver-tait-overlaps-hidden, ↵Michael Goulet-1/+2
r=lcnr Don't consider TAIT normalizable to hidden ty if it would result in impossible item bounds See test for example where we shouldn't consider it possible to alias-relate a TAIT and hidden type. r? `@lcnr`
2023-06-19Rollup merge of #112232 - fee1-dead-contrib:match-eq-const-msg, r=b-naberMichael Goulet-16/+25
Better error for non const `PartialEq` call generated by `match` Resolves #90237
2023-06-19s/Clause/ClauseKindMichael Goulet-17/+21
2023-06-19Don't consider TAIT normalizable to hidden ty if it would result in ↵Michael Goulet-1/+2
impossible item bounds
2023-06-18Better error for non const `PartialEq` call generated by `match`Deadbeef-16/+25
2023-06-17Move WF goal to clauseMichael Goulet-5/+8
2023-06-15Rollup merge of #112654 - aliemjay:closure-output-normalize, r=compiler-errorsGuillaume Gomez-15/+1
normalize closure output in equate_inputs_and_outputs Fixes #112604
2023-06-15normalize closure output before relationAli MJ Al-Nasrawy-15/+1
2023-06-09split opaque type handling in new solverlcnr-7/+21
be more explicit in where we only add new hidden types and where we also have to deal with item bounds.
2023-06-09extract opaque type wf check into separate fnlcnr-65/+74
2023-06-09recompute opaque type originlcnr-18/+11
2023-06-08Auto merge of #108293 - Jarcho:mut_analyses, r=eholkbors-12/+15
Take MIR dataflow analyses by mutable reference The main motivation here is any analysis requiring dynamically sized scratch memory to work. One concrete example would be pointer target tracking, where tracking the results of a dereference can result in multiple possible targets. This leads to processing multi-level dereferences requiring the ability to handle a changing number of potential targets per step. A (simplified) function for this would be `fn apply_deref(potential_targets: &mut Vec<Target>)` which would use the scratch space contained in the analysis to send arguments and receive the results. The alternative to this would be to wrap everything in a `RefCell`, which is what `MaybeRequiresStorage` currently does. This comes with a small perf cost and loses the compiler's guarantee that we don't try to take multiple borrows at the same time. For the implementation: * `AnalysisResults` is an unfortunate requirement to avoid an unconstrained type parameter error. * `CloneAnalysis` could just be `Clone` instead, but that would result in more work than is required to have multiple cursors over the same result set. * `ResultsVisitor` now takes the results type on in each function as there's no other way to have access to the analysis without cloning it. This could use an associated type rather than a type parameter, but the current approach makes it easier to not care about the type when it's not necessary. * `MaybeRequiresStorage` now no longer uses a `RefCell`, but the graphviz formatter now does. It could be removed, but that would require even more changes and doesn't really seem necessary.
2023-06-07Rollup merge of #112122 - compiler-errors:next-coherence, r=lcnrDylan DPC-2/+2
Add `-Ztrait-solver=next-coherence` Flag that conditionally uses the trait solver *only* during coherence, for more testing and/or eventual partial-migration onto the trait solver (in the medium- to long-term). * This still uses the selection context in some of the coherence methods I think, so it's not "complete". Putting this up for review and/or for further work in-tree. * I probably need to spend a bit more time making sure that we don't sneakily create any other infcx's during coherence that also need the new solver enabled. r? `@lcnr`
2023-06-06Auto merge of #112361 - matthiaskrgr:rollup-39zxrw1, r=matthiaskrgrbors-9/+3
Rollup of 8 pull requests Successful merges: - #111250 (Add Terminator conversion from MIR to SMIR, part #2) - #112310 (Add new Tier-3 targets: `loongarch64-unknown-none*`) - #112334 (Add myself to highfive rotation) - #112340 (remove `TyCtxt::has_error_field` helper method) - #112343 (Prevent emitting `missing_docs` for `pub extern crate`) - #112350 (Avoid duplicate type sanitization of local decls in borrowck) - #112356 (Fix comment for `get_region_var_origins`) - #112358 (Remove default visitor impl in region constraint generation) r? `@ghost` `@rustbot` modify labels: rollup
2023-06-06Rollup merge of #112358 - Nilstrieb:fancy-more-borrowck-cleanups, ↵Matthias Krüger-6/+2
r=compiler-errors Remove default visitor impl in region constraint generation I wanted to group it together with other possibly minor borrowck cleanups but that's all I have right now so I rather put it up than forget about it before doing something else. r? `@compiler-errors`
2023-06-06Remove default visitor impl in region constraint generationNilstrieb-6/+2
2023-06-06Avoid duplicate type sanitization of local declsNilstrieb-3/+1
The type of the local decl is already sanitized in `visit_local_decl`.
2023-06-06New trait solver is a property of inference contextMichael Goulet-2/+2
2023-06-06Rollup merge of #112019 - jieyouxu:issue-111554, r=compiler-errorsMatthias Krüger-6/+22
Don't suggest changing `&self` and `&mut self` in function signature to be mutable when taking `&mut self` in closure Current suggestion for when taking a mutable reference to `self` in a closure (as an upvar) will produce a machine-applicable suggestion to change the `self` in the function signature to `mut self`, but does not account for the specialness of implicit self in that it can already have `&` and `&mut` (see #111554). This causes the function signature to become `test(&mut mut self)` which does not seem desirable. ``` error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable --> src/sound_player.rs:870:11 | 869 | pub fn test(&mut self) { | ---- help: consider changing this to be mutable: `mut self` 870 | || test2(&mut self); | ^^^^^^^^^ cannot borrow as mutable ``` This PR suppresses the "changing this to be mutable" suggestion if the implicit self is either `ImplicitSelfKind::ImmRef` or `ImplicitSelfKind::MutRef`. Fixes #111554.
2023-06-02Simplify pre-order algorithm.Camille GILLOT-51/+43
2023-06-01Rollup merge of #111980 - compiler-errors:unmapped-substs, r=lcnrDylan DPC-9/+13
Preserve substs in opaques recorded in typeck results This means that we now prepopulate MIR with opaques with the right substs. The first commit is a hack that I think we discussed, having to do with `DefiningAnchor::Bubble` basically being equivalent to `DefiningAnchor::Error` in the new solver, so having to use `DefiningAnchor::Bind` instead, lol. r? `@lcnr`
2023-05-31Auto merge of #112070 - lcnr:disjoint-closure-capture-ub, r=oli-obkbors-3/+2
change `BorrowKind::Unique` to be a mutating `PlaceContext` fixes #112056 I believe that `BorrowKind::Unique` is a footgun in general, so I added a FIXME and opened https://github.com/rust-lang/rust/issues/112072. This is a bit too involved for this PR though.
2023-05-29Rename `tcx.mk_re_*` => `Region::new_*`Maybe Waffle-31/+34
2023-05-29unique borrows are mutating useslcnr-3/+2
2023-05-29Don't suggest changing {ImmRef,MutRef} implicit self to be mutable许杰友 Jieyou Xu (Joe)-6/+22
2023-05-27Rollup merge of #111983 - compiler-errors:type-op-locally, r=lcnrGuillaume Gomez-1/+1
Perform MIR type ops locally in new solver The new solver already does caching, and it's generally more correct to be using the infcx of the MIR typeck (which has the defining anchor set correctly and has already initialized all the opaques from HIR typeck). This is based on #111918 so look at the final 3 commits. This actually causes some tests to go from passing to failing, and failing to passing. Here's the full diff: https://www.diffchecker.com/hB4bh1A9/ Putting this up for exposure mostly. r? `@lcnr`
2023-05-27Rollup merge of #111952 - cjgillot:drop-replace, r=WaffleLapkinGuillaume Gomez-39/+21
Remove DesugaringKind::Replace. A simple boolean flag is enough.
2023-05-27Uplift complex type ops back into typeck so we can call them locallyMichael Goulet-1/+1
2023-05-26Wait until type_of to remap HIR opaques back to their defn paramsMichael Goulet-7/+1
2023-05-26Use DefiningAnchor::Bind in infer_opaque_definition_from_instantiationMichael Goulet-2/+12
2023-05-26Auto merge of #111918 - compiler-errors:custom-type-ops-err, r=lcnrbors-93/+73
Use `ErrorGuaranteed` more in MIR type ops Delay bugs more eagerly and pass them through type op infra instead of delaying them at all the usage-sites. Follow up to: https://github.com/rust-lang/rust/pull/111741#discussion_r1203840588 r? `@lcnr`
2023-05-25Ensure Fluent messages are in alphabetical orderclubby789-173/+173
2023-05-25Remove DesugaringKind::Replace.Camille GILLOT-39/+21
2023-05-25Fallible<_> -> Result<_, NoSolution>Michael Goulet-7/+8
2023-05-25Use ErrorGuaranteed more in MIR type opsMichael Goulet-86/+65
2023-05-25Add InferCtxt::register_hidden_type_in_new_solverMichael Goulet-1/+0
2023-05-25Pre-populate MIR with opaques, prefer subst-relate candidateMichael Goulet-0/+62
2023-05-25Move DefiningAnchorMichael Goulet-3/+6
2023-05-25Auto merge of #111925 - Manishearth:rollup-z6z6l2v, r=Manishearthbors-110/+188
Rollup of 5 pull requests Successful merges: - #111741 (Use `ObligationCtxt` in custom type ops) - #111840 (Expose more information in `get_body_with_borrowck_facts`) - #111876 (Roll compiler_builtins to 0.1.92) - #111912 (Use `Option::is_some_and` and `Result::is_ok_and` in the compiler ) - #111915 (libtest: Improve error when missing `-Zunstable-options`) r? `@ghost` `@rustbot` modify labels: rollup
2023-05-24Rollup merge of #111912 - WaffleLapkin:is_some_and_in_the_compiler, ↵Manish Goregaokar-14/+9
r=petrochenkov Use `Option::is_some_and` and `Result::is_ok_and` in the compiler `.is_some_and(..)`/`.is_ok_and(..)` replace `.map_or(false, ..)` and `.map(..).unwrap_or(false)`, making the code more readable. This PR is a sibling of https://github.com/rust-lang/rust/pull/111873#issuecomment-1561316515
2023-05-24Rollup merge of #111840 - voidc:borrowck-consumers, r=oli-obkManish Goregaokar-63/+140
Expose more information in `get_body_with_borrowck_facts` Verification tools for Rust such as, for example, Creusot or Prusti would benefit from having access to more information computed by the borrow checker. As a first step in that direction, #86977 added the `get_body_with_borrowck_facts` API, allowing compiler consumers to obtain a `mir::Body` with accompanying borrow checker information. At RustVerify 2023, multiple people working on verification tools expressed their need for a more comprehensive API. While eventually borrow information could be part of Stable MIR, in the meantime, this PR proposes a more limited approach, extending the existing `get_body_with_borrowck_facts` API. In summary, we propose the following changes: - Permit obtaining the borrow-checked body without necessarily running Polonius - Return the `BorrowSet` and the `RegionInferenceContext` in `BodyWithBorrowckFacts` - Provide a way to compute the `borrows_out_of_scope_at_location` map - Make some helper methods public This is similar to #108328 but smaller in scope. `@smoelius` Do you think these changes would also be sufficient for your needs? r? `@oli-obk` cc `@JonasAlaif`
2023-05-24Rollup merge of #111741 - compiler-errors:custom-type-op, r=lcnrManish Goregaokar-33/+39
Use `ObligationCtxt` in custom type ops We already make one when evaluating the `CustomTypeOp`, so it's simpler to just pass it to the user. Removes a redundant `ObligationCtxt::new_in_snapshot` usage and simplifies some other code. This makes several refactorings related to opaque types in the new solver simpler, but those are not included in this PR.
2023-05-24Rollup merge of #111863 - compiler-errors:check-more-mir, r=b-naberMatthias Krüger-27/+9
Don't skip mir typeck if body has errors Comment says: ``` // if verifier failed, don't do further checks to avoid ICEs ``` But there are no ICEs to be found. The comment is quite old, so perhaps something fixed it... maybe because the MIR typechecker is delaying span bugs rather than panicking via eager bugs? IDK I'm generally inclined to fix the ICEs themselves that were to arise from this, rather than just totally skipping large parts of the compiler that have impacts on downstream logic (namely, our opaque type results are affected). Anyways, this happens on the error path, so it shouldn't really matter. Fixes this hack: https://github.com/rust-lang/rust/pull/111853/files#r1201501540
2023-05-24Rollup merge of #111759 - cjgillot:interval-kill, r=b-naberMatthias Krüger-50/+77
Leverage the interval property to precompute borrow kill points.
2023-05-24Don't skip mir typeck if body has errorsMichael Goulet-27/+9