-
Notifications
You must be signed in to change notification settings - Fork 32
/
if-no-match-bindings.rs
36 lines (30 loc) · 1.26 KB
/
if-no-match-bindings.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Checks for `if` expressions with respect to default match bindings.
// Specifically, we do not accept `if cond { ... }` where `cond: &mut? bool`.
// Meanwhile, `match cond { true => ..., _ => ... }` does accept that.
// FIXME(@rust-lang/lang-team): consider relaxing this?
fn b_ref<'a>() -> &'a bool { &true }
fn b_mut_ref<'a>() -> &'a mut bool { &mut true }
//~^ ERROR: cannot return reference to temporary
fn main() {
// This is OK:
match b_ref() { true => {}, _ => {} }
match b_mut_ref() { true => {}, _ => {} }
match &true { true => {}, _ => {} }
match &mut true { true => {}, _ => {} }
// This is NOT:
if b_ref() {} //~ ERROR mismatched types [E0308]
if b_mut_ref() {} //~ ERROR mismatched types [E0308]
if &true {} //~ ERROR mismatched types [E0308]
if &mut true {} //~ ERROR mismatched types [E0308]
// This is also NOT:
while b_ref() {} //~ ERROR mismatched types [E0308]
while b_mut_ref() {} //~ ERROR mismatched types [E0308]
while &true {} //~ ERROR mismatched types [E0308]
while &mut true {} //~ ERROR mismatched types [E0308]
}
// ferrocene-annotations: fls_exe4zodlwfez
// Type Unification
// ferrocene-annotations: fls_mkut7gut49gi
// If Expressions
// ferrocene-annotations: fls_5jjm1kt43axd
// While Loops