Thread overview
[Issue 3820] New: Small hole in switch semantics
Aug 02, 2010
Jeffrey Yasskin
Mar 12, 2012
dawg@dawgfoto.de
Mar 12, 2012
dawg@dawgfoto.de
May 20, 2013
Maxim Fomin
May 20, 2013
Martin Nowak
February 18, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3820

           Summary: Small hole in switch semantics
           Product: D
           Version: 2.040
          Platform: All
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: bearophile_hugs@eml.cc


--- Comment #0 from bearophile_hugs@eml.cc 2010-02-18 11:04:44 PST ---
void main() {
    switch (1) {
        int x;
        case 1:
            assert(x == int.init);
        default:
    }
}

Here often x != x.init.
D isn't C, so it's better to avoid holes in its semantics, if possible.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 02, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3820


Jeffrey Yasskin <jyasskin@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jyasskin@gmail.com


--- Comment #1 from Jeffrey Yasskin <jyasskin@gmail.com> 2010-08-02 08:38:13 PDT ---
Interestingly, http://www.digitalmars.com/d/2.0/statement.html#GotoStatement says "It is illegal for a GotoStatement to be used to skip initializations." but doesn't say anything of the sort about switch statements.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 12, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3820


bearophile_hugs@eml.cc changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |andrej.mitrovich@gmail.com


--- Comment #2 from bearophile_hugs@eml.cc 2011-05-12 15:33:44 PDT ---
*** Issue 5989 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
March 11, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=3820



--- Comment #3 from bearophile_hugs@eml.cc 2012-03-11 14:14:59 PDT ---
A probably related case:


import std.stdio;
enum Foo { A }
void main() {
    Foo f = Foo.A;
    switch (f) {
        writeln(f);
        case Foo.A: break;
    }
}


With DMD 2.059head it prints nothing.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
March 12, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=3820


dawg@dawgfoto.de changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dawg@dawgfoto.de


--- Comment #4 from dawg@dawgfoto.de 2012-03-12 07:24:29 PDT ---
*** Issue 7630 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
March 12, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=3820



--- Comment #5 from dawg@dawgfoto.de 2012-03-12 07:37:28 PDT ---
You can only execute that block with a goto or a loop.
The initialization should happen anyhow.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 20, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=3820


Maxim Fomin <maxim@maxim-fomin.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |maxim@maxim-fomin.ru


--- Comment #6 from Maxim Fomin <maxim@maxim-fomin.ru> 2013-05-19 21:09:14 PDT ---
*** Issue 10121 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 20, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=3820



--- Comment #7 from Martin Nowak <code@dawg.eu> 2013-05-20 03:20:58 PDT ---
IIRC this switch is implemented as below. Unless we expect the block to always run, as in comment 3, it's difficult to fix.

int foo(int a)
{
    switch (var)
    {
        int res;
    case 1: res = 1; return res;
    default: return res;
    }
}

int foo(int a)
{
    if (var == 1) goto L1;
    else goto Ldefault;

    int res;
 L1: res = 1; return res;
 Ldefault: return res;
}

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