www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 4158] New: switch segfault

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4158

           Summary: switch segfault
           Product: D
           Version: unspecified
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: major
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: k-foley onu.edu


--- Comment #0 from Kyle Foley <k-foley onu.edu> 2010-05-04 19:49:19 PDT ---
DMD 2.045

int main(string[] args)
{
    //switch (0) { } // segfaults
    switch (0) { case 0: }
    //switch (0) { case 1: } // segfaults
    switch (0) { case 1: default: }
    switch (0) { default: }

    return 0;
}

---

Seems to segfault when none of the labels inside the switch are jumped to.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 04 2010
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4158


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |bugzilla digitalmars.com
         Resolution|                            |INVALID


--- Comment #1 from Walter Bright <bugzilla digitalmars.com> 2010-05-04
23:44:21 PDT ---
It doesn't actually segfault, it executes a HALT instruction. If there is no
default in a switch, the compiler inserts one of the form:

  default: HALT

The idea is that the default should not be implied as fall-through, which it
does in C.

D is behaving as it is designed to.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 04 2010
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4158



--- Comment #2 from Kyle Foley <k-foley onu.edu> 2010-05-05 14:21:13 PDT ---
(In reply to comment #1)
 It doesn't actually segfault, it executes a HALT instruction. If there is no
 default in a switch, the compiler inserts one of the form:
 
   default: HALT
 
 The idea is that the default should not be implied as fall-through, which it
 does in C.
 
 D is behaving as it is designed to.
http://digitalmars.com/d/2.0/statement.html#SwitchStatement "If none of the case expressions match, and there is not a default statement, a std.switcherr.SwitchError is thrown. The reason for this is to catch the common programming error of adding a new value to an enum, but failing to account for the extra value in switch statements. This behavior is unlike C or C++." Should sync this with the docs. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 05 2010