diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 9328a53..3c28360 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -151,7 +151,7 @@
 /// this method emits the address of the lvalue, then loads the result as an
 /// rvalue, returning the rvalue.
 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) {
-  if (LV.ObjcWeak()) {
+  if (LV.isObjCWeak()) {
     // load of a __weak object. 
     llvm::Value *AddrWeakObj = LV.getAddress();
     llvm::Value *read_weak = CGM.getObjCRuntime().EmitObjCWeakRead(*this, 
@@ -335,22 +335,6 @@
 /// is 'Ty'.
 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst, 
                                              QualType Ty) {
-  if (Dst.ObjcWeak()) {
-    // load of a __weak object. 
-    llvm::Value *LvalueDst = Dst.getAddress();
-    llvm::Value *src = Src.getScalarVal();
-    CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst);
-    return;
-  }
-  
-  if (Dst.ObjcStrong()) {
-    // load of a __strong object. 
-    llvm::Value *LvalueDst = Dst.getAddress();
-    llvm::Value *src = Src.getScalarVal();
-    CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst);
-    return;
-  }
-  
   if (!Dst.isSimple()) {
     if (Dst.isVectorElt()) {
       // Read/modify/write the vector, inserting the new element.
@@ -376,6 +360,22 @@
     assert(0 && "Unknown LValue type");
   }
   
+  if (Dst.isObjCWeak()) {
+    // load of a __weak object. 
+    llvm::Value *LvalueDst = Dst.getAddress();
+    llvm::Value *src = Src.getScalarVal();
+    CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst);
+    return;
+  }
+  
+  if (Dst.isObjCStrong()) {
+    // load of a __strong object. 
+    llvm::Value *LvalueDst = Dst.getAddress();
+    llvm::Value *src = Src.getScalarVal();
+    CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst);
+    return;
+  }
+  
   llvm::Value *DstAddr = Dst.getAddress();
   assert(Src.isScalar() && "Can't emit an agg store with this method");
   // FIXME: Handle volatility etc.
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index ccfd465..5a45ad9 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -1788,6 +1788,7 @@
 llvm::Value * CGObjCMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
                                           llvm::Value *AddrWeakObj)
 {
+  AddrWeakObj = CGF.Builder.CreateBitCast(AddrWeakObj, ObjCTypes.PtrObjectPtrTy); 
   llvm::Value *read_weak = CGF.Builder.CreateCall(ObjCTypes.GcReadWeakFn,
                                                   AddrWeakObj, "weakread");
   return read_weak;
@@ -1799,6 +1800,8 @@
 void CGObjCMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
                                    llvm::Value *src, llvm::Value *dst)
 {
+  src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
+  dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
   CGF.Builder.CreateCall2(ObjCTypes.GcAssignWeakFn,
                           src, dst, "weakassign");
   return;
@@ -1810,6 +1813,8 @@
 void CGObjCMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
                                      llvm::Value *src, llvm::Value *dst)
 {
+  src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
+  dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
   CGF.Builder.CreateCall2(ObjCTypes.GcAssignGlobalFn,
                           src, dst, "globalassign");
   return;
@@ -1821,6 +1826,8 @@
 void CGObjCMac::EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
                                          llvm::Value *src, llvm::Value *dst)
 {
+  src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
+  dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
   CGF.Builder.CreateCall2(ObjCTypes.GcAssignStrongCastFn,
                           src, dst, "weakassign");
   return;
diff --git a/lib/CodeGen/CGValue.h b/lib/CodeGen/CGValue.h
index c328e35..1c60ebf 100644
--- a/lib/CodeGen/CGValue.h
+++ b/lib/CodeGen/CGValue.h
@@ -159,8 +159,8 @@
   bool isVolatileQualified() const { return Volatile; }
   bool isRestrictQualified() const { return Restrict; }
   
-  bool ObjcWeak() const { return ObjCType == Weak; }
-  bool ObjcStrong() const { return ObjCType == Strong; }
+  bool isObjCWeak() const { return ObjCType == Weak; }
+  bool isObjCStrong() const { return ObjCType == Strong; }
   
   static void SetObjCType(unsigned WeakVal, unsigned StrongVal, LValue& R) {
     if (WeakVal)
