Hi,

Can you help review this?
fix the problem caused by r3432 in ccvs testing.
replace  Get_ST() with  DECL_ST(), the first one will create a new st if it
is null.

new patch:
Index: wgen_expr.cxx
===================================================================
--- wgen_expr.cxx       (revision 3432)
+++ wgen_expr.cxx       (working copy)
@@ -2605,7 +2605,8 @@
   case GS_FUNCTION_DECL:
     {
       st = Get_ST (arg0);
-      ST *real_st = gs_decl_alias_target(arg0)?
Get_ST(gs_decl_alias_target(arg0)):st;
+      gs_t alias_target = gs_decl_alias_target(arg0);
+      ST *real_st = (alias_target && DECL_ST(alias_target))?
DECL_ST(alias_target):st;
       ty_idx = ST_type (st);
 #ifdef KEY
       // Arg0 is the virtual function table (vtable) for a class.
Initialize


在 2010年12月10日 上午1:24,Jian-Xin Lai <[email protected]>写道:

> It looks fine to me. Please go ahead and commit it. Thank you very much.
>
> 2010/12/8 朱庆 <[email protected]>
>
>> Hi all,
>>
>>
>> Can gatekeeper help review this fix?
>>
>> Bug link: https://bugs.open64.net/show_bug.cgi?id=649
>>
>> A small case:
>>
>> 1 namespace pcrecpp {
>> 2 class Arg { public: Arg(); Arg(void*); };
>> 3 class RE { static Arg no_arg; };
>> 4 Arg RE::no_arg((void*)__null);
>> 5 extern Arg no_arg __attribute__((alias("" "_ZN7pcrecpp2RE6no_argE")));
>> 6 }
>> The wn for line5 is:
>>    U8U8LDID 0 <1,52,_ZN7pcrecpp2RE6no_argE> T<54,Arg,1>
>> it uses the base st(_ZN7pcrecpp2RE6no_argE)  instead of
>> _ZN7pcrecpp6no_argE
>> I think the right one should be like this:
>>    U8LDA 0 <1,54,_ZN7pcrecpp6no_argE> T<55,anon_ptr.,8>
>>
>> The ori code did not consider the alias situation.
>>
>> Here is the patch:
>> Index: wgen_expr.cxx
>> ===================================================================
>> --- wgen_expr.cxx       (revision 3426)
>> +++ wgen_expr.cxx       (working copy)
>> @@ -2605,6 +2605,7 @@
>>    case GS_FUNCTION_DECL:
>>      {
>>        st = Get_ST (arg0);
>> +      ST *real_st = gs_decl_alias_target(arg0)?
>> Get_ST(gs_decl_alias_target(arg0)):st;
>>        ty_idx = ST_type (st);
>>  #ifdef KEY
>>        // Arg0 is the virtual function table (vtable) for a class.
>> Initialize
>> @@ -2632,7 +2633,7 @@
>>  #endif
>>        // for VLAs, use the base_st instead of st
>>        if (code0 == GS_VAR_DECL &&
>> -          st != ST_base(st)) {
>> +          real_st != ST_base(st)) {
>>          FmtAssert (ST_ofst (st) == 0,
>>                     ("Variable Length Arrays within struct not currently
>> implemented"));
>>          wn = WN_Ldid (Pointer_Mtype, 0, ST_base(st),
>> ST_type(ST_base(st)));
>>
>> Thanks,
>> zhuqing
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> This SF Dev2Dev email is sponsored by:
>>
>> WikiLeaks The End of the Free Internet
>> http://p.sf.net/sfu/therealnews-com
>> _______________________________________________
>> Open64-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>
>>
>
>
> --
> Regards,
> Lai Jian-Xin
>
------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
Open64-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to