Skip to content

Unclear error message with extra semicolon #30497

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?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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