| Age | Commit message (Collapse) | Author | Lines |
|
|
|
When given `struct Foo(usize)` and using it as `Foo {}` or `Foo`, point at
`Foo`'s definition in the error.
|
|
Use span label instead of note in unreachable lint
Fix #64636.
|
|
|
|
|
|
|
|
unify errors for tuple/struct variants
fix #63983
|
|
Add explanation to type mismatch involving type params and assoc types
CC #63711
|
|
fix #63983
|
|
Fix the span used to suggest avoiding for-loop moves
It was using the snippet from the "use" span, which often renders the
same, but with closures that snippet is on the start of the closure
where the value is captured. We should be using the snippet from the
span where it was moved into the `for` loop, which is `move_span`.
Fixes #64559.
|
|
Exempt extern "Rust" from improper_ctypes
It should be fine for Rust ABIs to involve any Rust type.
Fixes #64593.
|
|
Add long error explanation for E0312
Part of #61137.
|
|
It was using the snippet from the "use" span, which often renders the
same, but with closures that snippet is on the start of the closure
where the value is captured. We should be using the snippet from the
span where it was moved into the `for` loop, which is `move_span`.
|
|
It should be fine for Rust ABIs to involve any Rust type.
|
|
When possible point at argument causing item obligation failure
Fix https://github.com/rust-lang/rust/issues/41781, fix https://github.com/rust-lang/rust/issues/42855, fix https://github.com/rust-lang/rust/issues/46658, fix https://github.com/rust-lang/rust/issues/48099, fix https://github.com/rust-lang/rust/issues/63143.
|
|
|
|
Point at original span when emitting unreachable lint
Fixes #64590
When we emit an 'unreachable' lint, we now add a note pointing at the
expression that actually causes the code to be unreachable (e.g.
`return`, `break`, `panic`).
This is especially useful when macros are involved, since a diverging
expression might be hidden inside of a macro invocation.
|
|
|
|
Fixes #64590
When we emit an 'unreachable' lint, we now add a note pointing at the
expression that actually causes the code to be unreachable (e.g.
`return`, `break`, `panic`).
This is especially useful when macros are involved, since a diverging
expression might be hidden inside of a macro invocation.
|
|
|
|
|
|
|
|
|
|
|
|
Warn on no_start, crate_id attribute use
These attributes are now deprecated; they don't have any use anymore.
`no_start` stopped being applicable in 3ee916e50bd86768cb2a9141f9b2c52d2601b412 as part of #18967. Ideally we would've removed it pre-1.0, but since that didn't happen let's at least mark it deprecated.
`crate_id` was renamed to `crate_name` in 50ee1ec1b4f107122d8037ac7b0b312afa6eb0ac as part of #15319. Ideally we would've followed that up with a removal of crate_id itself as well, but that didn't happen; this PR finally marks it as deprecated at least.
Fixes https://github.com/rust-lang/rust/issues/43142 and resolves https://github.com/rust-lang/rust/issues/43144.
|
|
resolve: Tweak some expected/found wording
|
|
These attributes are now deprecated; they don't have any use anymore.
|
|
Provide a span if main function is not present in crate
Unfortunately, the diagnostic machinery does not cope well with an empty
span which can happen if the crate is empty, in which case we merely set
a spanless note.
Tests are already updated for this change, so a dedicated test is not added.
Resolves #36561.
|
|
|
|
Unfortunately, the diagnotic machinery does not cope well with an empty
span which can happen if the crate is empty, in which case we merely set
a spanless note.
|
|
fix #64430, confusing `owned_box` error message in no_std build
Fixes #64430
|
|
|
|
|
|
Forbid opaque types in `extern "C"` blocks
Fixes #64338.
|
|
|
|
check_match: refactor + improve non-exhaustive diagnostics for default binding modes
Refactor `check_match` a bit with more code-reuse and improve the diagnostics for a non-exhaustive pattern match by peeling off any references from the scrutinee type so that the "defined here" label is added in more cases. For example:
```rust
error[E0004]: non-exhaustive patterns: `&mut &B` not covered
--> foo.rs:4:11
|
1 | enum E { A, B }
| ---------------
| | |
| | not covered
| `E` defined here
...
4 | match x {
| ^ pattern `&mut &B` not covered
|
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
```
Moreover, wrt. "defined here", we give irrefutable pattern matching (i.e. in `let`, `for`, and `fn` parameters) a more consistent treatment in line with `match`.
r? @estebank
|
|
|
|
Rollup of 5 pull requests
Successful merges:
- #63468 (Resolve attributes in several places)
- #64121 (Override `StepBy::{try_fold, try_rfold}`)
- #64278 (check git in bootstrap.py)
- #64306 (Fix typo in config.toml.example)
- #64312 (Unify escape usage)
Failed merges:
r? @ghost
|
|
Resolve attributes in several places
Resolve attributes for Arm, Field, FieldPat, GenericParam, Param, StructField and Variant.
This PR is based on @petrochenkov work located at https://github.com/petrochenkov/rust/commit/83fdb8d598c1a871d40b21faed64ee698b74f814.
|
|
|
|
Stabilize `bind_by_move_pattern_guards` in Rust 1.39.0
Closes https://github.com/rust-lang/rust/issues/15287.
After stabilizing `#![feature(bind_by_move_pattern_guards)]`, you can now use bind-by-move bindings in patterns and take references to those bindings in `if` guards of `match` expressions. For example, the following now becomes legal:
```rust
fn main() {
let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);
match array {
nums
// ---- `nums` is bound by move.
if nums.iter().sum::<u8>() == 10
// ^------ `.iter()` implicitly takes a reference to `nums`.
=> {
drop(nums);
// --------- Legal as `nums` was bound by move and so we have ownership.
}
_ => unreachable!(),
}
}
```
r? @matthewjasper
|
|
Arm, Field, FieldPat, GenericParam, Param, StructField and Variant
|
|
Give method not found a primary span label
|
|
|
|
Do not complain about unconstrained params when Self is Ty Error
Fix #36836.
|
|
|
|
|
|
Correct pluralisation of various diagnostic messages
|
|
|
|
|