As usual, anything that is duplicated and not checked by the compiler is broken.
$ grep PetscObjectAllocateFortranPointers src/**/*.c src/dm/impls/da/ftn-custom/zda2f.c: PetscObjectAllocateFortranPointers(*da,6); src/dm/impls/da/ftn-custom/zda2f.c: PetscObjectAllocateFortranPointers(*da,6); src/dm/impls/shell/ftn-custom/zdmshellf.c: PetscObjectAllocateFortranPointers(*dm,2); src/dm/impls/shell/ftn-custom/zdmshellf.c: PetscObjectAllocateFortranPointers(*dm,2); Note that changing the type does not reset the function pointers, thus having a DMSHELL, calling DMSetType(dm,DMDA), and then setting a DMDA local function will cause memory corruption. I cannot express how much I hate this system. The full-blown solution is that for each type, we register a (global) token which is the index of that function pointer. That doesn't have any false dependencies, but is more "initialize" code. An alternative, used in the TS and KSP code below, is to have a common enum that lists all the Fortran functions. It's a false header dependency, but not a binary dependency. What should we do? The current state is a disaster. src/ksp/ksp/impls/gmres/fgmres/ftn-custom/zmodpcff.c: PetscObjectAllocateFortranPointers(*ksp,3); src/ksp/ksp/interface/ftn-custom/zitfuncf.c: PetscObjectAllocateFortranPointers(*ksp,FTN_MAX); src/ksp/ksp/interface/ftn-custom/zitfuncf.c: PetscObjectAllocateFortranPointers(*ksp,FTN_MAX); src/ksp/pc/impls/mg/ftn-custom/zmgfuncf.c: PetscObjectAllocateFortranPointers(*mat,1); src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c: PetscObjectAllocateFortranPointers(*pc,5); src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c: PetscObjectAllocateFortranPointers(*pc,5); src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c: PetscObjectAllocateFortranPointers(*pc,5); src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c: PetscObjectAllocateFortranPointers(*pc,5); src/ksp/pc/impls/shell/ftn-custom/zshellpcf.c: PetscObjectAllocateFortranPointers(*pc,5); src/mat/impls/mffd/ftn-custom/zmffdf.c: PetscObjectAllocateFortranPointers(*mat,2); src/mat/impls/shell/ftn-custom/zshellf.c: PetscObjectAllocateFortranPointers(*mat,11); src/mat/interface/ftn-custom/zmatrixf.c: PetscObjectAllocateFortranPointers(*sp,1); src/snes/interface/ftn-custom/zsnesf.c: PetscObjectAllocateFortranPointers(*snes,14); src/snes/interface/ftn-custom/zsnesf.c: PetscObjectAllocateFortranPointers(*snes,14); src/snes/interface/ftn-custom/zsnesf.c: PetscObjectAllocateFortranPointers(*snes,14); src/snes/interface/ftn-custom/zsnesf.c: PetscObjectAllocateFortranPointers(*snes,14); src/snes/interface/ftn-custom/zsnesf.c: PetscObjectAllocateFortranPointers(*snes,14); src/snes/linesearch/impls/shell/ftn-custom/zlinesearchshellf.c: PetscObjectAllocateFortranPointers(*linesearch,3); src/snes/linesearch/interface/ftn-custom/zlinesearchf.c: PetscObjectAllocateFortranPointers(*linesearch,3); src/snes/linesearch/interface/ftn-custom/zlinesearchf.c: PetscObjectAllocateFortranPointers(*linesearch,3); src/sys/draw/utils/ftn-custom/zzoomf.c: PetscObjectAllocateFortranPointers(*draw,1); src/ts/interface/ftn-custom/ztsf.c: PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); src/ts/interface/ftn-custom/ztsf.c: PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); src/ts/interface/ftn-custom/ztsf.c: PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); src/ts/interface/ftn-custom/ztsf.c: PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); src/ts/interface/ftn-custom/ztsf.c: PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); src/ts/interface/ftn-custom/ztsf.c: PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); src/ts/interface/ftn-custom/ztsf.c: PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20121204/c9e943ce/attachment.html>
