this is a stack variable isn't it. The data layout for this is dones elsewhere.
Sun

2011/4/12 朱庆 <zqing1...@gmail.com>:
> Hi Sun,
>
> For above test case the error place sym_class of blk is CLASS_BLOCK
> but not CLASS_FUNC, so only assert on CLASS_FUNC will not work.
> The dump_st of blk is:
> Actual_Arg_StkSeg       <2,1> Block (#13570)
>                Address: 0(.SP<2,7>)
>                Flags:  0x00000000, XLOCAL
>                Sclass: UNKNOWN
> size 0, align 4, flags 0x0000, section 0, scninfo 0
>
> How do you think?
>
> Thanks
> zhuqing
>
> 2011/4/11 Sun Chan <sun.c...@gmail.com>:
>> looks fine to me.
>> BTW, if sym_class is FUNC, you should never see it in this routine.
>> May be you should assert that.
>> sun
>>
>> On Mon, Apr 11, 2011 at 6:25 PM, 朱庆 <zqing1...@gmail.com> wrote:
>>> Hi all,
>>>
>>> Can gatekeeper help review this fix?
>>>
>>> The problem is that for expr TY_kind(ST_type(blk)), the ty_idx for blk
>>> is invalid if the sym_class is CLASS_FUNC or CLASS_BLOCK,CLASS_NAME.
>>>
>>> svn diff for r3492:
>>> Modified: trunk/osprey/be/com/data_layout.cxx
>>> ===================================================================
>>> --- trunk/osprey/be/com/data_layout.cxx 2011-02-24 22:51:04 UTC (rev 3491)
>>> +++ trunk/osprey/be/com/data_layout.cxx 2011-02-25 09:58:56 UTC (rev 3492)
>>> @@ -652,7 +652,7 @@
>>>  INT64 size;
>>>  INITO_IDX ino_idx;
>>>  // if blk is variable length struct, its size should be inito size.
>>> -  if (TY_kind(ST_type(blk)) == KIND_STRUCT && (ino_idx =
>>> Find_INITO_For_Symbol(blk)) != 0)
>>> +  if (TY_kind(ST_type(blk)) == KIND_STRUCT && (ino_idx =
>>> Find_INITO_For_Symbol(blk)) != 0 && INITV_kind(INITO_val(ino_idx)) ==
>>> INITVKIND_BLOCK)
>>>  {
>>>    size = Get_INITO_Size(ino_idx);
>>>    Is_True(size >= ST_size(blk),("%s's inito size smaller than
>>> ST_size",ST_name(blk)));
>>>
>>> Here is the case, may need to enlarge file number to reproduce:
>>>
>>> n=1
>>> while [ $n -lt 2500 ]
>>> do
>>>       echo "Processing $n"
>>>       echo "void myfunc$n(){}" > file$n.c
>>>       opencc -Ofast -c -o file$n.o file$n.c
>>>       n=`expr $n + 1`
>>>
>>> done
>>>
>>> opencc -Ofast -shared -o a.so *.o
>>>
>>> The fix is:
>>> Index: be/com/data_layout.cxx
>>> ===================================================================
>>> --- be/com/data_layout.cxx      (revision 3537)
>>> +++ be/com/data_layout.cxx      (working copy)
>>> @@ -652,7 +652,10 @@
>>>   INT64 size;
>>>   INITO_IDX ino_idx;
>>>   // if blk is variable length struct, its size should be inito size.
>>> -  if (TY_kind(ST_type(blk)) == KIND_STRUCT && (ino_idx =
>>> Find_INITO_For_Symbol(blk)) != 0 && INITV_kind(INITO_val(ino_idx)) ==
>>> INITVKIND_BLOCK)
>>> +  if ( ST_class(blk) == CLASS_VAR &&
>>> +       TY_kind(ST_type(blk)) == KIND_STRUCT &&
>>> +       (ino_idx = Find_INITO_For_Symbol(blk)) != 0 &&
>>> +       INITV_kind(INITO_val(ino_idx)) == INITVKIND_BLOCK )
>>>   {
>>>     size = Get_INITO_Size(ino_idx);
>>>     Is_True(size >= ST_size(blk),("%s's inito size smaller than
>>> ST_size",ST_name(blk)));
>>>
>>> Thanks Michael Lai point out the issue and provide the case!
>>>
>>> Thanks
>>> zhuqing
>>>
>>> ------------------------------------------------------------------------------
>>> Xperia(TM) PLAY
>>> It's a major breakthrough. An authentic gaming
>>> smartphone on the nation's most reliable network.
>>> And it wants your games.
>>> http://p.sf.net/sfu/verizon-sfdev
>>> _______________________________________________
>>> Open64-devel mailing list
>>> Open64-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>>
>>
>

------------------------------------------------------------------------------
Forrester Wave Report - Recovery time is now measured in hours and minutes
not days. Key insights are discussed in the 2010 Forrester Wave Report as
part of an in-depth evaluation of disaster recovery service providers.
Forrester found the best-in-class provider in terms of services and vision.
Read this report now!  http://p.sf.net/sfu/ibm-webcastpromo
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to