[Issue 7835] Ignored break inside static foreach

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Apr 6 07:15:21 PDT 2012


http://d.puremagic.com/issues/show_bug.cgi?id=7835


Dmitry Olshansky <dmitry.olsh at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dmitry.olsh at gmail.com


--- Comment #1 from Dmitry Olshansky <dmitry.olsh at gmail.com> 2012-04-06 07:15:55 PDT ---
(In reply to comment #0)
> This D2 program compiles with no warnings or errors with DMD 2.059beta:
> 
> 
> import core.stdc.stdio: printf;
> template TypeTuple(TList...) {
>     alias TList TypeTuple;
> }
> void main() {
>     char c = 'b';

L_MySwitch:
>     switch (c) {
>         case 'a': printf("1 a\n"); break;
>         foreach (o; TypeTuple!('b', 'c')) {
>             case o: printf("2 %c\n", c); break L_MySwitch;
>         }
>         default: printf("default");
>     }
> }
> 
> 

For these cases I recommend to use labeled breaks 
so that it's more clear for humans and compiler alike.


> 
> But it runs in a wrong way, as you see:
> 
> ...>dmd -run test.d
> 2 b
> default
> 
> ...>dmd -w -run test.d
> test.d(12): Error: switch case fallthrough - use 'goto default;' if intended
> 
> 
> So the break inside the static foreach is ignored.
> 
> (This idiom of using a static foreach inside a switch is handy to generate
> switch cases.)
> 
> 
> 
> Note: adding a second break, like this, doesn't improve the situation:
> 
> import core.stdc.stdio: printf;
> template TypeTuple(TList...) {
>     alias TList TypeTuple;
> }
> void main() {
>     char c = 'b';
>     switch (c) {
>         case 'a': printf("1 a\n"); break;
>         foreach (o; TypeTuple!('b', 'c')) {
>             case o: printf("2 %c\n", c); break; break;
>         }
>         default: printf("default");
>     }
> }

It can't help because the second break is by definition unreachable.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list