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 (ST_has_user_align(sym))
+    {
+      return align;
+    }
+
     switch(ST_sclass(sym))
     {
     case SCLASS_AUTO:
Index: osprey/common/com/symtab_access.h
===================================================================
--- osprey/common/com/symtab_access.h	(revision 3714)
+++ osprey/common/com/symtab_access.h	(working copy)
@@ -719,6 +719,13 @@
 inline void
 Reset_ST_is_vtable (ST* s)  { s->flags_ext &= ~ST_IS_VTABLE; }
 
+inline BOOL
+ST_has_user_align (const ST* s)          { return s->flags_ext & ST_HAS_USER_ALIGN;}
+inline void
+Set_ST_has_user_align (ST* s)            { s->flags_ext |= ST_HAS_USER_ALIGN; }
+inline void
+Clear_ST_has_user_align (ST* s)          { s->flags_ext &= ~ST_HAS_USER_ALIGN; }
+
 #endif /* KEY */
 
 //----------------------------------------------------------------------
Index: osprey/common/com/symtab_defs.h
===================================================================
--- osprey/common/com/symtab_defs.h	(revision 3714)
+++ osprey/common/com/symtab_defs.h	(working copy)
@@ -216,6 +216,7 @@
 #endif     
     ST_IS_GLOBAL_AS_LOCAL = 0x20000, // Is a global variable that can be treated as a local variable.
     ST_IS_VTABLE = 0x40000,        //st is a vtalbe
+    ST_HAS_USER_ALIGN = 0x80000,
 }; // ST_FLAGS_EXT
 #endif
 
Index: osprey/wgen/wgen_spin_symbol.cxx
===================================================================
--- osprey/wgen/wgen_spin_symbol.cxx	(revision 3714)
+++ osprey/wgen/wgen_spin_symbol.cxx	(working copy)
@@ -1931,6 +1931,9 @@
 	if (*p == '*')
 	  p++;
         ST_Init (st, Save_Str(p), CLASS_VAR, sclass, eclass, ty_idx);
+
+      if (gs_decl_user_align (decl_node))
+        Set_ST_has_user_align(st);
 		
       if (gs_decl_virtual_p(decl_node) && strncmp(name, "_ZTV", 4) == 0)
       {
