Skip to content

checker: type narrowing in none removes mut #26491

@Le0Developer

Description

@Le0Developer
V version: V 0.5.0 75fc8be, press to see full `v doctor` output
V full version V 0.5.0 75fc8be
OS macos, macOS, 26.2, 25C56
Processor 10 cpus, 64bit, little endian, Apple M4
Memory 0.23GB/16GB
V executable /Users/leodev/p/v/v/v
V last modified time 2026-01-31 10:45:14
V home dir OK, value: /Users/leodev/p/v/v
VMODULES OK, value: /Users/leodev/.vmodules
VTMP OK, value: /tmp/v_501
Current working dir OK, value: /Users/leodev/p/v/test
Git version git version 2.52.0
V git status weekly.2026.05-80-g75fc8bed
.git/config present true
cc version Apple clang version 17.0.0 (clang-1700.0.13.3)
gcc version Apple clang version 17.0.0 (clang-1700.0.13.3)
clang version Apple clang version 17.0.0 (clang-1700.0.13.3)
tcc version tcc version 0.9.28rc 2026-01-10 HEAD@5ec0e6f8 (AArch64 Darwin)
tcc git status thirdparty-macos-arm64 f995efa3
emcc version N/A
glibc version N/A

What did you do?
./v -g -o vdbg cmd/v && ./vdbg repro.v && repro

fn main() {
	mut x := ?int(none)

	if x == none {
		x = 10
	} else {
		x = 5
	}
}

What did you see?

repro.v:7:3: error: `x` is immutable, declare it with `mut` to make it mutable
    5 |         x = 10
    6 |     } else {
    7 |         x = 5
      |         ^
    8 |     }
    9 | }

What did you expect to see?

x is mutable, code should be compiled

Note

You can use the 👍 reaction to increase the issue's priority for developers.

Please note that only the 👍 reaction to the issue itself counts as a vote.
Other reactions and those to comments will not be taken into account.

Metadata

Metadata

Assignees

Labels

BugThis tag is applied to issues which reports bugs.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions