Consider the following code: void main() { int i; switch (i) { case 0: int x; break; case 1: x = 1; break; case 2: int y; break; debug { case 3: y = 1; // Accepted break; } default: } } DMD rightfully complains that `case 1:` cannot see x but accepts `case 3:` accessing y.
@MoonlightSentinel created dlang/dmd pull request #12292 "Fix 21739 - Don't merge `debug case` into previous CaseStatement" fixing this issue: - Fix 21739 - Don't merge `debug case` into previous CaseStatement The previous implementation assumed that `CaseStatement`s would be seperated by a top-level `case ...`. This is not the case for conditionally compiled cases, e.g. `debug { case ...: }`. https://github.com/dlang/dmd/pull/12292
dlang/dmd pull request #12292 "Fix 21739 - Don't merge `debug case` into previous CaseStatement" was merged into master: - dd8a88be3246557f3c82d14f5e5055d6532d9a66 by MoonlightSentinel: Fix 21739 - Don't merge `debug case` into previous CaseStatement The previous implementation assumed that `CaseStatement`s would be seperated by a top-level `case ...`. This is not the case for conditionally compiled cases, e.g. `debug { case ...: }`. https://github.com/dlang/dmd/pull/12292