Index: osprey/wgen/wgen_decl.cxx
===================================================================
--- osprey/wgen/wgen_decl.cxx	(revision 3520)
+++ osprey/wgen/wgen_decl.cxx	(working copy)
@@ -4133,7 +4133,7 @@
 Is_Aggregate_Init_Zero_Array (gs_t init_list, gs_t type)
 {
 #ifdef FE_GNU_4_2_0
-  UINT esize = TY_size(TY_etype(Get_TY(type)));
+  UINT esize = gs_get_integer_value(gs_type_size(type)) / BITSPERBYTE;
   INT length = gs_constructor_length(init_list);
 
   gs_t curr_value_elem = length > 0 ? gs_operand (init_list, GS_CONSTRUCTOR_ELTS_VALUE) : NULL;
@@ -4177,27 +4177,7 @@
 Is_Aggregate_Init_Zero_Struct (gs_t init_list, gs_t type)
 {
 #ifdef FE_GNU_4_2_0
-  TY_IDX     ty    = Get_TY(type);
   gs_t       field = get_first_real_or_virtual_field(type);
-  FLD_HANDLE fld   = TY_fld (ty);
-
-  gs_t       init;
-
-  gs_t type_binfo, basetypes;
-
-  if ((type_binfo = gs_type_binfo(type)) != NULL &&
-      (basetypes = gs_binfo_base_binfos(type_binfo)) != NULL) {
-
-    gs_t list;
-    for (list = basetypes; gs_code(list) != EMPTY; list = gs_operand(list, 1)) {
-      gs_t binfo = gs_operand(list, 0);
-      gs_t basetype = gs_binfo_type(binfo);
-      if (!is_empty_base_class(basetype) || !gs_binfo_virtual_p(binfo)) {
-        fld = FLD_next (fld);
-      }
-    }
-  }
-
   while (field && gs_tree_code(field) != GS_FIELD_DECL)
     field = next_real_field(type, field);
 
@@ -4216,7 +4196,6 @@
         if (gs_decl_name(field) && gs_decl_name(field) == gs_decl_name(element_index)) {
           break;
         }
-        fld = FLD_next (fld);
         field = next_real_field(type, field);
         while (field && gs_tree_code(field) != GS_FIELD_DECL)
           field = next_real_field(type, field);
@@ -4224,10 +4203,10 @@
     }
 
     gs_t element_value = gs_constructor_elts_value(init_list, idx);
+    gs_t element_type = gs_tree_type(field);
+    INT  element_size = gs_get_integer_value(gs_type_size(element_type)) / BITSPERBYTE;
     if (gs_tree_code(element_value) == GS_CONSTRUCTOR) {
       // recursively process nested ARRAYs and STRUCTs
-      gs_t element_type;
-      element_type = gs_tree_type(field);
       if (!Is_Aggregate_Init_Zero (element_value, element_type))
         return FALSE;
     }
@@ -4235,7 +4214,7 @@
       return FALSE;
     }
     else if (gs_tree_code(element_value) == GS_REAL_CST) {
-      if (!Is_Real_Init_Zero (element_value, TY_size(FLD_type(fld))))
+      if (!Is_Real_Init_Zero (element_value, element_size))
         return FALSE;
     }
     else if (gs_tree_code(element_value) == GS_INTEGER_CST) {
@@ -4248,7 +4227,6 @@
     }
 
     // advance to next field
-    fld = FLD_next(fld);
     field = next_real_field(type, field);
     while (field && gs_tree_code(field) != GS_FIELD_DECL)
       field = next_real_field(type, field);
