Thread overview
[Issue 4158] New: switch segfault
May 05, 2010
Kyle Foley
May 05, 2010
Walter Bright
May 05, 2010
Kyle Foley
May 05, 2010
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 05, 2010
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 05, 2010
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: -------