Skip to content

write! is somehow masking the #[must_use] on its result #55516

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Closed
pnkfelix opened this issue Oct 30, 2018 · 6 comments
Closed

write! is somehow masking the #[must_use] on its result #55516

pnkfelix opened this issue Oct 30, 2018 · 6 comments
Labels
A-lints Area: Lints (warnings about flaws in source code) such as unused_mut. C-bug Category: This is a bug. regression-from-stable-to-stable Performance or correctness regression from one stable version to another.

Comments

@pnkfelix
Copy link
Member

pnkfelix commented Oct 30, 2018

Hat tip to @shepmaster for finding this

play

fn main() {
    use std::fmt::Write;
    let mut example = String::new();
    write!(&mut example, "{}", 42);
}

is not triggering the #[must_use] lint on Result.

@pnkfelix pnkfelix added the regression-from-stable-to-stable Performance or correctness regression from one stable version to another. label Oct 30, 2018
@shepmaster
Copy link
Member

This code compiles with warnings in Rust 1.28.0, but no warnings in Rust 1.29.0

fn main() {
    use std::fmt::Write;
    let mut example = String::new();
    write!(&mut example, "{}", 42);
}
$ cargo +1.28.0 build
   Compiling xz v0.1.0 (file:///private/tmp/xz)
warning: unused `std::result::Result` which must be used
 --> src/main.rs:4:5
  |
4 |     write!(&mut example, "{}", 42);
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[warn(unused_must_use)] on by default
  = note: this `Result` may be an `Err` variant, which should be handled
  = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)

    Finished dev [unoptimized + debuginfo] target(s) in 1.02s

$ cargo clean
$ cargo +1.29.0 build
   Compiling xz v0.1.0 (file:///private/tmp/xz)
    Finished dev [unoptimized + debuginfo] target(s) in 1.09s

Potentially related to #54288.

@kennytm kennytm added A-lints Area: Lints (warnings about flaws in source code) such as unused_mut. C-bug Category: This is a bug. labels Oct 30, 2018
@shepmaster
Copy link
Member

Expanding the macro and compiling does have the warning:

fn main() {
    use std::fmt::Write;
    let mut example = String::new();
    (&mut example).write_fmt(format_args!("{}", 42));
}
$ cargo clean
$ cargo +1.29.0 build
   Compiling xz v0.1.0 (file:///private/tmp/xz)
warning: unused `std::result::Result` which must be used
 --> src/main.rs:4:5
  |
4 |     (&mut example).write_fmt(format_args!("{}", 42));
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[warn(unused_must_use)] on by default
  = note: this `Result` may be an `Err` variant, which should be handled

    Finished dev [unoptimized + debuginfo] target(s) in 0.56s

@ehuss
Copy link
Contributor

ehuss commented Oct 30, 2018

Seems related to #52467.

@shepmaster
Copy link
Member

related to #52467.

/cc @alexcrichton

@alexcrichton
Copy link
Member

Ah oops, definitely a mistake! I believe a fix for this would be to set report_in_external_macro (like in this macro) for the definition of the unused must use lint as well

@varkor
Copy link
Member

varkor commented Nov 3, 2018

Will #55240 also be fixed by this?

bors added a commit that referenced this issue Nov 4, 2018
enforce unused-must-use lint in macros

Fixes #55516 by turning on the UNUSED_MUST_USE lint within macros.
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-lints Area: Lints (warnings about flaws in source code) such as unused_mut. C-bug Category: This is a bug. regression-from-stable-to-stable Performance or correctness regression from one stable version to another.
Projects
None yet
Development

No branches or pull requests

6 participants