Some refactoring of my ms_struct patch.
// rdar://8823265 related.

llvm-svn: 130311
diff --git a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
index d202b6e..3d9fd88 100644
--- a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
+++ b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
@@ -753,10 +753,7 @@
       // Zero-length bitfields following non-bitfield members are
       // ignored:
       const FieldDecl *FD =  (*Field);
-      // FIXME. Refactor into common code as it is used in several places.
-      if (FD->isBitField() && LastFD && !LastFD->isBitField() &&
-          FD->getBitWidth()->
-            EvaluateAsInt(Types.getContext()).getZExtValue() == 0) {
+      if (Types.getContext().ZeroBitfieldFollowsNonBitfield(FD, LastFD)) {
         --FieldNo;
         continue;
       }
@@ -999,9 +996,7 @@
     if (IsMsStruct) {
       // Zero-length bitfields following non-bitfield members are
       // ignored:
-      if (FD->isBitField() && LastFD && !LastFD->isBitField() &&
-          FD->getBitWidth()->
-          EvaluateAsInt(getContext()).getZExtValue() == 0) {
+      if (getContext().ZeroBitfieldFollowsNonBitfield(FD, LastFD)) {
         --i;
         continue;
       }