Index: osprey/wgen/wgen_spin_symbol.cxx
===================================================================
--- osprey/wgen/wgen_spin_symbol.cxx	(revision 3714)
+++ osprey/wgen/wgen_spin_symbol.cxx	(working copy)
@@ -1915,6 +1915,9 @@
 	if (gs_tree_this_volatile(decl_node))
 		Set_TY_is_volatile (ty_idx);
 	else Clear_TY_is_volatile (ty_idx);
+	if (gs_decl_user_align (decl_node))
+		Set_TY_is_user_align(ty_idx);
+	else Clear_TY_is_user_align(ty_idx);
 #ifdef KEY
         // Handle aligned attribute (bug 7331)
         if (gs_decl_user_align (decl_node))
Index: osprey/common/com/symtab_idx.h
===================================================================
--- osprey/common/com/symtab_idx.h	(revision 3714)
+++ osprey/common/com/symtab_idx.h	(working copy)
@@ -219,13 +219,15 @@
 //     UINT _restrict : 1;
 //     UINT _volatile : 1;
 //     UINT _const : 1;
-//     UINT _align : 5;
+//     UINT _user_align : 1;
+//     UINT _align : 4;
 // };
 
 const UINT32 TY_RESTRICT	= 0x00000080; // restrict type qualifier
 const UINT32 TY_VOLATILE	= 0x00000040; // volatile type qualifier
 const UINT32 TY_CONST		= 0x00000020; // const type qualifier
-const UINT32 TY_ALIGN		= 0x0000001f; // bit mask for alignment field
+const UINT32 TY_USER_ALIGN	= 0x00000010; // user defined align flag
+const UINT32 TY_ALIGN		= 0x0000000f; // bit mask for alignment field
 
 inline UINT32 TY_IDX_index (TY_IDX ty_idx)	{ return ty_idx >> 8; }
 inline void Set_TY_IDX_index (TY_IDX &ty_idx, UINT32 index)
@@ -248,6 +250,10 @@
 inline void Set_TY_is_restrict (TY_IDX &ty_idx)  { ty_idx |= TY_RESTRICT; }
 inline void Clear_TY_is_restrict (TY_IDX &ty_idx){ ty_idx &= ~TY_RESTRICT; }
 
+inline BOOL TY_is_user_align (TY_IDX ty_idx)       { return ty_idx & TY_USER_ALIGN;}
+inline void Set_TY_is_user_align (TY_IDX &ty_idx)  { ty_idx |= TY_USER_ALIGN; }
+inline void Clear_TY_is_user_align (TY_IDX &ty_idx){ ty_idx &= ~TY_USER_ALIGN; }
+
 // TY_align_exp returns the exponent part of the alignment.  That is, the
 // true alignment in bytes is 2 to the power of TY_align_exp ()
 inline UINT TY_align_exp (TY_IDX ty_idx)	{ return ty_idx & TY_ALIGN; }
Index: osprey/be/com/stblock.cxx
===================================================================
--- osprey/be/com/stblock.cxx	(revision 3714)
+++ osprey/be/com/stblock.cxx	(working copy)
@@ -129,6 +129,11 @@
       return align;
     }
 
+    if (TY_is_user_align(ty_idx))
+    {
+      return align;
+    }
+
     switch(ST_sclass(sym))
     {
     case SCLASS_AUTO:
