diff --git a/llvm-gcc-4.2/gcc/llvm-abi.h b/llvm-gcc-4.2/gcc/llvm-abi.h
index 6937a49..998b3e4 100644
--- a/llvm-gcc-4.2/gcc/llvm-abi.h
+++ b/llvm-gcc-4.2/gcc/llvm-abi.h
@@ -629,18 +629,19 @@
       Elts.push_back(ATy);
     }
 
-    // Put any left over bytes into one last register.  This target-independent
-    // code does not know the size of the argument registers, so use the
-    // smallest size that will work.
-    if (Size > 4) {
-      Elts.push_back(Type::getInt64Ty(getGlobalContext()));
-    } else if (Size > 2) {
+    if (Size >= 4) {
       Elts.push_back(Type::getInt32Ty(getGlobalContext()));
-    } else if (Size > 1) {
-      Elts.push_back(Type::getInt16Ty(getGlobalContext()));
-    } else {
-      Elts.push_back(Type::getInt8Ty(getGlobalContext()));
+      Size -= 4;
     }
+    if (Size >= 2) {
+      Elts.push_back(Type::getInt16Ty(getGlobalContext()));
+      Size -= 2;
+    }
+    if (Size >= 1) {
+      Elts.push_back(Type::getInt8Ty(getGlobalContext()));
+      Size -= 1;
+    }
+    assert(Size == 0 && "Didn't cover value?");
     const StructType *STy = StructType::get(getGlobalContext(), Elts, false);
 
     unsigned i = 0;
@@ -1072,18 +1073,19 @@
       Elts.push_back(ATy);
     }
 
-    // Put any left over bytes into one last register.  This target-independent
-    // code does not know the size of the argument registers, so use the
-    // smallest size that will work.
-    if (Size > 4) {
-      Elts.push_back(Type::getInt64Ty(getGlobalContext()));
-    } else if (Size > 2) {
+    if (Size >= 4) {
       Elts.push_back(Type::getInt32Ty(getGlobalContext()));
-    } else if (Size > 1) {
-      Elts.push_back(Type::getInt16Ty(getGlobalContext()));
-    } else {
-      Elts.push_back(Type::getInt8Ty(getGlobalContext()));
+      Size -= 4;
     }
+    if (Size >= 2) {
+      Elts.push_back(Type::getInt16Ty(getGlobalContext()));
+      Size -= 2;
+    }
+    if (Size >= 1) {
+      Elts.push_back(Type::getInt8Ty(getGlobalContext()));
+      Size -= 1;
+    }
+    assert(Size == 0 && "Didn't cover value?");
     const StructType *STy = StructType::get(getGlobalContext(), Elts, false);
 
     unsigned i = 0;
