diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index 37579c6..da8350b 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -583,7 +583,8 @@
 }
 
 Value *ScalarExprEmitter::VisitStmtExpr(const StmtExpr *E) {
-  return CGF.EmitCompoundStmt(*E->getSubStmt(), true).getScalarVal();
+  return CGF.EmitCompoundStmt(*E->getSubStmt(),
+                              !E->getType()->isVoidType()).getScalarVal();
 }
 
 
diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp
index 78d8563..9743c7c 100644
--- a/lib/CodeGen/CGStmt.cpp
+++ b/lib/CodeGen/CGStmt.cpp
@@ -86,8 +86,6 @@
 RValue CodeGenFunction::EmitCompoundStmt(const CompoundStmt &S, bool GetLast,
                                          llvm::Value *AggLoc, bool isAggVol) {
   // FIXME: handle vla's etc.
-  if (S.body_empty() || !isa<Expr>(S.body_back())) GetLast = false;
-  
   CGDebugInfo *DI = CGM.getDebugInfo();
   if (DI) {
     if (S.getLBracLoc().isValid())
@@ -108,7 +106,17 @@
   if (!GetLast)
     return RValue::get(0);
   
-  return EmitAnyExpr(cast<Expr>(S.body_back()), AggLoc);
+  // We have to special case labels here.  They are statements, but when put at
+  // the end of a statement expression, they yield the value of their
+  // subexpression.  Handle this by walking through all labels we encounter,
+  // emitting them before we evaluate the subexpr.
+  const Stmt *LastStmt = S.body_back();
+  while (const LabelStmt *LS = dyn_cast<LabelStmt>(LastStmt)) {
+    EmitLabel(*LS);
+    LastStmt = LS->getSubStmt();
+  }
+  
+  return EmitAnyExpr(cast<Expr>(LastStmt), AggLoc);
 }
 
 void CodeGenFunction::EmitBlock(llvm::BasicBlock *BB) {
@@ -130,10 +138,14 @@
   Builder.SetInsertPoint(BB);
 }
 
-void CodeGenFunction::EmitLabelStmt(const LabelStmt &S) {
+void CodeGenFunction::EmitLabel(const LabelStmt &S) {
   llvm::BasicBlock *NextBB = getBasicBlockForLabel(&S);
-  
   EmitBlock(NextBB);
+}
+
+
+void CodeGenFunction::EmitLabelStmt(const LabelStmt &S) {
+  EmitLabel(S);
   EmitStmt(S.getSubStmt());
 }
 
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index 7d11a74..5bf6bc1 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -359,6 +359,7 @@
   void EmitStmt(const Stmt *S);
   RValue EmitCompoundStmt(const CompoundStmt &S, bool GetLast = false,
                           llvm::Value *AggLoc = 0, bool isAggVol = false);
+  void EmitLabel(const LabelStmt &S); // helper for EmitLabelStmt.
   void EmitLabelStmt(const LabelStmt &S);
   void EmitGotoStmt(const GotoStmt &S);
   void EmitIfStmt(const IfStmt &S);
