On Tue, Jan 29, 2019 at 10:12:49PM +0100, Thomas König wrote:
> Hi Steve,
> 
> >>    PR fortran/57048
> >>    * interface.c (gfc_compare_types): If a derived type and an
> >>    integer both have a derived type, and they are identical,
> >>    this is a C binding type and compares equal.
> > 
> > I don't understand this sentence.  How can an INTEGER have a
> > derived type?
> 
> ISO C handling is a bit of a mess. Of course.
> The original tree has
> 
>    symtree: 'C_funptr'    || symbol: 'c_funptr'
>      type spec : (DERIVED c_funptr C_INTEROP ISO_C)
>      attributes: (DERIVED  BIND(C) USE-ASSOC(__iso_c_binding))
>      components:
>      (c_address (INTEGER 8 C_INTEROP) () PRIVATE)
> 
> and we somehow later lose the derived type stuff and use a naked
> integer.  The problem appears to be that the module is written out
> when that conversion has not yet happened.
> 
> So, the C_funptr (capitalized because it is a derived type) is
> written to the module file, and later compared to c_funptr upon
> module reading. Hilarity ensues, and we cannot use a C function
> pointer from a module, the topic of the PR.

Ugh.  Thanks for the explanation.

> >> 2019-01-28  Thomas Koenig  <tkoe...@gcc.gnu.org>
> >>
> >>    PR fortran/57048
> >>    * gfortran.dg/c_funptr_1.f90: New file.
> >>    * gfortran.dg/c_funptr_1_mod.f90: New file.
> > 
> 
> Yep, this is a rather messy fix to a messy situation. I think the
> C interop stuff could do with a thorough redesign, but that's
> not going to happen for gcc 9.
> 
> So, I think this is about the best we can do - at least it gets the
> bug fixed.  If you want me to put in a FIXME, I'll gladly do this.
> 

Perhaps, add the PR number to the comment in code so
history of why this is a special case can be found.

I'll leave up to you on adding a "FIXME: If ISO C Binding support is
ever rewritten, this should be revisted" or some such phrasing.

Thanks for the patch, and OK to commit. 

-- 
Steve
20170425 https://www.youtube.com/watch?v=VWUpyCsUKR4
20161221 https://www.youtube.com/watch?v=IbCHE-hONow

Reply via email to