diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/dmd/lexer.c ./src/dmd/lexer.c
--- /home/chad/downloads/dlang/dmd.2.036/src/dmd/lexer.c	2009-11-05 01:35:42.000000000 -0500
+++ ./src/dmd/lexer.c	2009-11-19 21:12:35.000000000 -0500
@@ -1122,6 +1122,11 @@ void Lexer::scan(Token *t)
 		    else
 			t->value = TOKule;	// !>
 		}
+		else if (*p == ':')
+		{
+		    p++;
+		    t->value = TOKfallthrough;
+		}
 		else
 		    t->value = TOKnot;		// !
 		return;
@@ -3008,6 +3013,7 @@ void Lexer::initKeywords()
     Token::tochars[TOKrbracket]		= "]";
     Token::tochars[TOKsemicolon]	= ";";
     Token::tochars[TOKcolon]		= ":";
+    Token::tochars[TOKfallthrough]	= "!:";
     Token::tochars[TOKcomma]		= ",";
     Token::tochars[TOKdot]		= ".";
     Token::tochars[TOKxor]		= "^";
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/dmd/lexer.h ./src/dmd/lexer.h
--- /home/chad/downloads/dlang/dmd.2.036/src/dmd/lexer.h	2009-11-05 01:35:42.000000000 -0500
+++ ./src/dmd/lexer.h	2009-11-19 03:41:01.000000000 -0500
@@ -162,6 +162,7 @@ enum TOK
 	TOKfile,
 	TOKshared,
 	TOKat,
+	TOKfallthrough,
 #endif
 
 	TOKMAX
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/dmd/parse.c ./src/dmd/parse.c
--- /home/chad/downloads/dlang/dmd.2.036/src/dmd/parse.c	2009-11-05 01:35:42.000000000 -0500
+++ ./src/dmd/parse.c	2009-11-20 14:43:31.000000000 -0500
@@ -3712,7 +3712,25 @@ Statement *Parser::parseStatement(int fl
 		if (token.value != TOKcomma)
 		    break;
 	    }
+
+	    int fallThroughAllowed = TRUE; // D1 behavior.
+#if DMDV2
+	    int lastColon = token.value;
+	    if ( token.value == TOKcolon )
+	    {
+		fallThroughAllowed = FALSE;
+		nextToken();
+	    }
+	    else if ( token.value == TOKfallthrough )
+	    {
+		fallThroughAllowed = TRUE;
+		nextToken();
+	    }
+	    else
+		error(": or !: expected after case, not %s", token.toChars());
+#else
 	    check(TOKcolon);
+#endif
 
 #if DMDV2
 	    /* case exp: .. case last:
@@ -3724,6 +3742,10 @@ Statement *Parser::parseStatement(int fl
 		nextToken();
 		check(TOKcase);
 		last = parseAssignExp();
+		
+		if ( fallThroughAllowed )
+		    check(TOKfallthrough);
+		else
 		check(TOKcolon);
 	    }
 #endif
@@ -3742,16 +3764,21 @@ Statement *Parser::parseStatement(int fl
 #if DMDV2
 	    if (last)
 	    {
-		s = new CaseRangeStatement(loc, exp, last, s);
+		s = new CaseRangeStatement(loc, exp, last, s, fallThroughAllowed);
 	    }
 	    else
 #endif
 	    {
+		// case 0, 1, 6: break; -> case 0: { case 1: { case 6: {break;} } }
 		// Keep cases in order by building the case statements backwards
 		for (int i = cases.dim; i; i--)
 		{
 		    exp = (Expression *)cases.data[i - 1];
-		    s = new CaseStatement(loc, exp, s);
+		    s = new CaseStatement(loc, exp, s, fallThroughAllowed);
+		    
+		    // All of the cases that will follow will need to 
+		    //   fallthrough to reach the last one.
+		    fallThroughAllowed = TRUE;
 		}
 	    }
 	    break;
@@ -3762,7 +3789,24 @@ Statement *Parser::parseStatement(int fl
 	    Statements *statements;
 
 	    nextToken();
+	    
+	    int fallThroughAllowed = TRUE; // D1 behavior.
+#if DMDV2
+	    if ( token.value == TOKcolon )
+	    {
+		fallThroughAllowed = FALSE;
+		nextToken();
+	    }
+	    else if ( token.value == TOKfallthrough )
+	    {
+		fallThroughAllowed = TRUE;
+		nextToken();
+	    }
+	    else
+		error(": or !: expected after default, not %s", token.toChars());
+#else
 	    check(TOKcolon);
+#endif
 
 	    statements = new Statements();
 	    while (token.value != TOKcase &&
@@ -3774,7 +3818,7 @@ Statement *Parser::parseStatement(int fl
 	    }
 	    s = new CompoundStatement(loc, statements);
 	    s = new ScopeStatement(loc, s);
-	    s = new DefaultStatement(loc, s);
+	    s = new DefaultStatement(loc, s, fallThroughAllowed);
 	    break;
 	}
 
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/dmd/statement.c ./src/dmd/statement.c
--- /home/chad/downloads/dlang/dmd.2.036/src/dmd/statement.c	2009-11-05 01:35:42.000000000 -0500
+++ ./src/dmd/statement.c	2009-11-20 18:01:08.000000000 -0500
@@ -154,6 +154,12 @@ int Statement::isEmpty()
     return FALSE;
 }
 
+// See the declaration in statement.h for the description.
+int Statement::isUnconditionalBranch()
+{
+    return FALSE;
+}
+
 /****************************************
  * If this statement has code that needs to run in a finally clause
  * at the end of the current scope, return that code in the form of
@@ -267,7 +273,6 @@ int ExpStatement::isEmpty()
     return exp == NULL;
 }
 
-
 /******************************** CompileStatement ***************************/
 
 CompileStatement::CompileStatement(Loc loc, Expression *exp)
@@ -1906,14 +1911,14 @@ Lagain:
 
 		// default: break; takes care of cases 0 and 1
 		s = new BreakStatement(0, NULL);
-		s = new DefaultStatement(0, s);
+		s = new DefaultStatement(0, s, TRUE);
 		a->push(s);
 
 		// cases 2...
 		for (int i = 0; i < cases.dim; i++)
 		{
 		    s = (Statement *)cases.data[i];
-		    s = new CaseStatement(0, new IntegerExp(i + 2), s);
+		    s = new CaseStatement(0, new IntegerExp(i + 2), s, TRUE);
 		    a->push(s);
 		}
 
@@ -2751,7 +2756,7 @@ Statement *SwitchStatement::semantic(Sco
 	a->reserve(4);
 	a->push(body);
 	a->push(new BreakStatement(loc, NULL));
-	sc->sw->sdefault = new DefaultStatement(loc, s);
+	sc->sw->sdefault = new DefaultStatement(loc, s, TRUE);
 	a->push(sc->sw->sdefault);
 	cs = new CompoundStatement(loc, a);
 	body = cs;
@@ -2845,21 +2850,66 @@ void SwitchStatement::toCBuffer(OutBuffe
 
 /******************************** CaseStatement ***************************/
 
-CaseStatement::CaseStatement(Loc loc, Expression *exp, Statement *s)
+CaseStatement::CaseStatement(Loc loc, Expression *exp, Statement *s, int fallThroughAllowed)
     : Statement(loc)
 {
     this->exp = exp;
     this->statement = s;
+    this->fallThroughAllowed = fallThroughAllowed;
     index = 0;
     cblock = NULL;
 }
 
 Statement *CaseStatement::syntaxCopy()
 {
-    CaseStatement *s = new CaseStatement(loc, exp->syntaxCopy(), statement->syntaxCopy());
+    CaseStatement *s = new CaseStatement(loc, exp->syntaxCopy(), statement->syntaxCopy(), fallThroughAllowed);
     return s;
 }
 
+void checkFallThrough( Loc loc, Statement *body )
+{
+    //printf("checkFallThrough(...)\n");
+    //printf("\n=================\n");
+    //printf("checkForEndingUnconditionalBranch: %s", body->toChars());
+    
+    // Unravel any scope statements that typically wrap the compound statements
+    //   that are found in CaseStatements and the like.
+    if ( body )
+    {
+	ScopeStatement *tmp = body->isScopeStatement();
+	if ( tmp )
+	    body = tmp->statement;
+    }
+    
+    // Turn it into a CompoundStatement if it exists and is one.
+    CompoundStatement *block = NULL;
+    if ( body )
+	block = body->isCompoundStatement();
+    
+    // Now actually check for the unconditional branch.
+    if ( block )
+    {
+	Statements *array = block->statements;
+	Statement *lastStatement = NULL;
+	if ( 1 <= array->dim )
+	    lastStatement = (Statement*)array->data[array->dim - 1];
+	
+	if ( !lastStatement || !lastStatement->isUnconditionalBranch() )
+	{
+	    error(loc,"The last statement in a case or default statement "
+		"must be one of these unconditional branches: break, return, "
+		"continue, goto, goto case, goto default, or throw.  "
+		"For fall through, use 'case foo!:' or 'default!:'");
+	}
+    }
+    else
+    {
+	printf("statement.c %d: %s: This is unexpected.  ", __LINE__, loc.toChars());
+	printf("A case or default statement just managed to avoid being ");
+	printf("checked for an explicit unconditional branch.\n");
+    }
+}
+
 Statement *CaseStatement::semantic(Scope *sc)
 {   SwitchStatement *sw = sc->sw;
 
@@ -2870,6 +2920,9 @@ Statement *CaseStatement::semantic(Scope
 	exp = exp->implicitCastTo(sc, sw->condition->type);
 	exp = exp->optimize(WANTvalue | WANTinterpret);
 
+	if ( !this->fallThroughAllowed )
+	    checkFallThrough(loc,statement);
+
 	/* This is where variables are allowed as case expressions.
 	 */
 	if (exp->op == TOKvar)
@@ -2966,18 +3019,20 @@ void CaseStatement::toCBuffer(OutBuffer 
 #if DMDV2
 
 CaseRangeStatement::CaseRangeStatement(Loc loc, Expression *first,
-	Expression *last, Statement *s)
+	Expression *last, Statement *s, int fallThroughAllowed)
     : Statement(loc)
 {
     this->first = first;
     this->last = last;
     this->statement = s;
+    this->fallThroughAllowed = fallThroughAllowed;
 }
 
 Statement *CaseRangeStatement::syntaxCopy()
 {
     CaseRangeStatement *s = new CaseRangeStatement(loc,
-	first->syntaxCopy(), last->syntaxCopy(), statement->syntaxCopy());
+	first->syntaxCopy(), last->syntaxCopy(), statement->syntaxCopy(), 
+	fallThroughAllowed);
     return s;
 }
 
@@ -3019,8 +3074,13 @@ Statement *CaseRangeStatement::semantic(
 	Statement *s = statement;
 	if (i != lval)
 	    s = new ExpStatement(loc, NULL);
+	
+	int fallThrough = TRUE;
+	if ( i == lval )
+	    fallThrough = this->fallThroughAllowed;
+	
 	Expression *e = new IntegerExp(loc, i, first->type);
-	Statement *cs = new CaseStatement(loc, e, s);
+	CaseStatement *cs = new CaseStatement(loc, e, s, fallThrough);
 	statements->push(cs);
     }
     Statement *s = new CompoundStatement(loc, statements);
@@ -3042,10 +3102,11 @@ void CaseRangeStatement::toCBuffer(OutBu
 
 /******************************** DefaultStatement ***************************/
 
-DefaultStatement::DefaultStatement(Loc loc, Statement *s)
+DefaultStatement::DefaultStatement(Loc loc, Statement *s, int fallThroughAllowed)
     : Statement(loc)
 {
     this->statement = s;
+    this->fallThroughAllowed = fallThroughAllowed;
 #if IN_GCC
 +    cblock = NULL;
 #endif
@@ -3053,7 +3114,7 @@ DefaultStatement::DefaultStatement(Loc l
 
 Statement *DefaultStatement::syntaxCopy()
 {
-    DefaultStatement *s = new DefaultStatement(loc, statement->syntaxCopy());
+    DefaultStatement *s = new DefaultStatement(loc, statement->syntaxCopy(), fallThroughAllowed);
     return s;
 }
 
@@ -3062,6 +3123,9 @@ Statement *DefaultStatement::semantic(Sc
     //printf("DefaultStatement::semantic()\n");
     if (sc->sw)
     {
+	if ( !this->fallThroughAllowed )
+	    checkFallThrough(loc,statement);
+	
 	if (sc->sw->sdefault)
 	{
 	    error("switch statement already has a default");
@@ -3135,6 +3199,11 @@ void GotoDefaultStatement::toCBuffer(Out
     buf->writestring("goto default;\n");
 }
 
+int GotoDefaultStatement::isUnconditionalBranch()
+{
+    return TRUE;
+}
+
 /******************************** GotoCaseStatement ***************************/
 
 GotoCaseStatement::GotoCaseStatement(Loc loc, Expression *exp)
@@ -3187,6 +3256,11 @@ void GotoCaseStatement::toCBuffer(OutBuf
     buf->writenl();
 }
 
+int GotoCaseStatement::isUnconditionalBranch()
+{
+    return TRUE;
+}
+
 /******************************** SwitchErrorStatement ***************************/
 
 SwitchErrorStatement::SwitchErrorStatement(Loc loc)
@@ -3510,6 +3584,11 @@ void ReturnStatement::toCBuffer(OutBuffe
     buf->writenl();
 }
 
+int ReturnStatement::isUnconditionalBranch()
+{
+    return TRUE;
+}
+
 /******************************** BreakStatement ***************************/
 
 BreakStatement::BreakStatement(Loc loc, Identifier *ident)
@@ -3603,6 +3682,11 @@ void BreakStatement::toCBuffer(OutBuffer
     buf->writenl();
 }
 
+int BreakStatement::isUnconditionalBranch()
+{
+    return TRUE;
+}
+
 /******************************** ContinueStatement ***************************/
 
 ContinueStatement::ContinueStatement(Loc loc, Identifier *ident)
@@ -3703,6 +3787,11 @@ void ContinueStatement::toCBuffer(OutBuf
     buf->writenl();
 }
 
+int ContinueStatement::isUnconditionalBranch()
+{
+    return TRUE;
+}
+
 /******************************** SynchronizedStatement ***************************/
 
 SynchronizedStatement::SynchronizedStatement(Loc loc, Expression *exp, Statement *body)
@@ -4335,6 +4424,11 @@ void ThrowStatement::toCBuffer(OutBuffer
     buf->writenl();
 }
 
+int ThrowStatement::isUnconditionalBranch()
+{
+    return TRUE;
+}
+
 /******************************** VolatileStatement **************************/
 
 VolatileStatement::VolatileStatement(Loc loc, Statement *statement)
@@ -4451,6 +4545,11 @@ void GotoStatement::toCBuffer(OutBuffer 
     buf->writenl();
 }
 
+int GotoStatement::isUnconditionalBranch()
+{
+    return TRUE;
+}
+
 /******************************** LabelStatement ***************************/
 
 LabelStatement::LabelStatement(Loc loc, Identifier *ident, Statement *statement)
@@ -4541,6 +4640,11 @@ void LabelStatement::toCBuffer(OutBuffer
         statement->toCBuffer(buf, hgs);
 }
 
+int LabelStatement::isUnconditionalBranch()
+{
+    return statement->isUnconditionalBranch();
+}
+
 
 /******************************** LabelDsymbol ***************************/
 
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/dmd/statement.h ./src/dmd/statement.h
--- /home/chad/downloads/dlang/dmd.2.036/src/dmd/statement.h	2009-11-05 01:35:42.000000000 -0500
+++ ./src/dmd/statement.h	2009-11-20 17:21:35.000000000 -0500
@@ -113,6 +113,10 @@ struct Statement : Object
     virtual Expression *doInline(InlineDoState *ids);
     virtual Statement *inlineScan(InlineScanState *iss);
 
+    // Checks to see if the statement is one of the following:
+    //   return, goto, goto case, goto default, break, throw, continue
+    virtual int isUnconditionalBranch();
+
     // Back end
     virtual void toIR(IRState *irs);
 
@@ -483,11 +487,12 @@ struct CaseStatement : Statement
 {
     Expression *exp;
     Statement *statement;
+    int fallThroughAllowed; // TRUE or FALSE.
 
     int index;		// which case it is (since we sort this)
     block *cblock;	// back end: label for the block
 
-    CaseStatement(Loc loc, Expression *exp, Statement *s);
+    CaseStatement(Loc loc, Expression *exp, Statement *s, int fallThroughAllowed);
     Statement *syntaxCopy();
     Statement *semantic(Scope *sc);
     int compare(Object *obj);
@@ -509,8 +514,9 @@ struct CaseRangeStatement : Statement
     Expression *first;
     Expression *last;
     Statement *statement;
+    int fallThroughAllowed; // TRUE or FALSE.
 
-    CaseRangeStatement(Loc loc, Expression *first, Expression *last, Statement *s);
+    CaseRangeStatement(Loc loc, Expression *first, Expression *last, Statement *s, int fallThroughAllowed);
     Statement *syntaxCopy();
     Statement *semantic(Scope *sc);
     void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
@@ -521,11 +527,12 @@ struct CaseRangeStatement : Statement
 struct DefaultStatement : Statement
 {
     Statement *statement;
+    int fallThroughAllowed; // TRUE or FALSE.
 #if IN_GCC
     block *cblock;	// back end: label for the block
 #endif
 
-    DefaultStatement(Loc loc, Statement *s);
+    DefaultStatement(Loc loc, Statement *s, int fallThroughAllowed);
     Statement *syntaxCopy();
     Statement *semantic(Scope *sc);
     int usesEH();
@@ -549,6 +556,7 @@ struct GotoDefaultStatement : Statement
     Expression *interpret(InterState *istate);
     int blockExit();
     void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
+    int isUnconditionalBranch();
 
     void toIR(IRState *irs);
 };
@@ -564,6 +572,7 @@ struct GotoCaseStatement : Statement
     Expression *interpret(InterState *istate);
     int blockExit();
     void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
+    int isUnconditionalBranch();
 
     void toIR(IRState *irs);
 };
@@ -587,6 +596,7 @@ struct ReturnStatement : Statement
     Statement *semantic(Scope *sc);
     int blockExit();
     Expression *interpret(InterState *istate);
+    int isUnconditionalBranch();
 
     int inlineCost(InlineCostState *ics);
     Expression *doInline(InlineDoState *ids);
@@ -607,6 +617,7 @@ struct BreakStatement : Statement
     Expression *interpret(InterState *istate);
     int blockExit();
     void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
+    int isUnconditionalBranch();
 
     void toIR(IRState *irs);
 };
@@ -621,6 +632,7 @@ struct ContinueStatement : Statement
     Expression *interpret(InterState *istate);
     int blockExit();
     void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
+    int isUnconditionalBranch();
 
     void toIR(IRState *irs);
 };
@@ -743,6 +755,7 @@ struct ThrowStatement : Statement
     Statement *semantic(Scope *sc);
     void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
     int blockExit();
+    int isUnconditionalBranch();
 
     Statement *inlineScan(InlineScanState *iss);
 
@@ -776,6 +789,7 @@ struct GotoStatement : Statement
     Statement *semantic(Scope *sc);
     int blockExit();
     Expression *interpret(InterState *istate);
+    int isUnconditionalBranch();
 
     void toIR(IRState *irs);
     void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
@@ -789,6 +803,7 @@ struct LabelStatement : Statement
     TryFinallyStatement *tf;
     block *lblock;		// back end
     int isReturnLabel;
+    int isUnconditionalBranch();
 
     LabelStatement(Loc loc, Identifier *ident, Statement *statement);
     Statement *syntaxCopy();
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/common/core/sync/rwmutex.d ./src/druntime/src/common/core/sync/rwmutex.d
--- /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/common/core/sync/rwmutex.d	2009-09-25 12:05:32.000000000 -0400
+++ ./src/druntime/src/common/core/sync/rwmutex.d	2009-11-20 18:25:21.000000000 -0500
@@ -242,7 +242,7 @@ class ReadWriteMutex
             case Policy.PREFER_WRITERS:
                  return m_numQueuedWriters > 0;
 
-            case Policy.PREFER_READERS:
+            case Policy.PREFER_READERS!:
             default:
                  break;
             }
@@ -309,7 +309,7 @@ class ReadWriteMutex
                 {
                     switch( m_policy )
                     {
-                    default:
+                    default!:
                     case Policy.PREFER_READERS:
                         if( m_numQueuedReaders > 0 )
                             m_readerQueue.notifyAll();
@@ -321,6 +321,7 @@ class ReadWriteMutex
                             m_writerQueue.notify();
                         else if( m_numQueuedReaders > 0 )
                             m_readerQueue.notifyAll();
+			break;
                     }
                 }
             }
@@ -358,7 +359,7 @@ class ReadWriteMutex
             case Policy.PREFER_READERS:
                 return m_numQueuedReaders > 0;
 
-            case Policy.PREFER_WRITERS:
+            case Policy.PREFER_WRITERS!:
             default:
                  break;
             }
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/compiler/dmd/rt/aApplyR.d ./src/druntime/src/compiler/dmd/rt/aApplyR.d
--- /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/compiler/dmd/rt/aApplyR.d	2009-11-01 19:52:46.000000000 -0500
+++ ./src/druntime/src/compiler/dmd/rt/aApplyR.d	2009-11-20 18:25:21.000000000 -0500
@@ -75,7 +75,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -92,7 +92,7 @@ unittest
             case 1:     assert(d == '\U00100456'); break;
             case 2:     assert(d == '\u1234'); break;
             case 3:     assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -139,7 +139,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -156,7 +156,7 @@ unittest
             case 1:     assert(d == '\U00100456'); break;
             case 2:     assert(d == '\u1234'); break;
             case 3:     assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -225,7 +225,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -243,7 +243,7 @@ unittest
             case 2:     assert(d == 0xDC56); break;
             case 3:     assert(d == 0x1234); break;
             case 4:     assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -306,7 +306,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -328,7 +328,7 @@ unittest
             case 6:     assert(d == 0x88); break;
             case 7:     assert(d == 0xB4); break;
             case 8:     assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -385,7 +385,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -407,7 +407,7 @@ unittest
             case 6:     assert(d == 0x88); break;
             case 7:     assert(d == 0xB4); break;
             case 8:     assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -457,7 +457,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -475,7 +475,7 @@ unittest
             case 2:     assert(d == 0xDC56); break;
             case 3:     assert(d == 0x1234); break;
             case 4:     assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -540,7 +540,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -557,7 +557,7 @@ unittest
             case 1:     assert(d == '\U00100456'); assert(k == 4); break;
             case 2:     assert(d == '\u1234'); assert(k == 1); break;
             case 3:     assert(d == 'a'); assert(k == 0); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -606,7 +606,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -623,7 +623,7 @@ unittest
             case 1:     assert(k == 2); assert(d == '\U00100456'); break;
             case 2:     assert(k == 1); assert(d == '\u1234'); break;
             case 3:     assert(k == 0); assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -694,7 +694,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -712,7 +712,7 @@ unittest
             case 2:     assert(k == 4); assert(d == 0xDC56); break;
             case 3:     assert(k == 1); assert(d == 0x1234); break;
             case 4:     assert(k == 0); assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -777,7 +777,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -799,7 +799,7 @@ unittest
             case 6:     assert(k == 1); assert(d == 0x88); break;
             case 7:     assert(k == 1); assert(d == 0xB4); break;
             case 8:     assert(k == 0); assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -857,7 +857,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -879,7 +879,7 @@ unittest
             case 6:     assert(k == 1); assert(d == 0x88); break;
             case 7:     assert(k == 1); assert(d == 0xB4); break;
             case 8:     assert(k == 0); assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -931,7 +931,7 @@ unittest
             case 2:     assert(d == 'l'); break;
             case 3:     assert(d == 'e'); break;
             case 4:     assert(d == 'h'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
@@ -949,7 +949,7 @@ unittest
             case 2:     assert(k == 2); assert(d == 0xDC56); break;
             case 3:     assert(k == 1); assert(d == 0x1234); break;
             case 4:     assert(k == 0); assert(d == 'a'); break;
-            default:    assert(0);
+            default!:   assert(0);
         }
         i++;
     }
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/compiler/dmd/rt/cover.d ./src/druntime/src/compiler/dmd/rt/cover.d
--- /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/compiler/dmd/rt/cover.d	2009-11-01 19:52:46.000000000 -0500
+++ ./src/druntime/src/compiler/dmd/rt/cover.d	2009-11-20 18:25:21.000000000 -0500
@@ -149,8 +149,7 @@ static ~this()
                     {
                     case ' ':
                         continue;
-                    case '0': case '1': case '2': case '3': case '4':
-                    case '5': case '6': case '7': case '8': case '9':
+                    case '0': .. case '9':
                         count = count * 10 + c2 - '0';
                         continue;
                     default:
@@ -389,8 +388,7 @@ void splitLines( char[] buf, inout char[
 
         switch( buf[pos] )
         {
-        case '\r':
-        case '\n':
+        case '\r', '\n'!:
             lines ~= buf[beg .. pos];
             beg = pos + 1;
             if( buf[pos] == '\r' && pos < buf.length - 1 && buf[pos + 1] == '\n' )
@@ -439,10 +437,7 @@ char[] expandTabs( char[] str, int tabsi
                 column += nspaces;
                 break;
 
-            case '\r':
-            case '\n':
-            case PS:
-            case LS:
+            case '\r', '\n', PS, LS:
                 column = 0;
                 goto L1;
 
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/compiler/dmd/rt/switch_.d ./src/druntime/src/compiler/dmd/rt/switch_.d
--- /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/compiler/dmd/rt/switch_.d	2009-11-01 19:52:46.000000000 -0500
+++ ./src/druntime/src/compiler/dmd/rt/switch_.d	2009-11-20 18:25:21.000000000 -0500
@@ -155,7 +155,7 @@ unittest
 {
     switch (cast(char []) "c")
     {
-         case "coo":
+         case "coo"!:
          default:
              break;
     }
@@ -279,7 +279,7 @@ unittest
 {
     switch (cast(wchar []) "c")
     {
-         case "coo":
+         case "coo"!:
          default:
              break;
     }
@@ -404,7 +404,7 @@ unittest
 {
     switch (cast(dchar []) "c")
     {
-         case "coo":
+         case "coo"!:
          default:
              break;
     }
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/compiler/dmd/rt/trace.d ./src/druntime/src/compiler/dmd/rt/trace.d
--- /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/compiler/dmd/rt/trace.d	2009-11-01 19:52:46.000000000 -0500
+++ ./src/druntime/src/compiler/dmd/rt/trace.d	2009-11-20 18:25:21.000000000 -0500
@@ -654,7 +654,7 @@ static char* trace_readline(FILE* fp)
         c = fgetc(fp);
         switch (c)
         {
-            case EOF:
+            case EOF!:
                 if (i == 0)
                 {   trace_free(buf);
                     return null;
@@ -711,7 +711,7 @@ static void trace_merge()
                 case '=':               // ignore rest of file
                     trace_free(buf);
                     goto L1;
-                case ' ':
+                case ' '!:
                 case '\t':              // fan in or fan out line
                     count = strtoul(buf,&p,10);
                     if (p == buf)       // if invalid conversion
@@ -722,16 +722,16 @@ static void trace_merge()
                     s = trace_addsym(p[0 .. strlen(p)]);
                     trace_sympair_add(psp,s,count);
                     break;
-                default:
+                default!:
                     if (!isalpha(*buf))
                     {
                         if (!sfanin)
                             psp = &sfanin;
                         continue;       // regard unrecognized line as separator
                     }
-                case '?':
-                case '_':
-                case '$':
+                case '?'!:
+                case '_'!:
+                case '$'!:
                 case '@':
                     p = buf;
                     while (isgraph(*p))
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/gc/basic/gcx.d ./src/druntime/src/gc/basic/gcx.d
--- /home/chad/downloads/dlang/dmd.2.036/src/druntime/src/gc/basic/gcx.d	2009-09-25 12:06:52.000000000 -0400
+++ ./src/druntime/src/gc/basic/gcx.d	2009-11-20 18:25:21.000000000 -0500
@@ -462,7 +462,7 @@ class GC
                         onOutOfMemoryError();
                     state = 0;
                     continue;
-                default:
+                default!:
                     assert(false);
                 }
             }
@@ -1994,7 +1994,7 @@ struct Gcx
                 goto L1;
             case 2:
                 goto Lnomemory;
-            default:
+            default!:
                 assert(false);
             }
         }
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/base64.d ./src/phobos/std/base64.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/base64.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/base64.d	2009-11-20 18:25:21.000000000 -0500
@@ -139,6 +139,7 @@ body
 
 		default:
 			assert(0);
+			break;
 	}
 	
 	return buf[0 .. (bp - &buf[0])];
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/bigint.d ./src/phobos/std/bigint.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/bigint.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/bigint.d	2009-11-20 18:25:21.000000000 -0500
@@ -693,6 +693,7 @@ Big fromHex(string s)
 
         default:
             parseError();
+	    break;
         }
     }
     if (invalid) parseError();
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/bitmanip.d ./src/phobos/std/bitmanip.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/bitmanip.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/bitmanip.d	2009-11-20 18:25:21.000000000 -0500
@@ -449,7 +449,7 @@ struct BitArray
             {        case 0: assert(b == true); break;
                 case 1: assert(b == false); break;
                 case 2: assert(b == true); break;
-                default: assert(0);
+                default: assert(0); break;
             }
             i++;
         }
@@ -460,7 +460,7 @@ struct BitArray
             {        case 0: assert(b == true); break;
                 case 1: assert(b == false); break;
                 case 2: assert(b == true); break;
-                default: assert(0);
+                default: assert(0); break;
             }
         }
     }
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/c/windows/com.d ./src/phobos/std/c/windows/com.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/c/windows/com.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/c/windows/com.d	2009-11-20 18:25:21.000000000 -0500
@@ -190,6 +190,7 @@ void    CoFreeUnusedLibraries();
 
 interface IUnknown
 {
+extern(System):
     HRESULT QueryInterface(const(IID)* riid, void** pvObject);
     ULONG AddRef();
     ULONG Release();
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/cpuid.d ./src/phobos/std/cpuid.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/cpuid.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/cpuid.d	2009-11-20 18:25:21.000000000 -0500
@@ -169,6 +169,7 @@ version(D_InlineAsm_X86)
 
         default:
             manufac = OTHER;
+	    break;
         }
 
         // threading details
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/date.d ./src/phobos/std/date.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/date.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/date.d	2009-11-20 18:25:21.000000000 -0500
@@ -374,7 +374,7 @@ int dateFromTime(d_time t)
         case 9:         date = day - 272 - leap;        break;
         case 10: date = day - 303 - leap;        break;
         case 11: date = day - 333 - leap;        break;
-        default:
+        default!:
             assert(0);
     }
     return date;
@@ -535,20 +535,11 @@ int daysInMonth(int year, int month)
 {
     switch (month)
     {
-        case 1:
-        case 3:
-        case 5:
-        case 7:
-        case 8:
-        case 10:
-        case 12:
+        case 1, 3, 5, 7, 8, 10, 12:
             return 31;
         case 2:
             return 28 + leapYear(year);
-        case 4:
-        case 6:
-        case 9:
-        case 11:
+        case 4, 6, 9, 11:
             return 30;
     default:
         break;
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/dateparse.d ./src/phobos/std/dateparse.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/dateparse.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/dateparse.d	2009-11-20 18:25:21.000000000 -0500
@@ -179,11 +179,7 @@ private:
                     si++;
                     goto Lret;
 
-                case ' ':
-                case '\n':
-                case '\r':
-                case '\t':
-                case ',':
+                case ' ', '\n', '\r', '\t', ',':
                     si++;
                     break;
 
@@ -431,7 +427,7 @@ private:
             Lret:
                 return result;
 
-            case DP.err:
+            case DP.err!:
             case_error:
                 //message(DTEXT("\terror\n"));
             default:
@@ -479,7 +475,7 @@ private:
                     year = n1;
                     break;
 
-                case DP.minus:
+                case DP.minus!:
                 case DP.slash:  // n1/ ? ? ?
                     dp = parseCalendarDate(n1);
                     if (dp == DP.err)
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/demangle.d ./src/phobos/std/demangle.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/demangle.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/demangle.d	2009-11-20 18:25:21.000000000 -0500
@@ -213,12 +213,11 @@ string demangle(string name)
                 goto L1;
 
             case 'G':                                // static array
-            {        size_t ns = ni;
+                size_t ns = ni;
                 parseNumber();
                 size_t ne = ni;
                 p = parseType() ~ "[" ~ name[ns .. ne] ~ "]";
                 goto L1;
-            }
 
             case 'H':                                // associative array
                 p = parseType();
@@ -245,10 +244,10 @@ string demangle(string name)
                 p = "shared(" ~ parseType() ~ ")";
                 goto L1;
 
-            case 'F':                                // D function
-            case 'U':                                // C function
-            case 'W':                                // Windows function
-            case 'V':                                // Pascal function
+            case 'F'!:                                // D function
+            case 'U'!:                                // C function
+            case 'W'!:                                // Windows function
+            case 'V'!:                                // Pascal function
             case 'R':                                // C++ function
             {        char mc = name[ni - 1];
                 string args;
@@ -304,7 +303,7 @@ string demangle(string name)
                         case 'U': p = "extern (C) ";       break; // C function
                         case 'W': p = "extern (Windows) "; break; // Windows function
                         case 'V': p = "extern (Pascal) ";  break; // Pascal function
-                        default:  assert(0);
+                        default!:  assert(0);
                     }
                     p ~= parseType() ~ " " ~ identifier ~ "(" ~ args ~ ")";
                     return p;
@@ -313,8 +312,8 @@ string demangle(string name)
                     (isdelegate ? " delegate(" : " function(") ~
                     args ~ ")";
                 isdelegate = 0;
-                goto L1;
             }
+                goto L1;
 
             case 'C':        p = "class ";        goto L2;
             case 'S':        p = "struct ";        goto L2;
@@ -416,10 +415,8 @@ string demangle(string name)
                             result ~= 'i';
                             break;
 
-                        case 'a':
-                        case 'w':
-                        case 'd':
-                        {   char m = name[ni - 1];
+                        case 'a', 'w', 'd':
+                            char m = name[ni - 1];
                             if (m == 'a')
                                 m = 'c';
                             size_t n = parseNumber();
@@ -438,7 +435,6 @@ string demangle(string name)
                             result ~= '"';
                             result ~= m;
                             break;
-                        }
 
                         default:
                             error();
@@ -453,7 +449,7 @@ string demangle(string name)
                 case 'Z':
                     break;
 
-                default:
+                default!:
                     error();
             }
             break;
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/format.d ./src/phobos/std/format.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/format.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/format.d	2009-11-20 18:25:21.000000000 -0500
@@ -765,21 +765,21 @@ void doFormat(void delegate(dchar) putc,
 		goto Lnumber;
 
 
-	    case Mangle.Tfloat:
+	    case Mangle.Tfloat!:
 	    case Mangle.Tifloat:
 		if (fc == 'x' || fc == 'X')
 		    goto Luint;
 		vreal = va_arg!(float)(argptr);
 		goto Lreal;
 
-	    case Mangle.Tdouble:
+	    case Mangle.Tdouble!:
 	    case Mangle.Tidouble:
 		if (fc == 'x' || fc == 'X')
 		    goto Lulong;
 		vreal = va_arg!(double)(argptr);
 		goto Lreal;
 
-	    case Mangle.Treal:
+	    case Mangle.Treal!:
 	    case Mangle.Tireal:
 		vreal = va_arg!(real)(argptr);
 		goto Lreal;
@@ -858,7 +858,7 @@ void doFormat(void delegate(dchar) putc,
 			    putstr(s);
 			    break;
 
-			case Mangle.Tconst:
+			case Mangle.Tconst!:
 			case Mangle.Tinvariant:
 			    mi++;
 			    continue;
@@ -869,9 +869,12 @@ void doFormat(void delegate(dchar) putc,
 			      goto Lerror;
 			    void[] va = va_arg!(void[])(argptr);
 			    putArray(va.ptr, va.length, ti2);
+			    break;
 		    }
 		    return;
 		}
+		assert(0);
+		return;
 
 	    case Mangle.Ttypedef:
 		ti = (cast(TypeInfo_Typedef)ti).base;
@@ -886,13 +889,12 @@ void doFormat(void delegate(dchar) putc,
 		return;
 
 	    case Mangle.Tstruct:
-	    {	TypeInfo_Struct tis = cast(TypeInfo_Struct)ti;
+	    	TypeInfo_Struct tis = cast(TypeInfo_Struct)ti;
 		if (tis.xtoString is null)
 		    throw new FormatError("Can't convert " ~ tis.toString() ~ " to string: \"string toString()\" not defined");
 		s = tis.xtoString(argptr);
 		argptr += (tis.tsize() + 3) & ~3;
 		goto Lputstr;
-	    }
 
 	    default:
 		goto Lerror;
@@ -901,7 +903,7 @@ void doFormat(void delegate(dchar) putc,
     Lnumber:
 	switch (fc)
 	{
-	    case 's':
+	    case 's'!:
 	    case 'd':
 		if (signed)
 		{   if (cast(long)vnumber < 0)
@@ -1053,8 +1055,8 @@ void doFormat(void delegate(dchar) putc,
                 tn = skipCI(tn);
                 switch (cast(Mangle)tn.classinfo.name[9])
                 {
-                case Mangle.Tchar:
-                case Mangle.Twchar:
+                case Mangle.Tchar!:
+                case Mangle.Twchar!:
                 case Mangle.Tdchar:
                     ti = tn;
                     mi = 9;
@@ -1091,7 +1093,7 @@ void doFormat(void delegate(dchar) putc,
                 fmt = toUTF8(dfmt);
                 break;
                 
-            case Mangle.Tconst:
+            case Mangle.Tconst!:
             case Mangle.Tinvariant:
                 mi++;
                 goto L1;
@@ -1164,8 +1166,11 @@ void doFormat(void delegate(dchar) putc,
                     case '#':	flags |= FLhash;	continue;
                     case '0':	flags |= FL0pad;	continue;
                         
-                    case '%':	if (flags == 0)
+		    case '%':
+			if (flags == 0)
                             goto Lputc;
+			goto default;
+
                     default:	break;
                     }
                     break;
@@ -1582,7 +1587,6 @@ struct FormatInfo
             switch (fmt[i])
             {
             case '(':
-            {
                 // embedded format specifier
                 auto j = i + 1;
                 void check(bool condition)
@@ -1617,7 +1621,7 @@ struct FormatInfo
                 //result.raw = to!(const(char)[])(fmt[0 .. i]);
                 fmt = fmt[i .. $];
                 return result;
-            }
+
             case '-': result.flDash = true; ++i; break;
             case '+': result.flPlus = true; ++i; break;
             case '#': result.flHash = true; ++i; break;
@@ -1638,8 +1642,7 @@ struct FormatInfo
                     result.width = DYNAMIC;
                 }
                 break;
-            case '1': case '2': case '3': case '4':
-            case '5': case '6': case '7': case '8': case '9':
+	    case '1': .. case '9':
                 auto tmp = fmt[i .. $];
                 const widthOrArgIndex = .parse!(ushort)(tmp);
                 assert(tmp.length,
@@ -2858,10 +2861,10 @@ void skipData(Range)(ref Range input, Fo
     switch (spec.spec)
     {
     case 'c': input.popFront; break;
-    case 'd': assert(false, "Not implemented");
+    case 'd': assert(false, "Not implemented"); break;
     case 'u': while (!input.empty && isdigit(input.front)) input.popFront;
         break;
-    default:
+    default!:
         assert(false, text("Not understood: ", spec.spec));
     }
 }
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/getopt.d ./src/phobos/std/getopt.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/getopt.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/getopt.d	2009-11-20 18:25:21.000000000 -0500
@@ -542,7 +542,7 @@ private void setConfig(ref configuration
     case config.noPassThrough: cfg.passThrough = false; break;
     case config.stopOnFirstNonOption:
         cfg.stopOnFirstNonOption = true; break;
-    default: assert(false);
+    default!: assert(false);
     }
 }
 
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/math.d ./src/phobos/std/math.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/math.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/math.d	2009-11-20 18:25:21.000000000 -0500
@@ -2512,6 +2512,7 @@ pure nothrow F pow(F)(F x, int n) if (is
         case -2:
             return 1 / (x * x);
         default:
+	    break;
         }
 
         m = -n;
@@ -2528,6 +2529,7 @@ pure nothrow F pow(F)(F x, int n) if (is
         case 2:
             return x * x;
         default:
+	    break;
         }
 
         v = x;
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/mmfile.d ./src/phobos/std/mmfile.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/mmfile.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/mmfile.d	2009-11-20 18:25:21.000000000 -0500
@@ -123,7 +123,7 @@ class MmFile
             fmode = 0;
             break;
 
-        default:
+        default!:
             assert(0);
         }
 
@@ -338,7 +338,7 @@ class MmFile
                 fmode = 0;
                 break;
 
-            default:
+            default!:
                 assert(0);
             }
     
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/regex.d ./src/phobos/std/regex.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/regex.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/regex.d	2009-11-20 18:25:21.000000000 -0500
@@ -363,41 +363,41 @@ Returns the number of parenthesized capt
             //printf("\tprog[%d] = %d, %d\n", i, prog[i], REstring);
             switch (prog[i])
             {
-            case REend:
-            case REanychar:
-            case REanystar:
-            case REbackref:
-            case REeol:
-            case REchar:
-            case REichar:
-            case REdchar:
-            case REidchar:
-            case REstring:
-            case REistring:
-            case REtestbit:
-            case REbit:
-            case REnotbit:
-            case RErange:
-            case REnotrange:
-            case REwordboundary:
-            case REnotwordboundary:
-            case REdigit:
-            case REnotdigit:
-            case REspace:
-            case REnotspace:
-            case REword:
-            case REnotword:
+            case REend!:
+            case REanychar!:
+            case REanystar!:
+            case REbackref!:
+            case REeol!:
+            case REchar!:
+            case REichar!:
+            case REdchar!:
+            case REidchar!:
+            case REstring!:
+            case REistring!:
+            case REtestbit!:
+            case REbit!:
+            case REnotbit!:
+            case RErange!:
+            case REnotrange!:
+            case REwordboundary!:
+            case REnotwordboundary!:
+            case REdigit!:
+            case REnotdigit!:
+            case REspace!:
+            case REnotspace!:
+            case REword!:
+            case REnotword!:
                 return;
 
             case REbol:
                 i++;
                 continue;
 
-            case REor:
-            case REnm:
-            case REnmq:
-            case REparen:
-            case REgoto:
+            case REor!:
+            case REnm!:
+            case REnmq!:
+            case REparen!:
+            case REgoto!:
             {
                 auto bitbuf = new OutBuffer;
                 auto r = new Range(bitbuf);
@@ -416,7 +416,7 @@ Returns the number of parenthesized capt
                 }
                 return;
             }
-            default:
+            default!:
                 assert(0);
             }
         }
@@ -579,8 +579,8 @@ Returns the number of parenthesized capt
         c = pattern[p];
         switch (c)
         {
-        case '*':
-        case '+':
+        case '*'!:
+        case '+'!:
         case '?':
             error("*+? not allowed in atom");
             p++;
@@ -647,21 +647,11 @@ Returns the number of parenthesized capt
                 p++;
                 break;
 
-            case 'f':
-            case 'n':
-            case 'r':
-            case 't':
-            case 'v':
-            case 'c':
-            case 'x':
-            case 'u':
-            case '0':
+            case 'f', 'n', 'r', 't', 'v', 'c', 'x', 'u', '0':
                 c = cast(char)escape(pattern, p);
                 goto Lbyte;
 
-            case '1': case '2': case '3':
-            case '4': case '5': case '6':
-            case '7': case '8': case '9':
+            case '1': .. case '9':
                 c -= '1';
                 if (c < re_nsub)
                 {   buf.write(REbackref);
@@ -704,21 +694,21 @@ Returns the number of parenthesized capt
 
                     switch (qc)
                     {
-                    case '{':
-                    case '*':
-                    case '+':
+                    case '{'!:
+                    case '*'!:
+                    case '+'!:
                     case '?':
                         if (q == p)
                             goto Lchar;
                         q--;
                         break;
 
-                    case '(':   case ')':
-                    case '|':
-                    case '[':   case ']':
-                    case '.':   case '^':
-                    case '$':   case '\\':
-                    case '}':
+                    case '('!:   case ')'!:
+                    case '|'!:
+                    case '['!:   case ']'!:
+                    case '.'!:   case '^'!:
+                    case '$'!:   case '\\'!:
+                    case '}'!:
                         break;
 
                     default:
@@ -834,8 +824,7 @@ Returns the number of parenthesized capt
             r.setbit2(0);
         switch (pattern[p])
         {
-        case ']':
-        case '-':
+        case ']', '-':
             c = pattern[p];
             p++;
             r.setbit2(c);
@@ -855,14 +844,14 @@ Returns the number of parenthesized capt
             {
             case ']':
                 switch (rs)
-                {   case RS.dash:
+                {   case RS.dash!:
                         r.setbit2('-');
                 case RS.rliteral:
                     r.setbit2(c);
                     break;
                 case RS.start:
                     break;
-                default:
+                default!:
                     assert(0);
                 }
                 p++;
@@ -913,7 +902,7 @@ Returns the number of parenthesized capt
 
                 Lrs:
                     switch (rs)
-                    {   case RS.dash:
+                    {   case RS.dash!:
                             r.setbit2('-');
                     case RS.rliteral:
                         r.setbit2(c);
@@ -949,7 +938,7 @@ Returns the number of parenthesized capt
                 p++;
             Lrange:
                 switch (rs)
-                {   case RS.rliteral:
+                {   case RS.rliteral!:
                         r.setbit2(c);
                 case RS.start:
                     c = c2;
@@ -968,7 +957,7 @@ Returns the number of parenthesized capt
                     rs = RS.start;
                     break;
 
-                default:
+                default!:
                     assert(0);
                 }
                 continue;
@@ -1031,7 +1020,7 @@ Returns the number of parenthesized capt
                 }
                 return 1;
 
-            case REdchar:
+            case REdchar!:
             case REidchar:
                 return 1;
 
@@ -1059,7 +1048,7 @@ Returns the number of parenthesized capt
                 }
                 return 1;
 
-            case REtestbit:
+            case REtestbit!:
             case REbit:
                 maxc = (cast(ushort *)&prog[i + 1])[0];
                 maxb = (cast(ushort *)&prog[i + 1])[1];
@@ -1082,7 +1071,7 @@ Returns the number of parenthesized capt
                     r.base[b] |= ~prog[i + 1 + 4 + b];
                 return 1;
 
-            case REbol:
+            case REbol!:
             case REeol:
                 return 0;
 
@@ -1101,7 +1090,7 @@ Returns the number of parenthesized capt
             case REanystar:
                 return 0;
 
-            case REnm:
+            case REnm!:
             case REnmq:
                 // len, n, m, ()
                 len = (cast(uint *)&prog[i + 1])[0];
@@ -1125,7 +1114,7 @@ Returns the number of parenthesized capt
             case REend:
                 return 0;
 
-            case REwordboundary:
+            case REwordboundary!:
             case REnotwordboundary:
                 return 0;
 
@@ -1174,7 +1163,7 @@ Returns the number of parenthesized capt
             case REbackref:
                 return 0;
 
-            default:
+            default!:
                 assert(0);
             }
         }
@@ -1218,14 +1207,7 @@ Returns the number of parenthesized capt
             c &= 0x1F;
             break;
 
-        case '0':
-        case '1':
-        case '2':
-        case '3':
-        case '4':
-        case '5':
-        case '6':
-        case '7':
+        case '0': .. case '7':
             c -= '0';
             for (i = 0; i < 2; i++)
             {
@@ -1435,7 +1417,7 @@ Returns the number of parenthesized capt
                     pc++;
                     break;
 
-                case REnm:
+                case REnm!:
                 case REnmq:
                     // len, n, m, ()
                     puint = cast(uint *)&prog[pc + 1];
@@ -1507,7 +1489,7 @@ Returns the number of parenthesized capt
                     pc += 2;
                     break;
 
-                default:
+                default!:
                     assert(0);
                 }
             }
@@ -2291,7 +2273,7 @@ Returns $(D hit) (converted to $(D strin
                 }
                 break;
 
-            case engine.REnm:
+            case engine.REnm!:
             case engine.REnmq:
                 // len, n, m, ()
                 puint = cast(uint *)&engine.program[pc + 1];
@@ -2491,7 +2473,7 @@ Returns $(D hit) (converted to $(D strin
                 pc++;
                 break;
 
-            case engine.REbackref:
+            case engine.REbackref!:
             {
                 n = engine.program[pc + 1];
                 debug(regex) printf("\tREbackref %d\n", n);
@@ -2513,7 +2495,7 @@ Returns $(D hit) (converted to $(D strin
                 break;
             }
 
-            default:
+            default!:
                 assert(0);
             }
         }
@@ -2583,8 +2565,7 @@ and, using the format string, generate a
                 endIdx = input.length;
                 goto Lstring;
 
-            case '0': case '1': case '2': case '3': case '4':
-            case '5': case '6': case '7': case '8': case '9':
+            case '0': .. case '9':
                 i = c - '0';
                 if (f + 1 == format.length)
                 {
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/regexp.d ./src/phobos/std/regexp.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/regexp.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/regexp.d	2009-11-20 18:25:21.000000000 -0500
@@ -1512,7 +1512,7 @@ public int test(string s)
                     pc++;
                     break;
 
-                case REnm:
+                case REnm!:
                 case REnmq:
                     // len, n, m, ()
                     puint = cast(uint *)&prog[pc + 1];
@@ -1583,7 +1583,7 @@ public int test(string s)
                     pc += 2;
                     break;
 
-                default:
+                default!:
                     assert(0);
                 }
             }
@@ -1892,7 +1892,7 @@ public int test(string s)
                 }
                 break;
 
-            case REnm:
+            case REnm!:
             case REnmq:
                 // len, n, m, ()
                 puint = cast(uint *)&program[pc + 1];
@@ -2091,7 +2091,6 @@ public int test(string s)
                 break;
 
             case REbackref:
-            {
                 n = program[pc + 1];
                 debug(regexp) printf("\tREbackref %d\n", n);
 
@@ -2110,9 +2109,8 @@ public int test(string s)
                 src += len;
                 pc += 2;
                 break;
-            }
 
-            default:
+            default!:
                 assert(0);
             }
         }
@@ -2286,8 +2284,8 @@ public int test(string s)
             c = pattern[p];
             switch (c)
             {
-            case '*':
-            case '+':
+            case '*'!:
+            case '+'!:
             case '?':
                 error("*+? not allowed in atom");
                 p++;
@@ -2354,21 +2352,11 @@ public int test(string s)
                     p++;
                     break;
 
-                case 'f':
-                case 'n':
-                case 'r':
-                case 't':
-                case 'v':
-                case 'c':
-                case 'x':
-                case 'u':
-                case '0':
+                case 'f', 'n', 'r', 't', 'v', 'c', 'x', 'u', '0':
                     c = cast(char)escape();
                     goto Lbyte;
 
-                case '1': case '2': case '3':
-                case '4': case '5': case '6':
-                case '7': case '8': case '9':
+		case '1': .. case '9':
                     c -= '1';
                     if (c < re_nsub)
                     {   buf.write(REbackref);
@@ -2411,20 +2399,20 @@ public int test(string s)
 
                         switch (qc)
                         {
-                        case '{':
-                        case '*':
-                        case '+':
+                        case '{'!:
+                        case '*'!:
+                        case '+'!:
                         case '?':
                             if (q == p)
                                 goto Lchar;
                             q--;
                             break;
 
-                        case '(':   case ')':
-                        case '|':
-                        case '[':   case ']':
-                        case '.':   case '^':
-                        case '$':   case '\\':
+                        case '('!:  case ')'!:
+                        case '|'!:
+                        case '['!:  case ']'!:
+                        case '.'!:  case '^'!:
+                        case '$'!:  case '\\'!:
                         case '}':
                             break;
 
@@ -2541,8 +2529,7 @@ private:
             r.setbit2(0);
         switch (pattern[p])
         {
-        case ']':
-        case '-':
+        case ']', '-':
             c = pattern[p];
             p++;
             r.setbit2(c);
@@ -2564,14 +2551,14 @@ private:
             {
             case ']':
                 switch (rs)
-                {   case RS.dash:
+                {   case RS.dash!:
                         r.setbit2('-');
                 case RS.rliteral:
                     r.setbit2(c);
                     break;
                 case RS.start:
                     break;
-                default:
+                default!:
                     assert(0);
                 }
                 p++;
@@ -2622,7 +2609,7 @@ private:
 
                 Lrs:
                     switch (rs)
-                    {   case RS.dash:
+                    {   case RS.dash!:
                             r.setbit2('-');
                     case RS.rliteral:
                         r.setbit2(c);
@@ -2658,7 +2645,7 @@ private:
                 p++;
             Lrange:
                 switch (rs)
-                {   case RS.rliteral:
+                {   case RS.rliteral!:
                         r.setbit2(c);
                 case RS.start:
                     c = c2;
@@ -2677,7 +2664,7 @@ private:
                     rs = RS.start;
                     break;
 
-                default:
+                default!:
                     assert(0);
                 }
                 continue;
@@ -2753,14 +2740,7 @@ private:
             c &= 0x1F;
             break;
 
-        case '0':
-        case '1':
-        case '2':
-        case '3':
-        case '4':
-        case '5':
-        case '6':
-        case '7':
+        case '0': .. case '7':
             c -= '0';
             for (i = 0; i < 2; i++)
             {
@@ -2849,41 +2829,41 @@ private:
             //printf("\tprog[%d] = %d, %d\n", i, prog[i], REstring);
             switch (prog[i])
             {
-            case REend:
-            case REanychar:
-            case REanystar:
-            case REbackref:
-            case REeol:
-            case REchar:
-            case REichar:
-            case REdchar:
-            case REidchar:
-            case REstring:
-            case REistring:
-            case REtestbit:
-            case REbit:
-            case REnotbit:
-            case RErange:
-            case REnotrange:
-            case REwordboundary:
-            case REnotwordboundary:
-            case REdigit:
-            case REnotdigit:
-            case REspace:
-            case REnotspace:
-            case REword:
-            case REnotword:
+            case REend!:
+            case REanychar!:
+            case REanystar!:
+            case REbackref!:
+            case REeol!:
+            case REchar!:
+            case REichar!:
+            case REdchar!:
+            case REidchar!:
+            case REstring!:
+            case REistring!:
+            case REtestbit!:
+            case REbit!:
+            case REnotbit!:
+            case RErange!:
+            case REnotrange!:
+            case REwordboundary!:
+            case REnotwordboundary!:
+            case REdigit!:
+            case REnotdigit!:
+            case REspace!:
+            case REnotspace!:
+            case REword!:
+            case REnotword!:
                 return;
 
             case REbol:
                 i++;
                 continue;
 
-            case REor:
-            case REnm:
-            case REnmq:
-            case REparen:
-            case REgoto:
+            case REor!:
+            case REnm!:
+            case REnmq!:
+            case REparen!:
+            case REgoto!:
             {
                 auto bitbuf = new OutBuffer;
                 auto r = new Range(bitbuf);
@@ -2902,7 +2882,7 @@ private:
                 }
                 return;
             }
-            default:
+            default!:
                 assert(0);
             }
         }
@@ -2944,7 +2924,7 @@ private:
                 }
                 return 1;
 
-            case REdchar:
+            case REdchar!:
             case REidchar:
                 return 1;
 
@@ -2971,7 +2951,7 @@ private:
                 }
                 return 1;
 
-            case REtestbit:
+            case REtestbit!:
             case REbit:
                 maxc = (cast(ushort *)&prog[i + 1])[0];
                 maxb = (cast(ushort *)&prog[i + 1])[1];
@@ -2994,7 +2974,7 @@ private:
                     r.base[b] |= ~prog[i + 1 + 4 + b];
                 return 1;
 
-            case REbol:
+            case REbol!:
             case REeol:
                 return 0;
 
@@ -3011,7 +2991,7 @@ private:
             case REanystar:
                 return 0;
 
-            case REnm:
+            case REnm!:
             case REnmq:
                 // len, n, m, ()
                 len = (cast(uint *)&prog[i + 1])[0];
@@ -3035,7 +3015,7 @@ private:
             case REend:
                 return 0;
 
-            case REwordboundary:
+            case REwordboundary!:
             case REnotwordboundary:
                 return 0;
 
@@ -3084,7 +3064,7 @@ private:
             case REbackref:
                 return 0;
 
-            default:
+            default!:
                 assert(0);
             }
         }
@@ -3150,8 +3130,7 @@ private:
                 rm_eo = input.length;
                 goto Lstring;
 
-            case '0': case '1': case '2': case '3': case '4':
-            case '5': case '6': case '7': case '8': case '9':
+            case '0': .. case '9':
                 i = c - '0';
                 if (f + 1 == format.length)
                 {
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/socket.d ./src/phobos/std/socket.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/socket.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/socket.d	2009-11-20 18:25:21.000000000 -0500
@@ -1277,6 +1277,7 @@ class Socket
 
 			default:
 				result = new UnknownAddress;
+				break;
 		}
 		return result;
 	}
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/stream.d ./src/phobos/std/stream.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/stream.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/stream.d	2009-11-20 18:25:21.000000000 -0500
@@ -477,7 +477,7 @@ class Stream : InputStream, OutputStream
     char ch = getc();
     while (readable) {
       switch (ch) {
-      case '\r':
+      case '\r'!:
 	if (seekable) {
 	  ch = getc();
 	  if (ch != '\n')
@@ -485,12 +485,12 @@ class Stream : InputStream, OutputStream
 	} else {
 	  prevCr = true;
 	}
-      case '\n':
+      case '\n'!:
       case char.init:
 	result.length = strlen;
 	return result;
 
-      default:
+      default!:
 	if (strlen < result.length) {
 	  result[strlen] = ch;
 	} else {
@@ -519,7 +519,7 @@ class Stream : InputStream, OutputStream
     wchar c = getcw();
     while (readable) {
       switch (c) {
-      case '\r':
+      case '\r'!:
 	if (seekable) {
 	  c = getcw();
 	  if (c != '\n')
@@ -527,12 +527,12 @@ class Stream : InputStream, OutputStream
 	} else {
 	  prevCr = true;
 	}
-      case '\n':
+      case '\n'!:
       case wchar.init:
 	result.length = strlen;
 	return result;
 
-      default:
+      default!:
 	if (strlen < result.length) {
 	  result[strlen] = c;
 	} else {
@@ -737,15 +737,15 @@ class Stream : InputStream, OutputStream
 	  i++;
 	// check the typechar and act accordingly
 	switch (fmt[i]) {
-	case 'd':	// decimal/hexadecimal/octal integer
-	case 'D':
-	case 'u':
-	case 'U':
-	case 'o':
-	case 'O':
-	case 'x':
-	case 'X':
-	case 'i':
+	case 'd'!:	// decimal/hexadecimal/octal integer
+	case 'D'!:
+	case 'u'!:
+	case 'U'!:
+	case 'o'!:
+	case 'O'!:
+	case 'x'!:
+	case 'X'!:
+	case 'i'!:
 	case 'I':
 	  {
 	    while (iswhite(c)) {
@@ -780,7 +780,7 @@ class Stream : InputStream, OutputStream
 	    long n = 0;
 	    switch (ifmt)
 	    {
-		case 'd':	// decimal
+		case 'd'!:	// decimal
 		case 'u': {
 		  while (isdigit(c) && width) {
 		    n = n * 10 + (c - '0');
@@ -812,7 +812,7 @@ class Stream : InputStream, OutputStream
 		  }
 		} break;
 
-		default:
+		default!:
 		    assert(0);
 	    }
 	    if (neg)
@@ -846,11 +846,11 @@ class Stream : InputStream, OutputStream
 	    i++;
 	  } break;
 
-	case 'f':	// float
-	case 'F':
-	case 'e':
-	case 'E':
-	case 'g':
+	case 'f'!:	// float
+	case 'F'!:
+	case 'e'!:
+	case 'E'!:
+	case 'g'!:
 	case 'G':
 	  {
 	    while (iswhite(c)) {
@@ -2290,13 +2290,13 @@ class EndianStream : FilterStream {
 	ubyte x = *startb;
 	*startb = *(startb+1);
 	*(startb+1) = x;
-	break;
-      }
+      } break;
+
       case 4: {
 	*start = bswap(*start);
-	break;
-      }
-      default: {
+      } break;
+
+      default!: {
 	uint* end = cast(uint*)(buffer + size - uint.sizeof);
 	while (start < end) {
 	  uint x = bswap(*start);
@@ -2558,7 +2558,7 @@ class TArrayStream(Buffer): Stream {
     case SeekPos.Set: scur = offset; break;
     case SeekPos.Current: scur = cast(long)(cur + offset); break;
     case SeekPos.End: scur = cast(long)(len + offset); break;
-    default:
+    default!:
 	assert(0);
     }
 
@@ -2855,7 +2855,7 @@ class SliceStream : FilterStream {
 	else
 	  spos = cast(long)(s.size - low + offset);
 	break;
-      default:
+      default!:
 	assert(0);
     }
 
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/string.d ./src/phobos/std/string.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/string.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/string.d	2009-11-20 18:25:21.000000000 -0500
@@ -1056,12 +1056,7 @@ string capwords(string s)
     {
     switch (s[i])
     {
-        case ' ':
-        case '\t':
-        case '\f':
-        case '\r':
-        case '\n':
-        case '\v':
+        case ' ', '\t', '\f', '\r', '\n', '\v':
         if (inword)
         {
             r ~= capitalize(s[istart .. i]);
@@ -1211,12 +1206,7 @@ S[] split(S)(S s) if (isSomeString!S)
     {
         switch (s[i])
         {
-        case ' ':
-        case '\t':
-        case '\f':
-        case '\r':
-        case '\n':
-        case '\v':
+        case ' ', '\t', '\f', '\r', '\n', '\v':
             if (inword)
             {
                 result ~= s[istart .. i];
@@ -2054,10 +2044,7 @@ string expandtabs(string str, int tabsiz
         column += nspaces;
         break;
 
-        case '\r':
-        case '\n':
-        case PS:
-        case LS:
+        case '\r', '\n', PS, LS:
         column = 0;
         goto L1;
 
@@ -2153,10 +2140,7 @@ string entab(string s, int tabsize = 8)
         column = (column + tabsize) / tabsize * tabsize;
         break;
 
-        case '\r':
-        case '\n':
-        case PS:
-        case LS:
+        case '\r', '\n', PS, LS:
         // Truncate any trailing spaces or tabs
         if (nwhite)
         {
@@ -2976,7 +2960,7 @@ string succ(string s)
             c = '0';
             carry = '1';
             goto Lcarry;
-        case 'z':
+        case 'z'!:
         case 'Z':
             c -= 'Z' - 'A';
             carry = c;
@@ -3066,7 +3050,7 @@ string tr(string str, string from, strin
         case 'c':   mod_c = 1; break;   // complement
         case 'd':   mod_d = 1; break;   // delete unreplaced chars
         case 's':   mod_s = 1; break;   // squeeze duplicated replaced chars
-        default:    assert(0);
+        default!:   assert(0);
     }
     }
 
@@ -3800,10 +3784,7 @@ size_t column(string str, int tabsize = 
             column = (column + tabsize) / tabsize * tabsize;
             break;
 
-        case '\r':
-        case '\n':
-        case PS:
-        case LS:
+        case '\r', '\n', PS, LS:
             column = 0;
             break;
 
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/utf.d ./src/phobos/std/utf.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/utf.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/utf.d	2009-11-20 18:25:21.000000000 -0500
@@ -504,7 +504,7 @@ body
     uint n = void;
     switch (u & 0b1111_0000)
     {
-    case 0b1100_0000: case 0b1101_0000:
+    case 0b1100_0000, 0b1101_0000:
         n = 2;
         break;
     case 0b1110_0000:
@@ -514,7 +514,7 @@ body
         enforce(!(u & 0b0000_1000));
         n = 4;
         break;
-    default:
+    default!:
         enforce(0);
     }
 
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/variant.d ./src/phobos/std/variant.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/variant.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/variant.d	2009-11-20 18:25:21.000000000 -0500
@@ -216,15 +216,15 @@ private:
             string * target = cast(string*) parm;
             *target = "<Uninitialized VariantN>";
             break;
-        case OpID.get:
-        case OpID.testConversion:
-        case OpID.index:
-        case OpID.indexAssign:
-        case OpID.catAssign:
-        case OpID.length:
+        case OpID.get!:
+        case OpID.testConversion!:
+        case OpID.index!:
+        case OpID.indexAssign!:
+        case OpID.catAssign!:
+        case OpID.length!:
             throw new VariantException(
                 "Attempt to use an uninitialized VariantN");
-        default: assert(false, "Invalid OpID");
+        default!: assert(false, "Invalid OpID");
         }
         return 0;
     }
@@ -359,6 +359,8 @@ private:
             {
                 throw new VariantException(typeid(A), typeid(string));
             }
+            assert(0);
+            break;
 
         case OpID.index:
             // Added allowed!(...) prompted by a bug report by Chris
@@ -383,6 +385,8 @@ private:
             {
                 throw new VariantException(typeid(A), typeid(void[]));
             }
+            assert(0);
+            break;
 
         case OpID.indexAssign:
             static if (isArray!(A) && is(typeof((*zis)[0] = (*zis)[0])))
@@ -405,6 +409,8 @@ private:
             {
                 throw new VariantException(typeid(A), typeid(void[]));
             }
+            assert(0);
+            break;
 
         case OpID.catAssign:
             static if (is(typeof((*zis)[0])) && is(typeof((*zis) ~= *zis)))
@@ -428,6 +434,8 @@ private:
             {
                 throw new VariantException(typeid(A), typeid(void[]));
             }
+            assert(0);
+            break;
 
         case OpID.length:
             static if (is(typeof(zis.length)))
@@ -438,11 +446,13 @@ private:
             {
                 throw new VariantException(typeid(A), typeid(void[]));
             }
+	    assert(0);
+	    break;
 
-        case OpID.apply:
+        case OpID.apply!:
             assert(0);
 
-        default: assert(false);
+        default!: assert(false);
         }
         return 0;
     }
diff -rupdwN /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/xml.d ./src/phobos/std/xml.d
--- /home/chad/downloads/dlang/dmd.2.036/src/phobos/std/xml.d	2009-11-05 01:35:42.000000000 -0500
+++ ./src/phobos/std/xml.d	2009-11-20 18:25:21.000000000 -0500
@@ -2400,22 +2400,22 @@ private
             int n = 0;
             switch(d)
             {
-                case 'F','f': ++n;
-                case 'E','e': ++n;
-                case 'D','d': ++n;
-                case 'C','c': ++n;
-                case 'B','b': ++n;
-                case 'A','a': ++n;
-                case '9': ++n;
-                case '8': ++n;
-                case '7': ++n;
-                case '6': ++n;
-                case '5': ++n;
-                case '4': ++n;
-                case '3': ++n;
-                case '2': ++n;
-                case '1': ++n;
-                case '0': break;
+                case 'F','f'!: ++n;
+                case 'E','e'!: ++n;
+                case 'D','d'!: ++n;
+                case 'C','c'!: ++n;
+                case 'B','b'!: ++n;
+                case 'A','a'!: ++n;
+                case '9'!: ++n;
+                case '8'!: ++n;
+                case '7'!: ++n;
+                case '6'!: ++n;
+                case '5'!: ++n;
+                case '4'!: ++n;
+                case '3'!: ++n;
+                case '2'!: ++n;
+                case '1'!: ++n;
+                case '0'!: break;
                 default: n = 100; break;
             }
             if (n >= radix) break;
