<div dir="ltr">On Fri, Jan 25, 2013 at 10:26 AM, Karl Rupp <span dir="ltr"><<a href="mailto:rupp@mcs.anl.gov" target="_blank">rupp@mcs.anl.gov</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
the Nightly test results improved slightly:<br>
<br>
  <a href="http://krupp.iue.tuwien.ac.at/petsc-test/" target="_blank">http://krupp.iue.tuwien.ac.at/<u></u>petsc-test/</a><br>
<br>
However, the custom Fortran stuff in C89 logs here:<br>
<br>
<a href="http://ftp.mcs.anl.gov/pub/petsc/nightlylogs/build_arch-linux-c89_thrash.log" target="_blank">http://ftp.mcs.anl.gov/pub/<u></u>petsc/nightlylogs/build_arch-<u></u>linux-c89_thrash.log</a> <br>
<br>
seem to be quite hard to fix:<br>
   warning: ISO C forbids conversion of function pointer<br>
            to object pointer type [-pedantic]<br></blockquote><div><br></div><div style>Yup, this problem is well-known. I've been removing them as it makes sense, but since we've never used an architecture where void(*)(void) has a different size than void*, it hasn't been urgent to eradicate every last instance. That said, we're nearly there with the PetscObjectSetFortranCallback interface I put in two weeks ago (there are just a few places still using the old way, then we can remove this code).</div>
<div style><br></div><div style>I think there are a couple other places, maybe in the MPI stuff, where function pointers and data pointers are conflated, though I think they are also easy enough to replace.</div><div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
These warnings are caused by assignments of the form<br>
  void * ptr = f;<br>
where f is a function pointer argument:<br>
  void (PETSC_STDCALL *f)(TS*,double*,Vec*,Vec*,<u></u>void*,PetscErrorCode*)<br>
A similar warning is obtained when assigning an instance of void* to such a function pointer.<br>
<br>
As an example, let's take the following function in<br>
mat/matfd/ftn-custom/<u></u>zfdmatrixf.c:<br>
<br>
void PETSC_STDCALL matfdcoloringsetfunctionts_(<br>
   MatFDColoring *fd,<br>
   void (PETSC_STDCALL *f)(TS*,double*,Vec*,Vec*,<u></u>void*,PetscErrorCode*))<br>
{<br>
  (*fd)->ftn_func_pointer = (void*) f;<br>
  ...<br>
}<br>
<br>
A look at MatFDColoring shows<br>
  struct  _p_MatFDColoring{<br>
    ...<br>
    void    *ftn_func_pointer,*ftn_func_<u></u>cntx;<br>
  };<br>
so the only fix I can think of is to replace void* with e.g.<br>
  void (*ftn_func_pointer)(void);<br>
in order to remain in the 'function pointer world'. This is, nevertheless, still fairly ugly. Does anyone have a better solution for this?<br>
<br>
Best regards,<br>
Karli<br>
<br>
<br>
</blockquote></div><br></div></div>