Skip to content

loop {break 'outer} should have type ! #23451

Closed
@andersk

Description

@andersk

The expression loop {break} has type (), as it must. However, within a second loop labeled 'outer, the expression loop {break 'outer} should have type !, not (). Note that break 'outer and even loop {loop {break 'outer}} are already correctly typed as !.

Example with incorrect type error:

fn foo() {
    'outer: loop {
        let a : i32;
        a = break 'outer  // ok
    }
}

fn bar() {
    'outer: loop {
        let a : i32;
        a = loop {break 'outer}  // error: mismatched types: expected i32, found ()
    }
}

fn baz() {
    'outer: loop {
        let a : i32;
        a = loop {loop {break 'outer}}  // ok
    }
}

I’m using rustc 1.0.0-dev (built 2015-03-17) from ppa:hansjorg/rust.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions