Skip to content

Unclear error message with extra semicolon #30497

Closed
@pjmlp

Description

@pjmlp

If I take the following line from the Rust book and make a function out of it

let secret_number = rand::thread_rng().gen_range(1, 101);

Meaning something like

let secret_number = generate_secret_number() ;
// ...
fn generate_secret_number() -> u32 {
    rand::thread_rng().gen_range(1, 101);
}

Then the compiler fails with

src/main.rs:41:1: 45:2 error: not all control paths return a value [E0269]
src/main.rs:41 fn generate_secret_number() -> u32 {
src/main.rs:42     rand::thread_rng().gen_range(1, 101);
src/main.rs:43 }
src/main.rs:41:1: 43:2 help: run `rustc --explain E0269` to see a detailed explanation
error: aborting due to previous error
Could not compile `guessing_game`.

However if I add the return statement, which should be optional. It works

let secret_number = generate_secret_number() ;
// ...
fn generate_secret_number() -> u32 {
    return rand::thread_rng().rnd.gen_range(1, 101);
}

Shouldn't this be considered an expression by the compiler?

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lints

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions