const _: () = loop { break (); };

static FOO: i32 = loop { break 4; };

const fn foo() {
    loop {}
}

pub trait Foo {
    const BAR: i32 = loop { break 4; };
}

impl Foo for () {
    const BAR: i32 = loop { break 4; };
}

fn non_const_outside() {
    const fn const_inside() {
        loop {}
    }
}

const fn const_outside() {
    fn non_const_inside() {
        loop {}
    }
}

fn main() {
    let x = [0; {
        while false {}
        4
    }];
}

const _: i32 = {
    let mut x = 0;

    while x < 4 {
        x += 1;
    }

    while x < 8 {
        x += 1;
    }

    x
};

const _: i32 = {
    let mut x = 0;

    for i in 0..4 { //~ ERROR `for` is not allowed in a `const`
        //~^ ERROR: cannot call
        //~| ERROR: cannot convert
        x += i;
    }

    for i in 0..4 { //~ ERROR `for` is not allowed in a `const`
        //~^ ERROR: cannot call
        //~| ERROR: cannot convert
        x += i;
    }

    x
};

const _: i32 = {
    let mut x = 0;

    loop {
        x += 1;
        if x == 4 {
            break;
        }
    }

    loop {
        x += 1;
        if x == 8 {
            break;
        }
    }

    x
};

const _: i32 = {
    let mut x = 0;
    while let None = Some(x) { }
    while let None = Some(x) { }
    x
};
