diff options
| author | Lzu Tao <taolzu@gmail.com> | 2019-06-13 03:03:28 +0000 |
|---|---|---|
| committer | Lzu Tao <taolzu@gmail.com> | 2019-06-13 03:31:01 +0000 |
| commit | 8a5e1eeee65dd6c5c592a34aa483f461c068e533 (patch) | |
| tree | 7ae7fc60dc2fc844259a4d578a014c4a60dd4a3a | |
| parent | 2887008e0ce0824be4e0e9562c22ea397b165c97 (diff) | |
| download | rust-8a5e1eeee65dd6c5c592a34aa483f461c068e533.tar.gz rust-8a5e1eeee65dd6c5c592a34aa483f461c068e533.zip | |
Add ui test for issue 51301
| -rw-r--r-- | src/test/ui/issues/issue-51301.rs | 35 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-51301.stderr | 12 |
2 files changed, 47 insertions, 0 deletions
diff --git a/src/test/ui/issues/issue-51301.rs b/src/test/ui/issues/issue-51301.rs new file mode 100644 index 00000000000..7e0a5190fcd --- /dev/null +++ b/src/test/ui/issues/issue-51301.rs @@ -0,0 +1,35 @@ +use std::any::TypeId; +use std::collections::HashMap; +use std::hash::Hash; + +trait State { + type EventType; + fn get_type_id_of_state(&self) -> TypeId; +} + +struct StateMachine<EventType: Hash + Eq> { + current_state: Box<dyn State<EventType = EventType>>, + transition_table: + HashMap<TypeId, HashMap<EventType, fn() -> Box<dyn State<EventType = EventType>>>>, +} + +impl<EventType: Hash + Eq> StateMachine<EventType> { + fn inner_process_event(&mut self, event: EventType) -> Result<(), i8> { + let new_state_creation_function = self + .transition_table + .iter() + .find(|(&event_typeid, _)| event_typeid == self.current_state.get_type_id_of_state()) + .ok_or(1)? + .1 + .iter() + .find(|(&event_type, _)| event == event_type) + //~^ ERROR cannot move out of a shared reference + .ok_or(2)? + .1; + + self.current_state = new_state_creation_function(); + Ok(()) + } +} + +fn main() {} diff --git a/src/test/ui/issues/issue-51301.stderr b/src/test/ui/issues/issue-51301.stderr new file mode 100644 index 00000000000..f3decf7a991 --- /dev/null +++ b/src/test/ui/issues/issue-51301.stderr @@ -0,0 +1,12 @@ +error[E0507]: cannot move out of a shared reference + --> $DIR/issue-51301.rs:25:20 + | +LL | .find(|(&event_type, _)| event == event_type) + | ^^----------^^^^ + | | + | data moved here + | move occurs because `event_type` has type `EventType`, which does not implement the `Copy` trait + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0507`. |
