Skip to content

casting in a static breaks type inference #17756

@porglezomp

Description

@porglezomp

Writing the following works perfectly:

static count : uint = 2;
fn main() {
    let larger : [uint, ..count*2];
}

While the following:

static count : uint = 2 as uint;
fn main() {
    let larger : [uint, ..count*2];
}

Fails with error: expected constant expr for vector length: can't do this op on a uint and int. This looks like a problem with the type inference, and using 2u fixes this example, but breaks the one that previously worked.
When the array is being initialized rather than having the type set:

let larger = [0u, ..count*2];

The error is a much more cryptic error: expected constant integer for repeat count, found variable, and which one fails can again be swapped by multiplying by 2u instead of 2.

Metadata

Metadata

Assignees

No one assigned

    Labels

    E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions