diff --git a/bindings-DSL.cabal b/bindings-DSL.cabal
--- a/bindings-DSL.cabal
+++ b/bindings-DSL.cabal
@@ -17,7 +17,7 @@
   .
   This package contains no Haskell code, only C header files
   designed for hsc2hs.
-version: 1.0.15
+version: 1.0.16
 license: BSD3
 license-file: LICENSE
 maintainer: Maurício C. Antunes <mauricio.antunes@gmail.com>
diff --git a/bindings.dsl.h b/bindings.dsl.h
--- a/bindings.dsl.h
+++ b/bindings.dsl.h
@@ -182,16 +182,17 @@
 
 #define hsc_starttype(name) \
     { \
-     name *refpointer = 0; \
+     struct {char _; name v;} bc_refdata; \
+     size_t typesize = sizeof bc_refdata.v; \
+     ptrdiff_t typealign = (char*)&bc_refdata.v - (char*)&bc_refdata; \
      bc_fielddata.n = 0; \
      char typename[] = # name; \
-     size_t typesize = sizeof(name); \
      int index; \
 
 #define bc_basicfield(name,type,a,u,f) \
      index = bc_fielddata.n++; \
      bc_fielddata.offset[index] = (uintmax_t) \
-         ((char*)&refpointer->name - (char*)refpointer); \
+         ((char*)&bc_refdata.v.name - (char*)&bc_refdata.v); \
      bc_fielddata.is_array[index] = a; \
      bc_fielddata.is_union[index] = u; \
      bc_fielddata.is_fam[index] = f; \
@@ -209,13 +210,13 @@
 
 #define hsc_array_field(name,type) \
      bc_basicfield(name,# type,1,0,0); \
-     bc_fielddata.howmany[index] = sizeof(refpointer->name) \
-       / sizeof(refpointer->name[0]); \
+     bc_fielddata.howmany[index] = sizeof bc_refdata.v.name \
+       / sizeof bc_refdata.v.name[0]; \
 
 #define hsc_union_array_field(name,type) \
      bc_basicfield(name,# type,1,1,0); \
-     bc_fielddata.howmany[index] = sizeof(refpointer->name) \
-       / sizeof(refpointer->name[0]); \
+     bc_fielddata.howmany[index] = sizeof bc_refdata.v.name \
+       / sizeof bc_refdata.v.name[0]; \
 
 #define hsc_stoptype(dummy) \
      printf("data ");bc_conid(typename);printf(" = "); \
@@ -276,8 +277,8 @@
         } \
      printf("instance Storable "); \
      bc_conid(typename);printf(" where\n"); \
-     printf("  sizeOf _ = %"PRIuMAX"\n  alignment = sizeOf\n", \
-       (uintmax_t)(typesize)); \
+     printf("  sizeOf _ = %"PRIuMAX"\n  alignment _ = %"PRIuMAX"\n", \
+       (uintmax_t)(typesize),(uintmax_t)(typealign)); \
      printf("  peek p = do\n"); \
      for (i=0; i < bc_fielddata.n; i++) \
         { \
