------- Comment #5 from dominiq at lps dot ens dot fr  2007-11-27 23:00 -------
On Intel Darwin9 (working) -fdump-tree-gimple shows without -m64:

foo ()
{
  character(kind=1) __result_foo[1:1];

  __result_foo[1]{lb: 1 sz: 1} = 66;
  D.831 = __result_foo;
  return D.831;
}

bar (x)
{
  character(kind=1) D.834;
  character(kind=1) D.835[1:1];
  character(kind=1) __result_bar[1:1];

  D.834 = (*x)[1]{lb: 1 sz: 1};
  __result_bar[1]{lb: 1 sz: 1} = D.834;
  __result_bar[1]{lb: 1 sz: 1} = 65;
  D.835 = __result_bar;
  return D.835;
}

and with -m64:

foo ()
{
  character(kind=1) D.872[1:1];
  character(kind=1) __result_foo[1:1];

  __result_foo[1]{lb: 1 sz: 1} = 66;
  D.872 = __result_foo;
  return D.872;
}


bar (x)
{
  character(kind=1) D.875;
  character(kind=1) D.876[1:1];
  character(kind=1) __result_bar[1:1];

  D.875 = (*x)[1]{lb: 1 sz: 1};
  __result_bar[1]{lb: 1 sz: 1} = D.875;
  __result_bar[1]{lb: 1 sz: 1} = 65;
  D.876 = __result_bar;
  return D.876;
}

and on PPC Darwin9 (non working) without -m64:

foo ()
{
  character(kind=1) __result_foo[1:1];

  __result_foo[1]{lb: 1 sz: 1} = 66;
  <retval> = __result_foo;
  return <retval>;
}


bar (x)
{
  character(kind=1) D.951;
  character(kind=1) __result_bar[1:1];

  D.951 = (*x)[1]{lb: 1 sz: 1};
  __result_bar[1]{lb: 1 sz: 1} = D.951;
  __result_bar[1]{lb: 1 sz: 1} = 65;
  <retval> = __result_bar;
  return <retval>;
}

and with -m64:

foo ()
{
  character(kind=1) __result_foo[1:1];

  __result_foo[1]{lb: 1 sz: 1} = 66;
  <retval> = __result_foo;
  return <retval>;
}


bar (x)
{
  character(kind=1) D.966;
  character(kind=1) __result_bar[1:1];

  D.966 = (*x)[1]{lb: 1 sz: 1};
  __result_bar[1]{lb: 1 sz: 1} = D.966;
  __result_bar[1]{lb: 1 sz: 1} = 65;
  <retval> = __result_bar;
  return <retval>;
}

So it seems to follow the same pattern you see on x86-64-linux? 

working:
  +  D.864 = __result_foo;
  +  return D.864;

not working:
  -  <retval> = __result_foo;
  -  return <retval>;


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34246

Reply via email to