Attempt to fix 32-bit
diff --git a/libc-test/build.rs b/libc-test/build.rs
index f7c0129..62d8b07 100644
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -258,7 +258,7 @@
                 unsafe {{
                     same(mem::size_of::<{ty}>() as u64,
                          __test_size_{ty}(), "size");
-                    same(mem::align_of::<{ty}>() as u64,
+                    same(align::<{ty}>() as u64,
                          __test_align_{ty}(), "align");
                 }}
             }}
diff --git a/libc-test/tests/all.rs b/libc-test/tests/all.rs
index b717c8a..fe3bd24 100644
--- a/libc-test/tests/all.rs
+++ b/libc-test/tests/all.rs
@@ -1,6 +1,7 @@
 extern crate libc;
 extern crate libc_test;
 
+use std::any::{Any, TypeId};
 use std::mem;
 
 use libc::*;
@@ -12,6 +13,21 @@
     }
 }
 
+fn align<T: Any>() -> u64 {
+    // TODO: apparently these three types have less alignment in Rust on x86
+    //       than they do in C this difference should.. probably be reconciled.
+    //
+    //       Perhaps #27195?
+    if cfg!(target_pointer_width = "32") {
+        if TypeId::of::<T>() == TypeId::of::<f64>() ||
+           TypeId::of::<T>() == TypeId::of::<i64>() ||
+           TypeId::of::<T>() == TypeId::of::<u64>() {
+            return 8
+        }
+    }
+    mem::align_of::<T>() as u64
+}
+
 macro_rules! offset_of {
     ($ty:ident, $field:ident) => (
         (&((*(0 as *const $ty)).$field)) as *const _ as u64