fixes #25857 ## Bug `typeof(result)` inside the expression that builds `result` gets counted as a read of `result` before it's set. On a `{.requiresInit.}` return type that's a hard error ("'result' requires explicit initialization"). `typeof` never evaluates its operand, so it's a false positive. On 2.2.4 it compiles, but the same line still emits a bogus `ProveInit` warning, so no released version gets it right. Regression from #25151. That PR made a used-before-init `requiresInit` result a hard error instead of a warning, which is correct on its own. The side effect was that this old false-positive warning became a build error. ## Root cause `track` in `compiler/sempass2.nim` has no arm for `nkTypeOfExpr`, so it hits the default that recurses into every child, reaches the `result` `nkSym` inside the `typeof`, and calls `useVar`. `sizeof`/`compiles`/`declared` don't hit this because they fold to a constant before `track` runs. A `typeof(result)` typedesc argument survives into `track`. ## Fix Skip `nkTypeOfExpr` in `track`. Its operand is never evaluated, so it isn't a definite-assignment use. After the patch there's no error and no warning here, even with `--warnings:on`. The #25151 check is untouched: a real use of `result` before init is a plain `nkSym`, not inside a `typeof`, so it still reaches `useVar`. ## Test `tests/init/t25857.nim`, a positive test that compiles and prints `1`. ## Checks - Repro compiles and runs on patched 2.2.6 and patched devel. - `tests/errmsgs/t25117.nim` still fails as expected. A real `xxx(result)` before init still errors. - `testament cat init` and `testament cat errmsgs` green on patched devel (55 tests, 0 failures), including the `--warningAsError:ProveInit` tests. - Bisect: parent `1ab68797` good, `576c4018` (#25151) bad.
This directory contains the test cases.
Each test must have a filename of the form: t*.nim
Note: Testament is only aware of tests under a directory (eg tests/foo/) and will ignore
top-level tests like tests/tbar.nim.
Specs
Each test can contain a spec in a discard """ ... """ block.
Check out the parseSpec procedure in the specs module for a full and reliable reference
action
Specifies what action this test should take.
Default: run
Options:
compile- compiles the module and fails the test if compilations fails.run- compiles and runs the module, fails the test if compilation or execution of test code fails.reject- compiles the module and fails the test if compilation succeeds.
There are certain spec keys that imply run, including output and
outputsub.
Categories
Each folder under this directory represents a test category, which can be
tested by running koch tests pcat <category> (or cat to avoid parallel
testing, which is slower).
The folder dll contains simple DLL tests.
The folder realtimeGC contains a test for validating that the realtime GC
can run properly without linking against the nimrtl.dll/so.