fixes #22122 The commit fixes a bug in Nim's effects checker where raise statements with case/if expressions (commonly from template expansion) failed to track exception types from individual branches. Problem: addRaiseEffect only saw the outermost expression. When a template like getTransportError(err) expanded to a case expression raising 3 different exception types, the compiler only registered the top-level call — missing the branch-level exceptions. Fix (2 files): - compiler/sempass2.nim: Added skipHiddenConv to strip implicit type coercion nodes (nkHiddenStdConv/nkHiddenSubConv) that hide the control flow structure. Added addRaiseEffectsFromExpr that recursively walks into case/if/block/stmtlist expressions to find raise effects in each branch body. Changed the nkRaiseStmt handler to use this new function. - tests/effects/tcase_raises.nim: Test with templates that expand to case expressions raising different exception types, verified via {.raises: [].} pragma.
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.