https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77732

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2017-08-10
                 CC|                            |jamborm at gcc dot gnu.org,
                   |                            |marxin at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> ---
Ok, so GIMPLE IL is different in between x86_64-linux-gnu:

__attribute__((noinline))
bar (const struct S f, int x)
{
  int _5;

  <bb 2> [100.00%] [count: INV]:
  hs = &f;
  _5 = foo (f, x_3(D));
  return _5;

}

and hppa-unknown-linux-gnu:

__attribute__((noinline))
bar (const struct S f, int x)
{
  const struct S f.0;
  int _6;

  <bb 2> [100.00%] [count: INV]:
  f.0 = f;
  hs = &f.0;
  _6 = foo (f.0, x_4(D));
  return _6;

}

We decide about creation of f.0 variable in:

   │2472      /* See if this arg was passed by invisible reference.  */   
   │2473      if (pass_by_reference (&all->args_so_far_v, passed_mode,    
   │2474                             passed_type, data->named_arg))       
   │2475        {                                                         
   │2476          passed_type = nominal_type = build_pointer_type
(passed_type);
   │2477          data->passed_pointer = true;
  >│2478          passed_mode = nominal_mode = TYPE_MODE (nominal_type);
   |2479        }

So hppa uses invisible reference to pass the struct argument.
Thus I guess we should not run the test-case on hppa target? Martin can you
please take a look?

Reply via email to