Bug 21739 – debug case can access variable from other case

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2021-03-21T02:24:37Z
Last change time
2021-04-02T20:43:40Z
Keywords
pull
Assigned to
No Owner
Creator
moonlightsentinel

Comments

Comment #0 by moonlightsentinel — 2021-03-21T02:24:37Z
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.
Comment #1 by dlang-bot — 2021-03-21T02:42:55Z
@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
Comment #2 by dlang-bot — 2021-04-02T20:43:40Z
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