diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
commit | 698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch) | |
tree | 173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/static/static-reference-to-fn-2.rs | |
parent | Initial commit. (diff) | |
download | rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip |
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/static/static-reference-to-fn-2.rs')
-rw-r--r-- | src/test/ui/static/static-reference-to-fn-2.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/test/ui/static/static-reference-to-fn-2.rs b/src/test/ui/static/static-reference-to-fn-2.rs new file mode 100644 index 000000000..6693667c0 --- /dev/null +++ b/src/test/ui/static/static-reference-to-fn-2.rs @@ -0,0 +1,54 @@ +fn id<T>(x: T) -> T { x } + +struct StateMachineIter<'a> { + statefn: &'a StateMachineFunc<'a> +} + +type StateMachineFunc<'a> = fn(&mut StateMachineIter<'a>) -> Option<&'static str>; + +impl<'a> Iterator for StateMachineIter<'a> { + type Item = &'static str; + + fn next(&mut self) -> Option<&'static str> { + return (*self.statefn)(self); + } +} + +fn state1(self_: &mut StateMachineIter) -> Option<&'static str> { + self_.statefn = &id(state2 as StateMachineFunc); + //~^ ERROR temporary value dropped while borrowed + return Some("state1"); +} + +fn state2(self_: &mut StateMachineIter) -> Option<(&'static str)> { + self_.statefn = &id(state3 as StateMachineFunc); + //~^ ERROR temporary value dropped while borrowed + return Some("state2"); +} + +fn state3(self_: &mut StateMachineIter) -> Option<(&'static str)> { + self_.statefn = &id(finished as StateMachineFunc); + //~^ ERROR temporary value dropped while borrowed + return Some("state3"); +} + +fn finished(_: &mut StateMachineIter) -> Option<(&'static str)> { + return None; +} + +fn state_iter() -> StateMachineIter<'static> { + StateMachineIter { + //~^ ERROR cannot return value referencing temporary value + statefn: &id(state1 as StateMachineFunc) + } +} + + +fn main() { + let mut it = state_iter(); + println!("{:?}",it.next()); + println!("{:?}",it.next()); + println!("{:?}",it.next()); + println!("{:?}",it.next()); + println!("{:?}",it.next()); +} |