diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2021-02-12 19:32:14 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-12 19:32:14 +0900 |
| commit | 46aef0e37525db778d1a31dd48a0fd3678bf2b71 (patch) | |
| tree | bbdd30b6fd994a430e8d6bfb193f6424cdc4550e /src/test | |
| parent | 459dda98ebdb797c233bdb01ace54b3f30b577f8 (diff) | |
| parent | e03f09730faab8083f991827f0cd02040d171d4e (diff) | |
Rollup merge of #81990 - matsujika:suggest-mut-reference, r=estebank
Make suggestion of changing mutability of arguments broader Fix #81421 Previously rustc tries to emit the suggestion of changing mutablity unless `!trait_ref.has_infer_types_or_consts() && self.predicate_can_apply(obligation.param_env, trait_ref)` and this led to some false negatives to occur.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/suggestions/suggest-change-mut.rs | 21 | ||||
| -rw-r--r-- | src/test/ui/suggestions/suggest-change-mut.stderr | 35 |
2 files changed, 56 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/suggest-change-mut.rs b/src/test/ui/suggestions/suggest-change-mut.rs new file mode 100644 index 00000000000..8b465aae66b --- /dev/null +++ b/src/test/ui/suggestions/suggest-change-mut.rs @@ -0,0 +1,21 @@ +#![allow(warnings)] + +use std::io::{BufRead, BufReader, Read, Write}; + +fn issue_81421<T: Read + Write>(mut stream: T) { + let initial_message = format!("Hello world"); + let mut buffer: Vec<u8> = Vec::new(); + let bytes_written = stream.write_all(initial_message.as_bytes()); + let flush = stream.flush(); + + loop { + let mut stream_reader = BufReader::new(&stream); + //~^ ERROR the trait bound `&T: std::io::Read` is not satisfied [E0277] + //~| HELP consider removing the leading `&`-reference + //~| HELP consider changing this borrow's mutability + stream_reader.read_until(b'\n', &mut buffer).expect("Reading into buffer failed"); + //~^ ERROR the method `read_until` exists for struct `BufReader<&T>`, + } +} + +fn main() {} diff --git a/src/test/ui/suggestions/suggest-change-mut.stderr b/src/test/ui/suggestions/suggest-change-mut.stderr new file mode 100644 index 00000000000..cb156f7c787 --- /dev/null +++ b/src/test/ui/suggestions/suggest-change-mut.stderr @@ -0,0 +1,35 @@ +error[E0277]: the trait bound `&T: std::io::Read` is not satisfied + --> $DIR/suggest-change-mut.rs:12:48 + | +LL | let mut stream_reader = BufReader::new(&stream); + | ^^^^^^^ the trait `std::io::Read` is not implemented for `&T` + | + = note: required by `BufReader::<R>::new` +help: consider removing the leading `&`-reference + | +LL | let mut stream_reader = BufReader::new(stream); + | -- +help: consider changing this borrow's mutability + | +LL | let mut stream_reader = BufReader::new(&mut stream); + | ^^^^ + +error[E0599]: the method `read_until` exists for struct `BufReader<&T>`, but its trait bounds were not satisfied + --> $DIR/suggest-change-mut.rs:16:23 + | +LL | stream_reader.read_until(b'\n', &mut buffer).expect("Reading into buffer failed"); + | ^^^^^^^^^^ method cannot be called on `BufReader<&T>` due to unsatisfied trait bounds + | + ::: $SRC_DIR/std/src/io/buffered/bufreader.rs:LL:COL + | +LL | pub struct BufReader<R> { + | ----------------------- doesn't satisfy `BufReader<&T>: BufRead` + | + = note: the following trait bounds were not satisfied: + `&T: std::io::Read` + which is required by `BufReader<&T>: BufRead` + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0277, E0599. +For more information about an error, try `rustc --explain E0277`. |
