Skip to content

Commit 2fea3c7

Browse files
committed
add comment in iter-from-mac-call.rs
1 parent 7de1913 commit 2fea3c7

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-14
lines changed
Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1+
//! Tests that trait resolution errors (like non-iterator dereference) are correctly reported
2+
//! when the dereference operation is encapsulated within a macro.
3+
14
macro_rules! deref {
2-
($e:expr) => { *$e };
5+
($e:expr) => {
6+
*$e
7+
};
38
}
49

5-
fn f1<'a>(mut iter: Box<dyn Iterator<Item=&'a mut u8>>) {
6-
for item in deref!(iter) { *item = 0 }
7-
//~^ ERROR `dyn Iterator<Item = &'a mut u8>` is not an iterator
10+
fn f1<'a>(mut iter: Box<dyn Iterator<Item = &'a mut u8>>) {
11+
for item in deref!(iter) {
12+
//~^ ERROR `dyn Iterator<Item = &'a mut u8>` is not an iterator
13+
*item = 0
14+
}
815
}
916

1017
fn f2(x: &mut i32) {
@@ -15,12 +22,16 @@ fn f2(x: &mut i32) {
1522
struct Wrapped(i32);
1623

1724
macro_rules! borrow_deref {
18-
($e:expr) => { &mut *$e };
25+
($e:expr) => {
26+
&mut *$e
27+
};
1928
}
2029

21-
fn f3<'a>(mut iter: Box<dyn Iterator<Item=&'a mut i32>>) {
22-
for Wrapped(item) in borrow_deref!(iter) { *item = 0 }
23-
//~^ ERROR mismatched types
30+
fn f3<'a>(mut iter: Box<dyn Iterator<Item = &'a mut i32>>) {
31+
for Wrapped(item) in borrow_deref!(iter) {
32+
//~^ ERROR mismatched types
33+
*item = 0
34+
}
2435
}
2536

2637
fn main() {}

tests/ui/for-loop-while/iter-from-mac-call.stderr

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
error[E0277]: `dyn Iterator<Item = &'a mut u8>` is not an iterator
2-
--> $DIR/iter_from_mac_call.rs:6:17
2+
--> $DIR/iter-from-mac-call.rs:11:17
33
|
4-
LL | for item in deref!(iter) { *item = 0 }
4+
LL | for item in deref!(iter) {
55
| ^^^^^^^^^^^^ the trait `IntoIterator` is not implemented for `dyn Iterator<Item = &'a mut u8>`
66
|
77
= note: the trait bound `dyn Iterator<Item = &'a mut u8>: IntoIterator` is not satisfied
88
= note: required for `dyn Iterator<Item = &'a mut u8>` to implement `IntoIterator`
99
help: consider mutably borrowing here
1010
|
11-
LL | for item in &mut deref!(iter) { *item = 0 }
11+
LL | for item in &mut deref!(iter) {
1212
| ++++
1313

1414
error[E0277]: `i32` is not an iterator
15-
--> $DIR/iter_from_mac_call.rs:11:18
15+
--> $DIR/iter-from-mac-call.rs:18:18
1616
|
1717
LL | for _item in deref!(x) {}
1818
| ^^^^^^^^^ `i32` is not an iterator
@@ -22,9 +22,9 @@ LL | for _item in deref!(x) {}
2222
= note: required for `i32` to implement `IntoIterator`
2323

2424
error[E0308]: mismatched types
25-
--> $DIR/iter_from_mac_call.rs:22:9
25+
--> $DIR/iter-from-mac-call.rs:31:9
2626
|
27-
LL | for Wrapped(item) in borrow_deref!(iter) { *item = 0 }
27+
LL | for Wrapped(item) in borrow_deref!(iter) {
2828
| ^^^^^^^^^^^^^ ------------------- this is an iterator with items of type `&mut i32`
2929
| |
3030
| expected `i32`, found `Wrapped`

0 commit comments

Comments
 (0)