]> granicus.if.org Git - clang/commitdiff
Add a FIXME and reduce nesting.
authorDaniel Dunbar <daniel@zuster.org>
Mon, 5 Apr 2010 16:20:33 +0000 (16:20 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Mon, 5 Apr 2010 16:20:33 +0000 (16:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100432 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGObjCMac.cpp

index 5373390ef7e8887ccad305867146afe46ddc9013..9ca0bc0c29617db487c897e29bebe36224ab432b 100644 (file)
@@ -107,24 +107,22 @@ LValue CGObjCRuntime::EmitValueForIvarAtOffset(CodeGen::CodeGenFunction &CGF,
   Qualifiers Quals = CGF.MakeQualifiers(IvarTy);
   Quals.addCVRQualifiers(CVRQualifiers);
 
-  if (Ivar->isBitField()) {
-    // We need to compute the bit offset for the bit-field, the offset
-    // is to the byte. Note, there is a subtle invariant here: we can
-    // only call this routine on non-sythesized ivars but we may be
-    // called for synthesized ivars. However, a synthesized ivar can
-    // never be a bit-field so this is safe.
-    uint64_t BitOffset = LookupFieldBitOffset(CGF.CGM, OID, 0, Ivar) % 8;
-
-    uint64_t BitFieldSize =
-      Ivar->getBitWidth()->EvaluateAsInt(CGF.getContext()).getZExtValue();
-    return LValue::MakeBitfield(V, BitOffset, BitFieldSize,
-                                IvarTy->isSignedIntegerType(),
-                                Quals.getCVRQualifiers());
-  }
-
-  
-  LValue LV = LValue::MakeAddr(V, Quals);
-  return LV;
+  if (!Ivar->isBitField())
+    return LValue::MakeAddr(V, Quals);
+
+  // We need to compute the bit offset for the bit-field, the offset is to the
+  // byte. Note, there is a subtle invariant here: we can only call this routine
+  // on non-synthesized ivars but we may be called for synthesized ivars.
+  // However, a synthesized ivar can never be a bit-field, so this is safe.
+  uint64_t BitOffset = LookupFieldBitOffset(CGF.CGM, OID, 0, Ivar) % 8;
+  uint64_t BitFieldSize =
+    Ivar->getBitWidth()->EvaluateAsInt(CGF.getContext()).getZExtValue();
+
+  // FIXME: We need to set a very conservative alignment on this, or make sure
+  // that the runtime is doing the right thing.
+  return LValue::MakeBitfield(V, BitOffset, BitFieldSize,
+                              IvarTy->isSignedIntegerType(),
+                              Quals.getCVRQualifiers());
 }
 
 ///