Skip to content

Commit a475d2e

Browse files
author
lukas
committed
Mark format! with must_use hint
1 parent 51917ba commit a475d2e

11 files changed

+79
-75
lines changed

library/alloc/src/collections/btree/map/tests.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -1796,18 +1796,18 @@ fn test_ord_absence() {
17961796
}
17971797

17981798
fn map_debug<K: Debug>(mut map: BTreeMap<K, ()>) {
1799-
format!("{map:?}");
1800-
format!("{:?}", map.iter());
1801-
format!("{:?}", map.iter_mut());
1802-
format!("{:?}", map.keys());
1803-
format!("{:?}", map.values());
1804-
format!("{:?}", map.values_mut());
1799+
let _ = format!("{map:?}");
1800+
let _ = format!("{:?}", map.iter());
1801+
let _ = format!("{:?}", map.iter_mut());
1802+
let _ = format!("{:?}", map.keys());
1803+
let _ = format!("{:?}", map.values());
1804+
let _ = format!("{:?}", map.values_mut());
18051805
if true {
1806-
format!("{:?}", map.into_iter());
1806+
let _ = format!("{:?}", map.into_iter());
18071807
} else if true {
1808-
format!("{:?}", map.into_keys());
1808+
let _ = format!("{:?}", map.into_keys());
18091809
} else {
1810-
format!("{:?}", map.into_values());
1810+
let _ = format!("{:?}", map.into_values());
18111811
}
18121812
}
18131813

library/alloc/src/collections/btree/set/tests.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -705,9 +705,9 @@ fn test_ord_absence() {
705705
}
706706

707707
fn set_debug<K: Debug>(set: BTreeSet<K>) {
708-
format!("{set:?}");
709-
format!("{:?}", set.iter());
710-
format!("{:?}", set.into_iter());
708+
let _ = format!("{set:?}");
709+
let _ = format!("{:?}", set.iter());
710+
let _ = format!("{:?}", set.into_iter());
711711
}
712712

713713
fn set_clone<K: Clone>(mut set: BTreeSet<K>) {

library/alloc/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ pub mod vec;
256256
#[unstable(feature = "liballoc_internals", issue = "none", reason = "implementation detail")]
257257
pub mod __export {
258258
pub use core::format_args;
259+
pub use core::hint::must_use;
259260
}
260261

261262
#[cfg(test)]

library/alloc/src/macros.rs

+7-4
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,13 @@ macro_rules! vec {
119119
/// ```
120120
#[macro_export]
121121
#[stable(feature = "rust1", since = "1.0.0")]
122+
#[allow_internal_unstable(hint_must_use, liballoc_internals)]
122123
#[cfg_attr(not(test), rustc_diagnostic_item = "format_macro")]
123124
macro_rules! format {
124-
($($arg:tt)*) => {{
125-
let res = $crate::fmt::format($crate::__export::format_args!($($arg)*));
126-
res
127-
}}
125+
($($arg:tt)*) => {
126+
$crate::__export::must_use({
127+
let res = $crate::fmt::format($crate::__export::format_args!($($arg)*));
128+
res
129+
})
130+
}
128131
}

library/alloc/tests/fmt.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -217,19 +217,19 @@ fn test_format_macro_interface() {
217217

218218
// make sure that format! doesn't move out of local variables
219219
let a = Box::new(3);
220-
format!("{a}");
221-
format!("{a}");
220+
let _ = format!("{a}");
221+
let _ = format!("{a}");
222222

223223
// make sure that format! doesn't cause spurious unused-unsafe warnings when
224224
// it's inside of an outer unsafe block
225225
unsafe {
226226
let a: isize = ::std::mem::transmute(3_usize);
227-
format!("{a}");
227+
let _ = format!("{a}");
228228
}
229229

230230
// test that trailing commas are acceptable
231-
format!("{}", "test",);
232-
format!("{foo}", foo = "test",);
231+
let _ = format!("{}", "test",);
232+
let _ = format!("{foo}", foo = "test",);
233233
}
234234

235235
// Basic test to make sure that we can invoke the `write!` macro with an

library/core/tests/fmt/builders.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ mod debug_map {
441441
}
442442
}
443443

444-
format!("{Foo:?}");
444+
let _ = format!("{Foo:?}");
445445
}
446446

447447
#[test]
@@ -455,7 +455,7 @@ mod debug_map {
455455
}
456456
}
457457

458-
format!("{Foo:?}");
458+
let _ = format!("{Foo:?}");
459459
}
460460

461461
#[test]
@@ -469,7 +469,7 @@ mod debug_map {
469469
}
470470
}
471471

472-
format!("{Foo:?}");
472+
let _ = format!("{Foo:?}");
473473
}
474474
}
475475

tests/ui/deriving/deriving-in-fn.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ pub fn main() {
99
}
1010

1111
let f = Foo { foo: 10 };
12-
format!("{:?}", f);
12+
let _ = format!("{:?}", f);
1313
}

tests/ui/fmt/struct-field-as-captured-argument.fixed

+7-7
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ struct Foo {
88
fn main() {
99
let foo = Foo { field: 0 };
1010
let bar = 3;
11-
format!("{0}", foo.field); //~ ERROR invalid format string: field access isn't supported
12-
format!("{1} {} {bar}", "aa", foo.field); //~ ERROR invalid format string: field access isn't supported
13-
format!("{2} {} {1} {bar}", "aa", "bb", foo.field); //~ ERROR invalid format string: field access isn't supported
14-
format!("{1} {} {baz}", "aa", foo.field, baz = 3); //~ ERROR invalid format string: field access isn't supported
15-
format!("{1:?} {} {baz}", "aa", foo.field, baz = 3); //~ ERROR invalid format string: field access isn't supported
16-
format!("{1:#?} {} {baz}", "aa", foo.field, baz = 3); //~ ERROR invalid format string: field access isn't supported
17-
format!("{1:.3} {} {baz}", "aa", foo.field, baz = 3); //~ ERROR invalid format string: field access isn't supported
11+
let _ = format!("{0}", foo.field); //~ ERROR invalid format string: field access isn't supported
12+
let _ = format!("{1} {} {bar}", "aa", foo.field); //~ ERROR invalid format string: field access isn't supported
13+
let _ = format!("{2} {} {1} {bar}", "aa", "bb", foo.field); //~ ERROR invalid format string: field access isn't supported
14+
let _ = format!("{1} {} {baz}", "aa", foo.field, baz = 3); //~ ERROR invalid format string: field access isn't supported
15+
let _ = format!("{1:?} {} {baz}", "aa", foo.field, baz = 3); //~ ERROR invalid format string: field access isn't supported
16+
let _ = format!("{1:#?} {} {baz}", "aa", foo.field, baz = 3); //~ ERROR invalid format string: field access isn't supported
17+
let _ = format!("{1:.3} {} {baz}", "aa", foo.field, baz = 3); //~ ERROR invalid format string: field access isn't supported
1818
}

tests/ui/fmt/struct-field-as-captured-argument.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ struct Foo {
88
fn main() {
99
let foo = Foo { field: 0 };
1010
let bar = 3;
11-
format!("{foo.field}"); //~ ERROR invalid format string: field access isn't supported
12-
format!("{foo.field} {} {bar}", "aa"); //~ ERROR invalid format string: field access isn't supported
13-
format!("{foo.field} {} {1} {bar}", "aa", "bb"); //~ ERROR invalid format string: field access isn't supported
14-
format!("{foo.field} {} {baz}", "aa", baz = 3); //~ ERROR invalid format string: field access isn't supported
15-
format!("{foo.field:?} {} {baz}", "aa", baz = 3); //~ ERROR invalid format string: field access isn't supported
16-
format!("{foo.field:#?} {} {baz}", "aa", baz = 3); //~ ERROR invalid format string: field access isn't supported
17-
format!("{foo.field:.3} {} {baz}", "aa", baz = 3); //~ ERROR invalid format string: field access isn't supported
11+
let _ = format!("{foo.field}"); //~ ERROR invalid format string: field access isn't supported
12+
let _ = format!("{foo.field} {} {bar}", "aa"); //~ ERROR invalid format string: field access isn't supported
13+
let _ = format!("{foo.field} {} {1} {bar}", "aa", "bb"); //~ ERROR invalid format string: field access isn't supported
14+
let _ = format!("{foo.field} {} {baz}", "aa", baz = 3); //~ ERROR invalid format string: field access isn't supported
15+
let _ = format!("{foo.field:?} {} {baz}", "aa", baz = 3); //~ ERROR invalid format string: field access isn't supported
16+
let _ = format!("{foo.field:#?} {} {baz}", "aa", baz = 3); //~ ERROR invalid format string: field access isn't supported
17+
let _ = format!("{foo.field:.3} {} {baz}", "aa", baz = 3); //~ ERROR invalid format string: field access isn't supported
1818
}
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,79 @@
11
error: invalid format string: field access isn't supported
2-
--> $DIR/struct-field-as-captured-argument.rs:11:15
2+
--> $DIR/struct-field-as-captured-argument.rs:11:23
33
|
4-
LL | format!("{foo.field}");
5-
| ^^^^^^^^^ not supported in format string
4+
LL | let _ = format!("{foo.field}");
5+
| ^^^^^^^^^ not supported in format string
66
|
77
help: consider using a positional formatting argument instead
88
|
9-
LL | format!("{0}", foo.field);
10-
| ~ +++++++++++
9+
LL | let _ = format!("{0}", foo.field);
10+
| ~ +++++++++++
1111

1212
error: invalid format string: field access isn't supported
13-
--> $DIR/struct-field-as-captured-argument.rs:12:15
13+
--> $DIR/struct-field-as-captured-argument.rs:12:23
1414
|
15-
LL | format!("{foo.field} {} {bar}", "aa");
16-
| ^^^^^^^^^ not supported in format string
15+
LL | let _ = format!("{foo.field} {} {bar}", "aa");
16+
| ^^^^^^^^^ not supported in format string
1717
|
1818
help: consider using a positional formatting argument instead
1919
|
20-
LL | format!("{1} {} {bar}", "aa", foo.field);
21-
| ~ +++++++++++
20+
LL | let _ = format!("{1} {} {bar}", "aa", foo.field);
21+
| ~ +++++++++++
2222

2323
error: invalid format string: field access isn't supported
24-
--> $DIR/struct-field-as-captured-argument.rs:13:15
24+
--> $DIR/struct-field-as-captured-argument.rs:13:23
2525
|
26-
LL | format!("{foo.field} {} {1} {bar}", "aa", "bb");
27-
| ^^^^^^^^^ not supported in format string
26+
LL | let _ = format!("{foo.field} {} {1} {bar}", "aa", "bb");
27+
| ^^^^^^^^^ not supported in format string
2828
|
2929
help: consider using a positional formatting argument instead
3030
|
31-
LL | format!("{2} {} {1} {bar}", "aa", "bb", foo.field);
32-
| ~ +++++++++++
31+
LL | let _ = format!("{2} {} {1} {bar}", "aa", "bb", foo.field);
32+
| ~ +++++++++++
3333

3434
error: invalid format string: field access isn't supported
35-
--> $DIR/struct-field-as-captured-argument.rs:14:15
35+
--> $DIR/struct-field-as-captured-argument.rs:14:23
3636
|
37-
LL | format!("{foo.field} {} {baz}", "aa", baz = 3);
38-
| ^^^^^^^^^ not supported in format string
37+
LL | let _ = format!("{foo.field} {} {baz}", "aa", baz = 3);
38+
| ^^^^^^^^^ not supported in format string
3939
|
4040
help: consider using a positional formatting argument instead
4141
|
42-
LL | format!("{1} {} {baz}", "aa", foo.field, baz = 3);
43-
| ~ +++++++++++
42+
LL | let _ = format!("{1} {} {baz}", "aa", foo.field, baz = 3);
43+
| ~ +++++++++++
4444

4545
error: invalid format string: field access isn't supported
46-
--> $DIR/struct-field-as-captured-argument.rs:15:15
46+
--> $DIR/struct-field-as-captured-argument.rs:15:23
4747
|
48-
LL | format!("{foo.field:?} {} {baz}", "aa", baz = 3);
49-
| ^^^^^^^^^ not supported in format string
48+
LL | let _ = format!("{foo.field:?} {} {baz}", "aa", baz = 3);
49+
| ^^^^^^^^^ not supported in format string
5050
|
5151
help: consider using a positional formatting argument instead
5252
|
53-
LL | format!("{1:?} {} {baz}", "aa", foo.field, baz = 3);
54-
| ~ +++++++++++
53+
LL | let _ = format!("{1:?} {} {baz}", "aa", foo.field, baz = 3);
54+
| ~ +++++++++++
5555

5656
error: invalid format string: field access isn't supported
57-
--> $DIR/struct-field-as-captured-argument.rs:16:15
57+
--> $DIR/struct-field-as-captured-argument.rs:16:23
5858
|
59-
LL | format!("{foo.field:#?} {} {baz}", "aa", baz = 3);
60-
| ^^^^^^^^^ not supported in format string
59+
LL | let _ = format!("{foo.field:#?} {} {baz}", "aa", baz = 3);
60+
| ^^^^^^^^^ not supported in format string
6161
|
6262
help: consider using a positional formatting argument instead
6363
|
64-
LL | format!("{1:#?} {} {baz}", "aa", foo.field, baz = 3);
65-
| ~ +++++++++++
64+
LL | let _ = format!("{1:#?} {} {baz}", "aa", foo.field, baz = 3);
65+
| ~ +++++++++++
6666

6767
error: invalid format string: field access isn't supported
68-
--> $DIR/struct-field-as-captured-argument.rs:17:15
68+
--> $DIR/struct-field-as-captured-argument.rs:17:23
6969
|
70-
LL | format!("{foo.field:.3} {} {baz}", "aa", baz = 3);
71-
| ^^^^^^^^^ not supported in format string
70+
LL | let _ = format!("{foo.field:.3} {} {baz}", "aa", baz = 3);
71+
| ^^^^^^^^^ not supported in format string
7272
|
7373
help: consider using a positional formatting argument instead
7474
|
75-
LL | format!("{1:.3} {} {baz}", "aa", foo.field, baz = 3);
76-
| ~ +++++++++++
75+
LL | let _ = format!("{1:.3} {} {baz}", "aa", foo.field, baz = 3);
76+
| ~ +++++++++++
7777

7878
error: aborting due to 7 previous errors
7979

tests/ui/issues/issue-20676.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ use std::fmt;
88

99
fn main() {
1010
let a: &dyn fmt::Debug = &1;
11-
format!("{:?}", a);
11+
let _ = format!("{:?}", a);
1212
}

0 commit comments

Comments
 (0)