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