diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp
index 19262ec..076e20c 100644
--- a/lib/CodeGen/CGBlocks.cpp
+++ b/lib/CodeGen/CGBlocks.cpp
@@ -380,12 +380,9 @@
       }
     }
 
-    bool IsRValReference = variable->getType()->isRValueReferenceType();
-    QualType VT = 
-      IsRValReference ? variable->getType()->getPointeeType() 
-                      : variable->getType();
+    QualType VT = variable->getType();
     CharUnits size = C.getTypeSizeInChars(VT);
-    CharUnits align = C.getDeclAlign(variable, IsRValReference);
+    CharUnits align = C.getDeclAlign(variable);
     
     maxFieldAlign = std::max(maxFieldAlign, align);
 
@@ -599,32 +596,30 @@
       EmitSynthesizedCXXCopyCtor(blockField, src, copyExpr);
 
     // If it's a reference variable, copy the reference into the block field.
-    } else if (type->isReferenceType() && !type->isRValueReferenceType()) {
+    } else if (type->isReferenceType()) {
       Builder.CreateStore(Builder.CreateLoad(src, "ref.val"), blockField);
 
     // Otherwise, fake up a POD copy into the block field.
     } else {
-      QualType VT = 
-        (!type->isRValueReferenceType()) ? type : type->getPointeeType();
       // Fake up a new variable so that EmitScalarInit doesn't think
       // we're referring to the variable in its own initializer.
       ImplicitParamDecl blockFieldPseudoVar(/*DC*/ 0, SourceLocation(),
-                                            /*name*/ 0, VT);
+                                            /*name*/ 0, type);
 
       // We use one of these or the other depending on whether the
       // reference is nested.
-      DeclRefExpr notNested(const_cast<VarDecl*>(variable), VT, VK_LValue,
+      DeclRefExpr notNested(const_cast<VarDecl*>(variable), type, VK_LValue,
                             SourceLocation());
-      BlockDeclRefExpr nested(const_cast<VarDecl*>(variable), VT,
+      BlockDeclRefExpr nested(const_cast<VarDecl*>(variable), type,
                               VK_LValue, SourceLocation(), /*byref*/ false);
 
       Expr *declRef = 
         (ci->isNested() ? static_cast<Expr*>(&nested) : &notNested);
 
-      ImplicitCastExpr l2r(ImplicitCastExpr::OnStack, VT, CK_LValueToRValue,
+      ImplicitCastExpr l2r(ImplicitCastExpr::OnStack, type, CK_LValueToRValue,
                            declRef, VK_RValue);
       EmitExprAsInit(&l2r, &blockFieldPseudoVar,
-                     MakeAddrLValue(blockField, VT,
+                     MakeAddrLValue(blockField, type,
                                     getContext().getDeclAlign(variable)
                                                 .getQuantity()),
                      /*captured by init*/ false);
@@ -796,8 +791,7 @@
                                    variable->getNameAsString());
   }
 
-  if (variable->getType()->isReferenceType() &&
-      !variable->getType()->isRValueReferenceType())
+  if (variable->getType()->isReferenceType())
     addr = Builder.CreateLoad(addr, "ref.tmp");
 
   return addr;
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 9680185..9ad3ae8 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -1409,10 +1409,8 @@
 }
 
 LValue CodeGenFunction::EmitBlockDeclRefLValue(const BlockDeclRefExpr *E) {
-  bool RefAsPointee = 
-    E->getDecl()->getType()->isRValueReferenceType() ? true : false;
   unsigned Alignment =
-    getContext().getDeclAlign(E->getDecl(), RefAsPointee).getQuantity();
+    getContext().getDeclAlign(E->getDecl()).getQuantity();
   return MakeAddrLValue(GetAddrOfBlockDecl(E), E->getType(), Alignment);
 }
 
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index d4d0870..febd394 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -1305,9 +1305,6 @@
   // Actually try to capture it.
   QualType type = var->getType();
   
-  if (type->isRValueReferenceType())
-    type = type->getPointeeType();
-  
   // Prohibit variably-modified types.
   if (type->isVariablyModifiedType()) {
     S.Diag(loc, diag::err_ref_vm_type);
diff --git a/test/CodeGenCXX/block-rvalue-reference-capture.cpp b/test/CodeGenCXX/block-rvalue-reference-capture.cpp
deleted file mode 100644
index 997e14f..0000000
--- a/test/CodeGenCXX/block-rvalue-reference-capture.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-// RUN: %clang_cc1 %s -std=c++11 -fblocks -triple x86_64-apple-darwin -emit-llvm -o - | FileCheck %s
-// rdar://9971124
-
-int foo(int && i)
-{ 
-     return ^{ return i; }();
-}
-
-int main() {
-  return foo(100);
-}
-
-// CHECK: [[B:%.*]] = bitcast i8* [[BD:%.*]] to <{ {{.*}} i32 }>*
-// CHECK: [[C:%.*]] = getelementptr inbounds <{ {{.*}} i32 }>* [[B]]
-// CHECK: [[R:%.*]] = load i32* [[C]], align 4
-// CHECK: ret i32 [[R]]
-
-class S {
-public:
-  S (const S &);
-  S(int);
-  int field;
-};
-
-int func(S && rv)
-{ 
-     return ^{ return rv.field; }();
-}
-
-// CHECK: define i32 @_Z4funcO1S
-// CHECK: call void @_ZN1SC1ERKS_
