| Age | Commit message (Collapse) | Author | Lines |
|
The "consider explicitly droping" can now suggest a machine applicable
suggestion now.
|
|
I forgot to add the diagnostic to the actual types in `std` earlier.
|
|
The `let_underscore_must_use` lint was really only added because clippy
included it, but it doesn't actually seem very useful.
|
|
We don't actually care about running these programs, only checking the
warnings they generate.
|
|
|
|
Clippy sets this lint to Deny by default, and it having the lint be Deny
is useful for when we test the lint against a Crater run.
|
|
This commit uses `span_suggestion_verbose` to add what specific code
changes can be done as suggested by the lint--in this case, either binding
the expression to an unused variable or using `std::mem::drop` to drop
the value explicitly.
|
|
These lints are very noisy and are allow-by-default in clippy anyways.
Hence, setting them to allow-by-default here makes more sense than
warning constantly on these cases.
|
|
This was done to pass `tidy`.
|
|
Similar to `let_underscore_drop`, this lint checks for statements similar
to `let _ = foo`, where `foo` is an expression marked `must_use`.
|
|
Similar to `let_underscore_drop`, this lint checks for statements similar
to `let _ = foo`, where `foo` is a lock guard. These types of let
statements are especially problematic because the lock gets released
immediately, instead of at the end of the scope. This behavior is almost
always the wrong thing.
|
|
This lint checks for statements similar to `let _ = foo`, where `foo` is
a type that implements `Drop`. These types of let statements cause the
expression in them to be dropped immediately, instead of at the end of
the scope. Such behavior can be surprizing, especially if you are
relying on the value to be dropped at the end of the scope. Instead, the
binding should be an underscore prefixed name (like `_unused`) or the
value should explicitly be passed to `std::mem::drop()` if the value
really should be dropped immediately.
|
|
Rollup of 7 pull requests
Successful merges:
- #97109 (Fix misleading `cannot infer type for type parameter` error)
- #97187 (Reverse condition in Vec::retain_mut doctest)
- #97201 (Fix typo)
- #97203 (Minor tweaks to rustc book summary formatting.)
- #97208 (Do not emit the lint `unused_attributes` for *inherent* `#[doc(hidden)]` associated items)
- #97215 (Add complexity estimation of iterating over HashSet and HashMap)
- #97220 (Add regression test for#81827)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
Add regression test for#81827
Closes #81827
r? `@compiler-errors`
|
|
Do not emit the lint `unused_attributes` for *inherent* `#[doc(hidden)]` associated items
Fixes #97205 (embarrassing oversight from #96008).
`@rustbot` label A-lint
|
|
TaKO8Ki:fix-misleading-cannot-infer-type-for-type-parameter-error, r=oli-obk
Fix misleading `cannot infer type for type parameter` error
closes #93198
|
|
|
|
Lint single-use lifetimes during AST resolution
This PR rewrites `single_use_lifetime` and `unused_lifetime` lints to be based on the AST.
We have more information at our disposal, so we can reduce the amount of false positives.
Remaining false positive: single-use lifetimes in argument-position impl-trait.
I'm waiting for https://github.com/rust-lang/rust/issues/96529 to be fixed to have a clean and proper solution here.
Closes https://github.com/rust-lang/rust/issues/54079
Closes https://github.com/rust-lang/rust/issues/55057
Closes https://github.com/rust-lang/rust/issues/55058
Closes https://github.com/rust-lang/rust/issues/60554
Closes https://github.com/rust-lang/rust/issues/69952
r? `@petrochenkov`
|
|
fix ci error
emit err for `impl_item`
|
|
Rollup of 6 pull requests
Successful merges:
- #96565 (rustdoc: show implementations on `#[fundamental]` wrappers)
- #97179 (Add new lint to enforce whitespace after keywords)
- #97185 (interpret/validity: separately control checking numbers for being init and non-ptr)
- #97188 (Remove unneeded null pointer asserts in ptr2int casts)
- #97189 (Update .mailmap)
- #97192 (Say "last" instead of "rightmost" in the documentation for `std::str:rfind`)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
interpret/validity: separately control checking numbers for being init and non-ptr
This lets Miri control this in a more fine-grained way.
r? `@oli-obk`
|
|
rustdoc: show implementations on `#[fundamental]` wrappers
Fixes #92940
|
|
|
|
|
|
|
|
|
|
r=nikomatsakis
generator_interior: Count match pattern bindings as borrowed for the whole guard expression
The test case `yielding-in-match-guard.rs` was failing with `-Zdrop-tracking` enabled. The reason is that the copy of a local (`y`) was not counted as a borrow in typeck, while MIR did consider this as borrowed.
The correct thing to do here is to count pattern bindings are borrowed for the whole guard. Instead, what we were doing is to record the type at the use site of the variable and check if the variable comes from a borrowed pattern. Due to the fix for #57017, we were considering too small of a scope for this variable, which meant it was not counted as borrowed.
Because we now unconditionally record the borrow, rather than only for bindings that are used, this PR is also able to remove a lot of the logic around match bindings that was there before.
r? `@nikomatsakis`
|
|
Use pointers in `cell::{Ref,RefMut}` to avoid `noalias`
When `Ref` and `RefMut` were based on references, they would get LLVM `noalias` attributes that were incorrect, because that alias guarantee is only true until the guard drops. A `&RefCell` on the same value can get a new borrow that aliases the previous guard, possibly leading to miscompilation. Using `NonNull` pointers in `Ref` and `RefCell` avoids `noalias`.
Fixes the library side of #63787, but we still might want to explore language solutions there.
|
|
|
|
This reverts commit 0d270b5e9f48268735f9a05462df65c9d1039855.
|
|
|
|
Thanks to @tmiasko for this one!
|
|
|
|
|
|
non-ptr
|
|
Add regression test for #88119
Closes #88119
|
|
Improve `u32 as char` cast diagnostic
Fixes #97160
|
|
|
|
|
|
Update MIR passes to handle unwinding Inline Asm
Some more follow up fixes from https://github.com/rust-lang/rust/pull/95864#issuecomment-1094165398
r? `@Amanieu`
|
|
|
|
Transition to valtrees pt1
Compartmentalising https://github.com/rust-lang/rust/pull/96591 as much as possible.
r? `@oli-obk`
|
|
use `hir::Let` in `hir::Guard::IfLet`
This PR fixes the FIXME about using `hir::Let` in `hir::Guard::IfLet`
|
|
Permit `asm_const` and `asm_sym` to reference generic params
Related #96557
These constructs will be allowed:
```rust
fn foofoo<const N: usize>() {}
unsafe fn foo<const N: usize>() {
asm!("/* {0} */", const N);
asm!("/* {0} */", const N + 1);
asm!("/* {0} */", sym foofoo::<N>);
}
fn barbar<T>() {}
unsafe fn bar<T>() {
asm!("/* {0} */", const std::mem::size_of::<T>());
asm!("/* {0} */", const std::mem::size_of::<(T, T)>());
asm!("/* {0} */", sym barbar::<T>);
asm!("/* {0} */", sym barbar::<(T, T)>);
}
```
`@Amanieu,` I didn't switch inline asms to use `DefKind::InlineAsm`, as I see little value doing that; given that no type inference is needed, it will only make typecking slower and more complex but will have no real gains. I did switch them to follow the same code path as inline asm during symbol resolution, though.
The `error: unconstrained generic constant` you mentioned in #76001 is due to the fact that `to_const` will actually add a wfness obligation to the constant, which we don't need for `asm_const`, so I have that removed.
`@rustbot` label: +A-inline-assembly +F-asm
|
|
--remap-path-prefix: Fix duplicated path components in debuginfo
This PR fixes an issue with `--remap-path-prefix` where path components could appear twice in the remapped version of the path (e.g. https://github.com/rust-lang/rust/issues/78479). The underlying problem was that `--remap-path-prefix` is often used to map an absolute path to something that looks like a relative path, e.g.:
```
--remap-path-prefix=/home/calvin/.cargo/registry/src/github.com-1ecc6299db9ec823=crates.io",
```
and relative paths in debuginfo are interpreted as being relative to the compilation directory. So if Cargo invokes the compiler with `/home/calvin/.cargo/registry/src/github.com-1ecc6299db9ec823/some_crate-0.1.0/src/lib.rs` as input and `/home/calvin/.cargo/registry/src/github.com-1ecc6299db9ec823/some_crate-0.1.0` as the compiler's working directory, then debuginfo will state that the working directory was `crates.io/some_crate-0.1.0` and the file is question was `crates.io/some_crate-0.1.0/src/lib.rs`, which combined gives the path:
```
crates.io/some_crate-0.1.0/crates.io/some_crate-0.1.0/src/lib.rs
```
With this PR the compiler will detect this situation and set up debuginfo in LLVM in a way that makes it strip the duplicated path components when emitting DWARF.
The PR also extracts the logic for making remapped paths absolute into a common helper function that is now used by debuginfo too (instead of just during crate metadata generation).
|
|
|
|
Clean fix for #96223
Okay, so here we are (hopefully) :+1:
Closes #96223
Thanks a lot to `@jackh726` for your help and explanation :pray:
- Modified `InferCtxt::mk_trait_obligation_with_new_self_ty` to take as argument a `Binder<(TraitPredicate, Ty)>` instead of a `Binder<TraitPredicate>` and a separate `Ty` with no bound vars.
- Modified all call places to avoid calling `Binder::no_bounds_var` or `Binder::skip_binder` when it is not safe.
r? `@jackh726`
|
|
Mention traits and types involved in unstable trait upcasting
Fixes #95972 by printing the traits being upcasted and the types being coerced that cause that upcasting...
---
the poor span mentioned in the original issue has nothing to do with trait upcasting diagnostic here...
> The original example I had that made me run into this issue had an even longer expression there (multiple chained
iterator methods) which just got all highlighted as one big block saying "somewhere here trait coercion is used and it's not allowed".
I don't think I can solve that issue in general without fixing the ObligationCauseCode and span that gets passed into Coerce.
|
|
update coherence docs, fix generator + opaque type ICE
the world is confusing, this makes it slightly less so
|
|
Suggest dereferencing non-lval mutable reference on assignment
1. Adds deref suggestions for LHS of assignment (or assign-binop) when it implements `DerefMut`
2. Fixes missing deref suggestions for LHS when it isn't a place expr
Fixes #46276
Fixes #93980
|