On Fri, 3 Jan 2014, Richard Biener wrote:

> On Fri, 3 Jan 2014, Jakub Jelinek wrote:
> 
> > On Fri, Jan 03, 2014 at 11:15:32AM +0100, Richard Biener wrote:
> > > so if there is a decl then use its type signature, otherwise
> > > (indirect calls) use the caller signature (and hope it matches
> > > the callee...).  That it later falls back to looking at
> > > DECL_ARGUMENTS is odd (probably a FE issue where we have a
> > > fndecl with a bogus type?)
> > 
> > For K&R C non-prototyped functions
> > foo (x, y)
> >   int x, y;
> > {
> >   return x + y;
> > }
> > I think TYPE_ARG_TYPES is NULL (?) and DECL_ARGUMENTS is the only way to get
> > at the types.
> 
> Ah, indeed.  A C speciality that shouldn't survive GENERICization if
> that's really the case.
> 
> I wonder how
> 
> int main()
> {
>   return (*(&foo))(0, 0);
> }
> 
> works though.  Or
> 
>  __auto_type x = foo;
> 
> (substitute for that new C __auto thing).
> 
> The former probably because we fold away the indirection very early.

foo (x, y)
       int x, y;
{
    return x + y;
}

int main()
{
  __auto_type f = foo;
  return f(0,0);
}

works just fine for me but shows

  int (*<T391>) () f;                                                           
  int _4;                                                                       
                                                                                
  <bb 2>:                                                                       
  f_1 = foo;                                                                    
  _4 = f_1 (0, 0);

so I suppose the fntype is not NULL but int (*)().

Richard.

Reply via email to