| Age | Commit message (Collapse) | Author | Lines |
|
(cherry picked from commit 94bf8f04f402a2410ab85a6e6b9e542e3942b2a2)
|
|
(cherry picked from commit ebbcfd4e7721aaf3211f0e8d3d6e304400c80f78)
|
|
|
|
E0277: suggest dereferencing function arguments in more cases
This unifies and generalizes some of the logic in `TypeErrCtxt::suggest_dereferences` so that it will suggest dereferencing arguments to function/method calls in order to satisfy trait bounds in more cases.
Previously it would only fire on reference types, and it had two separate cases (one specifically to get through custom `Deref` impls when passing by-reference, and one specifically to catch #87437). I've based the new checks loosely on what's done for `E0308` in `FnCtxt::suggest_deref_or_ref`: it will suggest dereferences to satisfy trait bounds whenever the referent is `Copy`, is boxed (& so can be moved out of the boxes), or is being passed by reference.
This doesn't make the suggestion fire in contexts other than function arguments or binary operators (which are in a separate case that this doesn't touch), and doesn't make it suggest a combination of `&`-removal and dereferences. Those would require a bit more restructuring, so I figured just doing this would be a decent first step.
Closes #90997
|
|
Convert some `Into` impls into `From` impls
From the [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) docs:
> One should always prefer implementing `From` over [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) because implementing `From` automatically provides one with an implementation of [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) thanks to the blanket implementation in the standard library.
>
> Only implement [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) when targeting a version prior to Rust 1.41 and converting to a type outside the current crate. `From` was not able to do these types of conversions in earlier versions because of Rust’s orphaning rules. See [Into](https://doc.rust-lang.org/std/convert/trait.Into.html) for more details.
Some of these impls are likely from before 1.41, and then some others were probably just mistakes. Building nightly rust is definitely not supported on 1.41, so let's modernize these impls :D
|
|
|
|
|
|
Some random region tweaks
Remove a redundant function and add an assertion that I think is useful
|
|
Fix typos
This PR focuses on correcting typos and improving clarity in documentation files. Thank you.
|
|
Signed-off-by: chloefeal <188809157+chloefeal@users.noreply.github.com>
|
|
|
|
|
|
Rollup of 5 pull requests
Successful merges:
- #134638 (Fix effect predicates from item bounds in old solver)
- #134662 (Fix safety docs for `dyn Any + Send {+ Sync}`)
- #134689 (core: fix const ptr::swap_nonoverlapping when there are pointers at odd offsets)
- #134699 (Belay new reviews for workingjubilee)
- #134701 (Correctly note item kind in `NonConstFunctionCall` error message)
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
Fix effect predicates from item bounds in old solver
r? lcnr
|
|
|
|
Make sure we note ambiguity causes on positive/negative impl conflicts
Fixes https://github.com/rust-lang/rust/issues/134632 by explaining why the error must be
|
|
|
|
|
|
handle member constraints directly in the mir type checker
cleaner, faster, easier to change going forward :> fixes #109654
r? `@oli-obk` `@compiler-errors`
|
|
Instead use dcx.abort_if_error() or guar.raise_fatal() instead. These
guarantee that an error actually happened previously and thus we don't
silently abort.
|
|
|
|
cleanup region handling: add `LateParamRegionKind`
The second commit is to enable a split between `BoundRegionKind` and `LateParamRegionKind`, by avoiding `BoundRegionKind` where it isn't necessary.
The third comment then adds `LateParamRegionKind` to avoid having the same late-param region for separate bound regions. This fixes #124021.
r? `@compiler-errors`
|
|
Signed-off-by: acceptacross <csqcqs@gmail.com>
|
|
|
|
Re-export more `rustc_span::symbol` things from `rustc_span`.
`rustc_span::symbol` defines some things that are re-exported from `rustc_span`, such as `Symbol` and `sym`. But it doesn't re-export some closely related things such as `Ident` and `kw`. So you can do `use rustc_span::{Symbol, sym}` but you have to do `use rustc_span::symbol::{Ident, kw}`, which is inconsistent for no good reason.
This commit re-exports `Ident`, `kw`, and `MacroRulesNormalizedIdent`, and changes many `rustc_span::symbol::` qualifiers to `rustc_span::`. This is a 300+ net line of code reduction, mostly because many files with two `use rustc_span` items can be reduced to one.
r? `@jieyouxu`
|
|
`rustc_span::symbol` defines some things that are re-exported from
`rustc_span`, such as `Symbol` and `sym`. But it doesn't re-export some
closely related things such as `Ident` and `kw`. So you can do `use
rustc_span::{Symbol, sym}` but you have to do `use
rustc_span::symbol::{Ident, kw}`, which is inconsistent for no good
reason.
This commit re-exports `Ident`, `kw`, and `MacroRulesNormalizedIdent`,
and changes many `rustc_span::symbol::` qualifiers in `compiler/` to
`rustc_span::`. This is a 200+ net line of code reduction, mostly
because many files with two `use rustc_span` items can be reduced to
one.
|
|
Add a range argument to vec.extract_if
tracking issue: #43244
This adds the range argument requested in https://github.com/rust-lang/rust/issues/43244#issuecomment-2486160659
|
|
Split up attribute parsing code and move data types to `rustc_attr_data_structures`
This change renames `rustc_attr` to `rustc_attr_parsing`, and splits up the parsing code. At the same time, all the data types used move to `rustc_attr_data_structures`. This is in preparation of also having a third crate: `rustc_attr_validation`
I initially envisioned this as two separate PRs, but I think doing it in one go reduces the number of ways others would have to rebase their changes on this. However, I can still split them.
r? `@oli-obk` (we already discussed how this is a first step in a larger plan)
For a more detailed plan on how attributes are going to change, see https://github.com/rust-lang/rust/issues/131229
Edit: this looks like a giant PR, but the changes are actually rather trivial. Each commit is reviewable on its own, and mostly moves code around. No new logic is added.
|
|
Rollup of 10 pull requests
Successful merges:
- #134202 (Remove `rustc::existing_doc_keyword` lint)
- #134354 (Handle fndef rendering together with signature rendering)
- #134365 (Rename `rustc_mir_build::build` to `builder`)
- #134368 (Use links to edition guide for edition migrations)
- #134397 (rustc_borrowck: Suggest changing `&raw const` to `&raw mut` if applicable)
- #134398 (AIX: add alignment info for test)
- #134400 (Fix some comments related to upvars handling)
- #134406 (Fix `-Z input-stats` ordering)
- #134409 (bootstrap: fix a comment)
- #134412 (small borrowck cleanup)
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
small borrowck cleanup
the already approved parts of #133909 and #133961
r? `@jackh726`
|
|
Handle fndef rendering together with signature rendering
Pulled out of https://github.com/rust-lang/rust/pull/134353
Changes some highlighting in type mismatch errors around fndefs
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Add some convenience helper methods on `hir::Safety`
Makes a lot of call sites simpler and should make any refactorings needed for https://github.com/rust-lang/rust/pull/134090#issuecomment-2541332415 simpler, as fewer sites have to be touched in case we end up storing some information in the variants of `hir::Safety`
|
|
Suggest using deref in patterns
Fixes #132784
This changes the following code:
```rs
use std::sync::Arc;
fn main() {
let mut x = Arc::new(Some(1));
match x {
Some(_) => {}
None => {}
}
}
```
to output
```rs
error[E0308]: mismatched types
--> src/main.rs:5:9
|
LL | match x {
| - this expression has type `Arc<Option<{integer}>>`
...
LL | Some(_) => {}
| ^^^^^^^ expected `Arc<Option<{integer}>>`, found `Option<_>`
|
= note: expected struct `Arc<Option<{integer}>>`
found enum `Option<_>`
help: consider dereferencing to access the inner value using the Deref trait
|
LL | match *x {
| ~~
```
instead of
```rs
error[E0308]: mismatched types
--> src/main.rs:5:9
|
4 | match x {
| - this expression has type `Arc<Option<{integer}>>`
5 | Some(_) => {}
| ^^^^^^^ expected `Arc<Option<{integer}>>`, found `Option<_>`
|
= note: expected struct `Arc<Option<{integer}>>`
found enum `Option<_>`
```
This makes it more obvious that a Deref is available, and gives a suggestion on how to use it in order to fix the issue at hand.
|
|
|
|
|
|
|
|
Fixes #132784
|
|
Move impl constness into impl trait header
This PR is kind of the opposite of the rejected https://github.com/rust-lang/rust/pull/134114
Instead of moving more things into the `constness` query, we want to keep them where their corresponding hir nodes are lowered. So I gave this a spin for impls, which have an obvious place to be (the impl trait header). And surprisingly it's also a perf improvement (likely just slightly better query & cache usage).
The issue was that removing anything from the `constness` query makes it just return `NotConst`, which is wrong. So I had to change it to `bug!` out if used wrongly, and only then remove the impl blocks from the `constness` query. I think this change is good in general, because it makes using `constness` more robust (as can be seen by how few sites that had to be changed, so it was almost solely used specifically for the purpose of asking for functions' constness). The main thing where this change was not great was in clippy, which was using the `constness` query as a general DefId -> constness map. I added a `DefKind` filter in front of that. If it becomes a more common pattern we can always move that helper into rustc.
|