Skip to content

Commit

Permalink
Rollup merge of rust-lang#61792 - lzutao:issue-51301, r=Centril
Browse files Browse the repository at this point in the history
Add ui test for issue 51301

Closes rust-lang#51301
  • Loading branch information
Centril authored Jun 14, 2019
2 parents 58e6601 + 8a5e1ee commit 6c93ad0
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
35 changes: 35 additions & 0 deletions src/test/ui/issues/issue-51301.rs
Original file line number Diff line number Diff line change
@@ -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() {}
12 changes: 12 additions & 0 deletions src/test/ui/issues/issue-51301.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit 6c93ad0

Please sign in to comment.