summary refs log tree commit diff
path: root/compiler/rustc_borrowck/src
AgeCommit message (Collapse)AuthorLines
2023-06-03unique borrows are mutating useslcnr-3/+2
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-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
2023-05-24Auto merge of #111673 - cjgillot:dominator-preprocess, r=cjgillot,tmiaskobors-8/+3
Preprocess and cache dominator tree Preprocessing dominators has a very strong effect for https://github.com/rust-lang/rust/pull/111344. That pass checks that assignments dominate their uses repeatedly. Using the unprocessed dominator tree caused a quadratic runtime (number of bbs x depth of the dominator tree). This PR also caches the dominator tree and the pre-processed dominators in the MIR cfg cache. Rebase of https://github.com/rust-lang/rust/pull/107157 cc `@tmiasko`
2023-05-24Use ObligationCtxt in custom type opsMichael Goulet-33/+39
2023-05-24Use `is_some_and`/`is_ok_and` in less obvious spotsMaybe Waffle-10/+5
2023-05-24Use `Option::is_some_and` and `Result::is_ok_and` in the compilerMaybe Waffle-4/+4
2023-05-23Add RegionInferenceContext::outlives_constraintsDominik Stolz-1/+7
2023-05-23Move BodyWithBorrowckFacts to consumersDominik Stolz-31/+34
2023-05-23Make place helpers accessibleDominik Stolz-0/+2
2023-05-23Return promoteds in BodyWithBorrowckFactsDominik Stolz-0/+3
2023-05-23Allow consumers to retrieve borrowck outputJonáš Fiala-48/+111
2023-05-22Check opaques for mismatch during writebackMichael Goulet-0/+2
2023-05-19Leverage the interval property to precompute borrow kill points.Camille GILLOT-50/+77
2023-05-17Compute dominators on demand for borrowck.Camille GILLOT-8/+8
2023-05-17Cache dominators.Camille GILLOT-12/+7
2023-05-16Avoid `&format("...")` calls in error message code.Nicholas Nethercote-4/+4
Error message all end up passing into a function as an `impl Into<{D,Subd}iagnosticMessage>`. If an error message is creatd as `&format("...")` that means we allocate a string (in the `format!` call), then take a reference, and then clone (allocating again) the reference to produce the `{D,Subd}iagnosticMessage`, which is silly. This commit removes the leading `&` from a lot of these cases. This means the original `String` is moved into the `{D,Subd}iagnosticMessage`, avoiding the double allocations. This requires changing some function argument types from `&str` to `String` (when all arguments are `String`) or `impl Into<{D,Subd}iagnosticMessage>` (when some arguments are `String` and some are `&str`).
2023-05-15Move expansion of query macros in rustc_middle to rustc_middle::queryJohn Kåre Alsaker-1/+1
2023-05-13Rollup merge of #110454 - oli-obk:limited_impl_trait_in_assoc_type, ↵Dylan DPC-2/+2
r=compiler-errors Require impl Trait in associated types to appear in method signatures This implements the limited version of TAIT that was proposed in https://github.com/rust-lang/rust/issues/107645#issuecomment-1477899536 Similar to `impl Trait` in return types, `impl Trait` in associated types may only be used within the impl block which it is a part of. To make everything simpler and forward compatible to getting desugared to a plain type alias impl trait in the future, we're requiring that any associated functions or constants that want to register hidden types must be using the associated type in their signature (type of the constant or argument/return type of the associated method. Where bounds mentioning the associated type are ignored). We have preexisting tests checking that this works transitively across multiple associated types in situations like ```rust impl Foo for Bar { type A = impl Trait; type B = impl Iterator<Item = Self::A>; fn foo() -> Self::B { ...... } } ```
2023-05-12Auto merge of #111396 - vlad20012:reduce-Borrows-dataflow-bitset-size, ↵bors-1/+1
r=cjgillot Reduce BitSet size used in `Borrows` dataflow analysis It looks like it is not needed to multiply the number of borrows by 2. Bits greater than `self.borrow_set.len()` are never set in this bitset. This should decrease the memory usage by an epsilon.
2023-05-12Require `impl Trait` in associated types to appear in method signaturesOli Scherer-2/+2
2023-05-11Rollup merge of #111366 - obeis:ascribe-user-type-variance, r=lcnrMichael Goulet-2/+2
Make `NonUseContext::AscribeUserTy` carry `ty::Variance` Close #108267
2023-05-10Make `NonUseContext::AscribeUserTy` carry `ty::Variance`Obei Sideg-2/+2
2023-05-09Reduce BitSet size used in `Borrows` dataflow analysisvlad20012-1/+1
2023-05-09Rollup merge of #110583 - Ezrashaw:tweak-make-mut-spans, r=estebankDylan DPC-245/+264
tweak "make mut" spans when assigning to locals Work towards fixing #106857 This PR just cleans up a lot of spans which is helpful before properly fixing the issues. Best reviewed commit-by-commit. r? `@estebank`
2023-05-08Rollup merge of #110827 - compiler-errors:issue-110761-followup, r=cjgillotDylan DPC-3/+13
Fix lifetime suggestion for type aliases with objects in them Fixes an issue identified in https://github.com/rust-lang/rust/issues/110761#issuecomment-1520678479 This suggestion, like many other borrowck suggestions, are very fragile and there are other ways to trigger strange behavior even after this PR, so this is just a small improvement and not a total rework :skull:
2023-05-05fix trait definition spans in "make mut" suggestionEzra Shaw-196/+197
2023-05-05implement review commentEzra Shaw-2/+2
Co-authored-by: Esteban Kuber <estebank@users.noreply.github.com>
2023-05-05tweak spans for `ref mut` suggestionEzra Shaw-7/+9
2023-05-05tweak "make mut" spans (No. 4)Ezra Shaw-6/+6
2023-05-05tweak "make mut" spans (No. 3)Ezra Shaw-0/+4
2023-05-05tweak "make mut" spans (No. 2)Ezra Shaw-21/+27
2023-05-05tweak "make mut" spans when assigning to localsEzra Shaw-25/+31
2023-05-05Rollup merge of #111132 - lcnr:nll-generalize, r=b-naberYuki Okushi-8/+13
cleanup nll generalizer followup to #108861
2023-05-04Auto merge of #111014 - klensy:no-rc, r=WaffleLapkinbors-11/+8
try to downgrade Arc -> Lrc -> Rc -> no-Rc in few places Expecting this be not slower on non-parallel compiler and probably faster on parallel (checked that this PR builds on it).
2023-05-04Rollup merge of #111100 - BoxyUwU:array_repeat_expr_wf, r=compiler-errorsMatthias Krüger-0/+15
check array type of repeat exprs is wf Fixes #111091 Also makes sure that we actually renumber regions in the length of repeat exprs which we previously weren't doing and would cause ICEs in `adt_const_params` + `generic_const_exprs` from attempting to prove the wf goals when the length was an unevaluated constant with `'erased` in the `ty` field of `Const` The duplicate errors are caused by the fact that `const_arg_to_const`/`array_len_to_const` in `FnCtxt` adds a `WellFormed` goal for the created `Const` which is also checked by the added `WellFormed(array_ty)`. I don't want to change this to just emit a `T: Sized` goal for the element type since that would ignore `ConstArgHasType` wf requirements and generally uncomfortable with the idea of trying to sync up `wf::obligations` for arrays and the code in hir typeck for repeat exprs. r? `@compiler-errors`