Result from (cut and paste into) Claude: ## Diagnosis
The compile error is caused by **fixed-form Fortran line truncation at column 72**. Your file `parstop.F` uses the `.F` extension, which tells `gfortran` to use **fixed-form** parsing (72-column limit by default). In PETSc 3.25, the [`PetscObjectIsNull`](include/petsc/finclude/petscsysbase.h:132) macro expanded significantly. It is now defined as: ```fortran #define PetscObjectIsNull(obj) (obj%v == 0 .or. obj%v == PETSC_FORTRAN_TYPE_INITIALIZE .or. obj%v == -3) ``` When the preprocessor expands `PetscObjectIsNull(Mdiag)`, the resulting line is far longer than 72 characters and gets truncated mid-expression, producing the syntax error. The compiler warnings confirm this: ``` parstop.F:64:72: Warning: Line truncated at (1) [-Wline-truncation] ``` ## Solution: Rename `.F` to `.F90` **Rename `parstop.F` → `parstop.F90`** (and do the same for any other `.F` files that use `PetscObjectIsNull`). Your code is already written in free-form Fortran style (`!` comments, `::` declarations, `implicit none`), so the `.F` extension is misleading. The `.F90` extension will: 1. Invoke the C preprocessor (uppercase `F` is preserved) 2. Use **free-form** parsing (132-column default limit) 3. Work with your existing `-ffree-line-length-none` flag, which removes the line length limit entirely This is the cleanest fix and requires no code changes — only a file rename. ### Alternative: Keep `.F` and add a compiler flag If renaming is not feasible, add `-ffixed-line-length-none` to your `mpif90` flags to remove the 72-column truncation for fixed-form files. On Thu, May 7, 2026 at 6:26 PM Sanjay Govindjee via petsc-users < [email protected]> wrote: > I am trying to update our code to petsc 3.25.1. We were previously on > 3.22.4. I am running into a compile error that I can not understand. I > went through the release notes but can not see what is wrong. Any > suggestions will be appreciated. > > -sanjay > > /Users/sg/petsc/gnu/bin/mpif90 -o parstop.o -c -fPIC -Wall > -ffree-line-length-none -ffree-line-length-0 -Wno-lto-type-mismatch > -Wno-unused-dummy-argument -g -O -I/Users/sg/petsc/include > -I/Users/sg/petsc/gnu/include -I/opt/X11/include > -I/Users/sg/Feap/ver87/include -I/Users/sg/Feap/ver87/modules > -I/usr/local/include -J/Users/sg/Feap/ver87/modules parstop.F > parstop.F:64:72: > > 64 | if(.not.PetscObjectIsNull(Mdiag)) then > | > 1 > Warning: Line truncated at (1) [-Wline-truncation] > parstop.F:64:70: > > 64 | if(.not.PetscObjectIsNull(Mdiag)) then > | > 1 > Error: Syntax error in IF-clause after (1) > parstop.F:66:9: > > 66 | endif > | 1 > Error: Expecting END SUBROUTINE statement at (1) > parstop.F:68:72: > > 68 | if(.not.PetscObjectIsNull(Msqrt)) then > | > 1 > Warning: Line truncated at (1) [-Wline-truncation] > parstop.F:68:70: > > 68 | if(.not.PetscObjectIsNull(Msqrt)) then > | > 1 > Error: Syntax error in IF-clause after (1) > parstop.F:70:9: > > 70 | endif > | 1 > Error: Expecting END SUBROUTINE statement at (1) > > The subroutine is super simple: > > # include <petsc/finclude/petscksp.h> > use petscksp > use pfeapc > implicit none > > # include "pfeapb.h" > > PetscErrorCode ierr > > logical :: eflag > > save > > ! Close out PETSc matrices > if(.not.PetscObjectIsNull(Kmat)) then > call MatDestroy(Kmat, ierr) > endif > > if(.not.PetscObjectIsNull(Pmat)) then > call MatDestroy(Pmat, ierr) > endif > > if(.not.PetscObjectIsNull(Mmat)) then > call MatDestroy(Mmat, ierr) > endif > > if(pfeap_dstr) then > call KSPDestroy(kspsol, ierr) > endif > > ! Close out PETSc vectors > if(.not.PetscObjectIsNull(Mdiag)) then > call VecDestroy(Mdiag, ierr) > endif > > if(.not.PetscObjectIsNull(Msqrt)) then > call VecDestroy(Msqrt, ierr) > endif > > The custom module pfeapc contains the objects: > > module pfeapc > # include <petsc/finclude/petscksp.h> > use petscksp > implicit none > > Vec :: rhs, sol, xvec > Vec :: yvec, zvec > Vec :: Mdiag, Msqrt > Mat :: Kmat, Mmat, Pmat > KSP :: kspsol > end module pfeapc > > > > ------ >
