beginner

The error is on the line after the mistake

A release added digit separators to the numeric literal rule, so `1_000_000` scans as one number. Two days later a build fails on a file nobody touched in that release.

The symptom

Line 40 is let limit = 123abc;, left behind by a botched find-and-replace. The compiler says nothing about line 40. It reports cannot use "limit" in its own initializer at line 41, column 7 — and line 41 is print(limit);, which is plainly correct and does not initialize anything.

Commit first

Before you open a single dump: name the phase that PRINTED this message, and name the phase you think produced the input that made it wrong. They are not the same phase, and the whole exercise is the distance between them. Also write down, token by token, what you expect the compiler to have scanned from line 40.