Yes, the type mismatched here, the correct should be like:
printf("%x\n",(*array_table.prefix).u6_addr8[0]);

Thanks
zhuqing

在 2011年8月26日 上午12:20,Stephen Clarke <stephen.cla...@st.com> 写道:
> I worry about this line of the test:
>
>  printf("%x\n",*array_table.prefix);
>
> There seems to be a type mismatch because
> *array_table.prefix is of type struct in6_addr,
> but it's being treated as unsigned int in the
> printf format string.
>
> The test fails on my target because int and struct
> are not passed in the same registers.
>
> Would it be better to write it as:
>
>  printf("%x\n",*(int *)array_table.prefix);
>
> Steve.
>
> 朱庆 wrote:
>> 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
>
>

------------------------------------------------------------------------------
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

Reply via email to