[Bug fortran/93422] New: Bogus POINTER attribute mismatch with submodule MODULE PROCEDURE

abensonca at gmail dot com gcc-bugzilla@gcc.gnu.org
Fri Jan 24 17:34:00 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93422

            Bug ID: 93422
           Summary: Bogus POINTER attribute mismatch with submodule MODULE
                    PROCEDURE
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: abensonca at gmail dot com
  Target Milestone: ---

The following code results in a bogus error (using git commit
472dc648ce3e7661762931d584d239611ddca964) claiming a pointer attribute mismatch
between the function result as defined in the module and submodule:


module t

  type :: a
   contains
     procedure :: p => ap
  end type a

  type, extends(a) :: b
   contains
     procedure :: p => bp
  end type b

  type :: c
  end type c

  type, extends(c) :: d
  end type d

  interface
     module function bp(s)
       class(b), intent(inout) :: s
       class(d), pointer :: bp
     end function
  end interface

contains

  function ap(s)
    class(a), intent(inout) :: s
    class(d), pointer :: ap
  end function ap

end module t

submodule (t) ts

contains

  function bp(s)
    class(d), pointer :: bp
    class(b), intent(inout) :: s
  end function bp

end submodule ts




$ gfortran -v
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/home/abenson/Galacticus/Tools/libexec/gcc/x86_64-pc-linux-gnu/10.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-git/configure --prefix=/home/abenson/Galacticus/Tools
--enable-languages=c,c++,fortran --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.0.1 20200124 (experimental) (GCC) 

$ gfortran -c test4.mod.F90 -o test4.mod.o 
test4.mod.F90:35:12:

   35 | submodule (t) ts
      |            1
Error: Result mismatch for the overriding procedure 'p' at (1): POINTER
attribute mismatch in function result
test4.mod.F90:39:2:

   39 |   function bp(s)
      |  1
Error: POINTER attribute mismatch in function result between the MODULE
PROCEDURE declaration in MODULE 't' and the declaration at (1) in (SUB)MODULE
'ts'


The code compiles successfully if the "pointer" attribute is removed, or if the
function in the submodule is declared using the "module procedure" approach
instead of explicitly (re)defining its interface. It also compiles successfully
using ifort 18.0.1.


More information about the Gcc-bugs mailing list