diff --git a/lib/CodeGen/CGDeclCXX.cpp b/lib/CodeGen/CGDeclCXX.cpp
index cbee247..036be92 100644
--- a/lib/CodeGen/CGDeclCXX.cpp
+++ b/lib/CodeGen/CGDeclCXX.cpp
@@ -321,11 +321,7 @@
 
   EmitBlock(InitCheckBlock);
 
-  // Variables used when coping with thread-safe statics and exceptions.
-  llvm::BasicBlock *SavedLandingPad = 0;
-  llvm::BasicBlock *Abort = 0;
-  
-  if (ThreadsafeStatics) {    
+  if (ThreadsafeStatics) {
     // Call __cxa_guard_acquire.
     V = Builder.CreateCall(getGuardAcquireFn(*this), GuardVariable);
                
@@ -334,13 +330,14 @@
     Builder.CreateCondBr(Builder.CreateIsNotNull(V, "tobool"),
                          InitBlock, EndBlock);
   
-    if (Exceptions) {
-      SavedLandingPad = getInvokeDest();
-      Abort = createBasicBlock("guard.abort");
-      setInvokeDest(Abort);
-    }
-    
     EmitBlock(InitBlock);
+
+    if (Exceptions) {
+      EHCleanupBlock Cleanup(*this);
+    
+      // Call __cxa_guard_abort.
+      Builder.CreateCall(getGuardAbortFn(*this), GuardVariable);
+    }
   }
 
   if (D.getType()->isReferenceType()) {
@@ -356,7 +353,7 @@
 
   if (ThreadsafeStatics) {
     // Call __cxa_guard_release.
-    Builder.CreateCall(getGuardReleaseFn(*this), GuardVariable);    
+    Builder.CreateCall(getGuardReleaseFn(*this), GuardVariable);
   } else {
     llvm::Value *One = 
       llvm::ConstantInt::get(llvm::Type::getInt8Ty(VMContext), 1);
@@ -367,20 +364,5 @@
   if (!D.getType()->isReferenceType())
     EmitDeclDestroy(*this, D, GV);
   
-  if (ThreadsafeStatics && Exceptions) {
-    // If an exception is thrown during initialization, call __cxa_guard_abort
-    // along the exceptional edge.
-    EmitBranch(EndBlock);
-    
-    EmitBlock(Abort);
-    
-    // Call __cxa_guard_abort along the exceptional edge.
-    Builder.CreateCall(getGuardAbortFn(*this), GuardVariable);
-    setInvokeDest(SavedLandingPad);
-    
-    // Rethrow the current exception.
-    EmitRethrow();
-  }    
-  
   EmitBlock(EndBlock);
 }
diff --git a/lib/CodeGen/CGException.cpp b/lib/CodeGen/CGException.cpp
index 76a57d6..c1d05bf 100644
--- a/lib/CodeGen/CGException.cpp
+++ b/lib/CodeGen/CGException.cpp
@@ -239,23 +239,19 @@
   }
 }
 
-void CodeGenFunction::EmitRethrow() {
-  if (getInvokeDest()) {
-    llvm::BasicBlock *Cont = createBasicBlock("invoke.cont");
-    Builder.CreateInvoke(getReThrowFn(*this), Cont, getInvokeDest())
-    ->setDoesNotReturn();
-    EmitBlock(Cont);
-  } else
-    Builder.CreateCall(getReThrowFn(*this))->setDoesNotReturn();
-  Builder.CreateUnreachable();
-  
-  // Clear the insertion point to indicate we are in unreachable code.
-  Builder.ClearInsertionPoint();
-}
-
 void CodeGenFunction::EmitCXXThrowExpr(const CXXThrowExpr *E) {
   if (!E->getSubExpr()) {
-    EmitRethrow();
+    if (getInvokeDest()) {
+      llvm::BasicBlock *Cont = createBasicBlock("invoke.cont");
+      Builder.CreateInvoke(getReThrowFn(*this), Cont, getInvokeDest())
+        ->setDoesNotReturn();
+      EmitBlock(Cont);
+    } else
+      Builder.CreateCall(getReThrowFn(*this))->setDoesNotReturn();
+    Builder.CreateUnreachable();
+
+    // Clear the insertion point to indicate we are in unreachable code.
+    Builder.ClearInsertionPoint();
     return;
   }
 
@@ -566,7 +562,6 @@
         // FIXME: we need to do this sooner so that the EH region for the
         // cleanup doesn't start until after the ctor completes, use a decl
         // init?
-        // FIXME: Alternatively, can we just elide this copy entirely?
         CopyObject(*this, CatchParam->getType().getNonReferenceType(),
                    WasPointer, WasPointerReference, ExcObject,
                    GetAddrOfLocalVar(CatchParam));
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index 9761fa0..151c13c 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -1258,8 +1258,7 @@
                                     bool IsInitializer = false);
 
   void EmitCXXThrowExpr(const CXXThrowExpr *E);
-  void EmitRethrow();
-  
+
   //===--------------------------------------------------------------------===//
   //                             Internal Helpers
   //===--------------------------------------------------------------------===//
diff --git a/test/CodeGenCXX/threadsafe-statics-exceptions.cpp b/test/CodeGenCXX/threadsafe-statics-exceptions.cpp
deleted file mode 100644
index fcb6cce..0000000
--- a/test/CodeGenCXX/threadsafe-statics-exceptions.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// RUN: %clang_cc1 -emit-llvm -o - -fexceptions -triple x86_64-apple-darwin10 %s | FileCheck %s
-
-struct X {
-  X();
-  ~X();
-};
-
-struct Y { };
-
-// CHECK: define void @_Z1fv
-void f() {
-  // CHECK: call i32 @__cxa_guard_acquire(i64* @_ZGVZ1fvE1x)
-  // CHECK: invoke void @_ZN1XC1Ev
-  // CHECK: call void @__cxa_guard_release(i64* @_ZGVZ1fvE1x)
-  // CHECK: call i32 @__cxa_atexit
-  // CHECK: br
-  static X x;
-  // CHECK: call void @__cxa_guard_abort(i64* @_ZGVZ1fvE1x)
-  // CHECK: call void @__cxa_rethrow() noreturn
-  // CHECK: unreachable
-
-  // CHECK: call i8* @__cxa_allocate_exception
-  throw Y();
-}
