Hi all,
Can gatekeeper help review this fix?
https://bugs.open64.net/show_bug.cgi?id=612
samll case:
struct A { };
typedef void (A::*pmf_void) ();
typedef void (A::*pmf_bool) (bool);
struct B
{
pmf_void member () const { }
};
B *b;
void
die (bool param)
{
pmf_bool pmf = (pmf_bool) (b->member ());
}
The bug happens when compile with above code with –m32, and ok with
m64. Through comparing the difference between m32 and m64, found that
the gspin node for "(pmf_bool) (b->member ())" function returns "ptr
to mem func" for m32, so it should call
"WGEN_Call_Returns_Ptr_To_Member_Func" to expand. There is already
code in wgen_expr.cxx, however for above case the gspin node for
"pmf_bool pmf = (pmf_bool) (b->member ());“ is:
GS_INIT_EXPR
GS_VAR_DECL
GS_NOP_EXPR
GS_CALL_EXPR
The gs_tree_operand(exp, 1) is GS_NOP_EXPR not CALL_EXPR, so the fix
is to remove the nop node.
7696 // If gs_tree_operand(exp, 1) is a CALL_EXPR that returns a
7697 // ptr-to-member-function, then call
7698 // WGEN_Expand_Ptr_To_Member_Func_Call_Expr to expand
it. Otherwise,
7699 // call WGEN_Expand_Expr to do regular expansion. Bug 4737.
7700 gs_t exp_opnd1 = gs_tree_operand(exp, 1);
7701 if (WGEN_Call_Returns_Ptr_To_Member_Func(exp_opnd1)) {
7702 TYPE_ID desc = TY_mtype(Get_TY(gs_tree_type(exp_opnd1)));
7703 wn1 = WGEN_Expand_Ptr_To_Member_Func_Call_Expr(exp_opnd1, 0,
7704
Widen_Mtype(desc), desc);
7705 }
The patch is:
Index: wgen_expr.cxx
===================================================================
--- wgen_expr.cxx (revision 3491)
+++ wgen_expr.cxx (working copy)
@@ -7698,6 +7698,9 @@
// WGEN_Expand_Ptr_To_Member_Func_Call_Expr to expand it. Otherwise,
// call WGEN_Expand_Expr to do regular expansion. Bug 4737.
gs_t exp_opnd1 = gs_tree_operand(exp, 1);
+ // Skip the NOP_EXPRs
+ while (gs_tree_code(exp_opnd1) == GS_NOP_EXPR)
+ exp_opnd1 = gs_tree_operand (exp_opnd1, 0);
if (WGEN_Call_Returns_Ptr_To_Member_Func(exp_opnd1)) {
TYPE_ID desc = TY_mtype(Get_TY(gs_tree_type(exp_opnd1)));
wn1 = WGEN_Expand_Ptr_To_Member_Func_Call_Expr(exp_opnd1, 0,
Thanks
zhuqing
------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in
Real-Time with Splunk. Collect, index and harness all the fast moving IT data
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business
insights. http://p.sf.net/sfu/splunk-dev2dev
_______________________________________________
Open64-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/open64-devel