| //@ run-pass | |
| // This is a regression test for something that only came up while | |
| // attempting to bootstrap librustc with new destructor lifetime | |
| // semantics. | |
| #![allow(unexpected_cfgs)] // for the cfg-as-descriptions | |
| use std::collections::HashMap; | |
| use std::cell::RefCell; | |
| // This version does not yet work (associated type issues)... | |
| #[cfg(cannot_use_this_yet)] | |
| fn foo<'a>(map: RefCell<HashMap<&'static str, &'a [u8]>>) { | |
| let one = [1]; | |
| assert_eq!(map.borrow().get("one"), Some(&one[..])); | |
| } | |
| #[cfg(cannot_use_this_yet_either)] | |
| // ... and this version does not work (the lifetime of `one` is | |
| // supposed to match the lifetime `'a`) ... | |
| fn foo<'a>(map: RefCell<HashMap<&'static str, &'a [u8]>>) { | |
| let one = [1]; | |
| assert_eq!(map.borrow().get("one"), Some(&&one[..])); | |
| } | |
| #[cfg(all(not(cannot_use_this_yet),not(cannot_use_this_yet_either)))] | |
| fn foo<'a>(map: RefCell<HashMap<&'static str, &'a [u8]>>) { | |
| // ...so instead we walk through the trivial slice and make sure | |
| // it contains the element we expect. | |
| for (i, &x) in map.borrow().get("one").unwrap().iter().enumerate() { | |
| assert_eq!((i, x), (0, 1)); | |
| } | |
| } | |
| fn main() { | |
| let zer = [0]; | |
| let one = [1]; | |
| let two = [2]; | |
| let mut map = HashMap::new(); | |
| map.insert("zero", &zer[..]); | |
| map.insert("one", &one[..]); | |
| map.insert("two", &two[..]); | |
| let map = RefCell::new(map); | |
| foo(map); | |
| } |