diff --git a/llvm-gcc-4.2/gcc/llvm-types.cpp b/llvm-gcc-4.2/gcc/llvm-types.cpp
index 143504d..783789b 100644
--- a/llvm-gcc-4.2/gcc/llvm-types.cpp
+++ b/llvm-gcc-4.2/gcc/llvm-types.cpp
@@ -1184,7 +1184,7 @@
 
   // If this is a Packed struct and ExtraBitsAvailable is not zero then
   // remove Extra bytes if ExtraBitsAvailable > 8.
-  void RemoveExtraBytes (unsigned GCCTypeSize) {
+  void RemoveExtraBytes () {
 
     unsigned NoOfBytesToRemove = ExtraBitsAvailable/8;
     
@@ -1194,10 +1194,6 @@
     if (NoOfBytesToRemove == 0)
       return;
 
-    unsigned OriginalSize = ElementSizeInBytes.back();
-    if (OriginalSize == GCCTypeSize)
-      return;
-
     const Type *LastType = Elements.back();
     unsigned PadBytes = 0;
 
@@ -1216,6 +1212,7 @@
 
     // Update last element type and size, element offset is unchanged.
     const Type *Pad =  ArrayType::get(Type::Int8Ty, PadBytes);
+    unsigned OriginalSize = ElementSizeInBytes.back();
     Elements.pop_back();
     Elements.push_back(Pad);
 
@@ -1694,13 +1691,17 @@
   for (tree Field = TYPE_FIELDS(type); Field; Field = TREE_CHAIN(Field))
     DecodeStructFields(Field, *Info);
 
-  uint64_t GCCTypeSize = ((uint64_t)TREE_INT_CST_LOW(TYPE_SIZE(type))+7)/8;
-  Info->RemoveExtraBytes(GCCTypeSize);
   // If the LLVM struct requires explicit tail padding to be the same size as
   // the GCC struct, insert tail padding now.  This handles, e.g., "{}" in C++.
   if (TYPE_SIZE(type) && TREE_CODE(TYPE_SIZE(type)) == INTEGER_CST) {
+    uint64_t GCCTypeSize = ((uint64_t)TREE_INT_CST_LOW(TYPE_SIZE(type))+7)/8;
     uint64_t LLVMStructSize = Info->getSizeAsLLVMStruct();
-    
+
+    if (LLVMStructSize > GCCTypeSize) {
+      Info->RemoveExtraBytes();
+      LLVMStructSize = Info->getSizeAsLLVMStruct();
+    }
+      
     if (LLVMStructSize != GCCTypeSize) {
       assert(LLVMStructSize < GCCTypeSize &&
              "LLVM type size doesn't match GCC type size!");
@@ -1726,7 +1727,9 @@
         }
       }
     }
-  }
+  } else
+    Info->RemoveExtraBytes();
+    
   
   // Now that the LLVM struct is finalized, figure out a safe place to index to
   // and set index values for each FieldDecl that doesn't start at a variable
