Rollup merge of #104363 - WaffleLapkin:bonk_box_new, r=Nilstrieb
Make `unused_allocation` lint against `Box::new` too
Previously it only linted against `box` syntax, which likely won't ever be stabilized, which is pretty useless. Even now I'm not sure if it's a meaningful lint, but it's at least something 🤷
This means that code like the following will be linted against:
```rust
Box::new([1, 2, 3]).len();
f(&Box::new(1)); // where f : &i32 -> ()
```
The lint works by checking if a `Box::new` (or `box`) expression has an a borrow adjustment, meaning that the code that first stores the box in a variable won't be linted against:
```rust
let boxed = Box::new([1, 2, 3]); // no lint
boxed.len();
```
This commit is contained in:
commit
fbc121fdfd
11 changed files with 59 additions and 39 deletions
7
tests/ui/lint/unused/unused-allocation.rs
Normal file
7
tests/ui/lint/unused/unused-allocation.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#![feature(rustc_attrs, stmt_expr_attributes)]
|
||||
#![deny(unused_allocation)]
|
||||
|
||||
fn main() {
|
||||
_ = (#[rustc_box] Box::new([1])).len(); //~ error: unnecessary allocation, use `&` instead
|
||||
_ = Box::new([1]).len(); //~ error: unnecessary allocation, use `&` instead
|
||||
}
|
||||
20
tests/ui/lint/unused/unused-allocation.stderr
Normal file
20
tests/ui/lint/unused/unused-allocation.stderr
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
error: unnecessary allocation, use `&` instead
|
||||
--> $DIR/unused-allocation.rs:5:9
|
||||
|
|
||||
LL | _ = (#[rustc_box] Box::new([1])).len();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/unused-allocation.rs:2:9
|
||||
|
|
||||
LL | #![deny(unused_allocation)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unnecessary allocation, use `&` instead
|
||||
--> $DIR/unused-allocation.rs:6:9
|
||||
|
|
||||
LL | _ = Box::new([1]).len();
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue