$ svn merge -c 87052 https://bwilson@llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk
--- Merging r87052 into '.':
U    gcc/llvm-abi.h

llvm-svn: 88669
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;