Hi all, Can gatekeeper help review following fix for bug833? https://bugs.open64.net/show_bug.cgi?id=833 case: struct in6_addr { unsigned char u6_addr8[16]; };
static const struct ip6addrlbl_init_table { const struct in6_addr *prefix; int prefixlen; } array_table = { .prefix = &(struct in6_addr){ 0xfc }, .prefixlen = 7, }; int main() { printf("%x\n",*array_table.prefix); } The result should be 0xfc, but not Segmentation fault. The problem is the initial for array_table is incorrect. The creation of inito and initv is sequently, if there is an initial in another initial, and need to set up a new st , the initv index is increased in the new st initialize, when return from the new init_wn, we should adjust the block index of the uplevel inito. ======================================================================= INITOs: [1]: array_table (0x3501): BLOCK: BLOCK: ==> BLOCK: ==> VAL: 252 ===> SYMOFF: .init(0x3601)+0(0x0) PAD: 15 ==> VAL: 7 ENDBLOCK=> PAD: 4 ENDBLOCK==> ENDBLOCK [2]: .init (0x3601): BLOCK: BLOCK: VAL: 252 PAD: 15 ENDBLOCK ENDBLOCK patch: Index: osprey/wgen/wgen_decl.cxx =================================================================== --- osprey/wgen/wgen_decl.cxx (revision 3714) +++ osprey/wgen/wgen_decl.cxx (working copy) @@ -2622,7 +2622,19 @@ WGEN_Get_LABEL (label_decl, FALSE); WGEN_Add_Aggregate_Init_Label (label_idx); } - else Add_Init_For_WHIRL(init_wn, size, 0); + else { + Add_Init_For_WHIRL(init_wn, size, 0); + if (WN_has_sym(init_wn)) { + ST* st = WN_st(init_wn); + INITO_IDX idx = Find_INITO_For_Symbol(st); + if (idx != 0 && + ST_initv_in_other_st(st) && + idx > _inito ) { + INITO ino = Inito_Table[idx]; + Set_INITV_blk(ino.val-1, _last_initv); + } + } + } WN_DELETE_Tree (init_wn); break; } Thanks zhuqing ------------------------------------------------------------------------------ EMC VNX: the world's simplest storage, starting under $10K The only unified storage solution that offers unified management Up to 160% more powerful than alternatives and 25% more efficient. Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel