camfort / fortran-src

Fortran parsing and static analysis infrastructure
https://hackage.haskell.org/package/fortran-src
Other
48 stars 20 forks source link

Interface specs interfering with intrinsic tag identification #249

Open ccotter opened 1 year ago

ccotter commented 1 year ago
      subroutine intrinsics_misidentified
          interface
            subroutine calc(len, max)
              implicit none
              integer*4 len
              integer*4 max
            end
          end interface

          character*10 c10
          integer*4 i,j
          i = len(c10) ! (ValVariable "len")
          i = max(i,j) ! (ValVariable "max")
      end

      subroutine intrinsics_correctly_identified
          character*10 c10
          integer*4 i,j
          i = len(c10) ! (ValIntrinsic "len")
          i = max(i,j) ! (ValIntrinsic "max")
      end

Passing this program through fortran-src -v f77l -a parse intrinsics_bug.f incorrectly classifies the function call names len and max as ValVariables instead of ValIntrinsics. It looks like the interface spec's parameter names are confusing the parser.

dorchard commented 1 year ago

Thanks! We will look into this.

raehik commented 1 year ago

Looks like we might not support parsing interfaces in our Fortran 77 parser (or the fixed-form lexer).