looks good to me. pls go ahead
Sun

On Sat, Apr 30, 2011 at 12:46 AM, Hui Shi <kalin....@gmail.com> wrote:
> Would gatekeeper help review this patch?
>
> https://bugs.open64.net/show_bug.cgi?id=768
> Nystrom alias issue: sig fualt in ipa_link when connecting parameters
> See bugzilla for test case and compliation command line.
>
> function _ZNV2c52f7Ez c5::f7(...) volatile is defined in both
> alias_vararg1.c and alias_vararg2.cpp
> In alias_vararg1.c its doesn't have any parameter.
> In alias_vararg2.cpp, it is a vararg method.
> In ipa_link, symbol resolution pick up function defined in alias_vararg1.c.
> However in TY_merge, second function's TY flag TY_is_varargs is merged to
> first function's TY.
>
> ConstraintGraph::connect is adding edge from actual constraint graph node to
> formal constraint graph node.
> 1. match actual and fromals one by one.
> 2. if actual is more than formal and callee is a vararg function (from its
> TY)
>     extra actual will have copy edge to callee's last formal constraint
> graph node.
>     callee's last formal constraint graph node is assumed to be a special
> _varArgs constraint graph node when callee is vararg function.
>     Because in ConstraintGraph::buildCG(WN *entryWN), it will add _varArgs
> constraint graph node at the end of constraint graph build.
>
> In this case, the problem is after symbol resolution and type merge,
> function is vararg however it doesn't have varArgs formal constraint graph
> node which violate current assumpation in ConstraintGraph::connect.
>
> Fix is in ConstraintGraph::connect
>
> 1. If last_formal cg node is NULL, don't connect remaining actual nodes with
> last_formal cg node.
>
>     This is safe, last_formal cg node is NULL means callee has no formal and
> is actually not vararg, its vararg flag comes form type merge.
>
>    callee doesn't use any actual's cg node's points to info, because actual
> is not used in callee.
>
> 2. Another fix is, when callee's last formal constraint graph node is not
> vararg (cg node's ST info has no flag CG_ST_FLAGS_VARARGS).
>
>    This also means callee's TY flag TY_is_varargs comes from IPA type merge.
> callee itself is not vararg function.
>
>     Don't connect extra actual cg node to last formal cg node in this case.
>
> Index: osprey/ipa/main/analyze/ipa_nystrom_alias_analyzer.cxx
> ===================================================================
> --- osprey/ipa/main/analyze/ipa_nystrom_alias_analyzer.cxx      (revision
> 3575)
> +++ osprey/ipa/main/analyze/ipa_nystrom_alias_analyzer.cxx      (working
> copy)
> @@ -1797,13 +1797,14 @@
>    // If we have more actuals than formals either we either have a
>    // signature mismatch or varargs.  For now we don't worry about
>    // the other mismatch cases.
> -  if (actualIter != cs->parms().end() &&
> +  // It is possible lastFormal is NULL, and PU is vararg.
> +  // When PU is a merged result (merge vararg PU into a non vararg PU).
> +  // It's safe to not add any points to to callee, no actual param usage.
> +  if (lastFormal != NULL && actualIter != cs->parms().end() &&
>        formalIter == callee->parameters().end() &&
> -      TY_is_varargs(ST_pu_type(calleeST))) {
> +      TY_is_varargs(ST_pu_type(calleeST)) &&
> +      lastFormal->stInfo()->checkFlags(CG_ST_FLAGS_VARARGS)) {
>      // Hook up remaining actuals to the "varargs" node
> -    FmtAssert(callee->stInfo(lastFormal->cg_st_idx())
> -                  ->checkFlags(CG_ST_FLAGS_VARARGS),
> -                  ("Expect last formal to be varargs!\n"));
>      for ( ; actualIter != cs->parms().end(); ++actualIter) {
>        ConstraintGraphNode *actual = cgNode(*actualIter);
>        if (actual->checkFlags(CG_NODE_FLAGS_NOT_POINTER))
>
>
> Regards
> Shi Hui
>
>
>
>
>
>
> ------------------------------------------------------------------------------
> WhatsUp Gold - Download Free Network Management Software
> The most intuitive, comprehensive, and cost-effective network
> management toolset available today.  Delivers lowest initial
> acquisition cost and overall TCO of any competing solution.
> http://p.sf.net/sfu/whatsupgold-sd
> _______________________________________________
> Open64-devel mailing list
> Open64-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/open64-devel
>
>

------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to