fn match_ref(&&v: option) -> int { alt v { some(i) { i } none {0} } } fn match_ref_unused(&&v: option) { alt v { some(_) {} none {} } } fn match_const_reg(v: &const option) -> int { alt *v { some(i) {i} // OK because this is pure none {0} } } fn impure(_i: int) { } fn match_const_reg_unused(v: &const option) { alt *v { some(_) {impure(0)} // OK because nothing is captured none {} } } fn match_const_reg_impure(v: &const option) { alt *v { some(i) {impure(i)} //! ERROR illegal borrow unless pure: enum variant in aliasable, mutable location //!^ NOTE impure due to access to impure function none {} } } fn match_imm_reg(v: &option) { alt *v { some(i) {impure(i)} // OK because immutable none {} } } fn main() { }