This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch, fortran] PR32612 gfortran - incorrectly flags error on interface module


I will commit the following as obvious and simple:

Regression tested on x86-64.

I left the mod_proc attribute off in the patch for pr25061. This is a regression fix.

Regards,

Jerry


2007-07-03 Jerry DeLisle <jvdelisle@gcc.gnu.org>


	PR fortran/32612
	* decl.c (get_proc_name): Include attr->mod_proc in check for error.

Index: decl.c
===================================================================
--- decl.c      (revision 126283)
+++ decl.c      (working copy)
@@ -708,7 +708,8 @@ get_proc_name (const char *name, gfc_sym
       /* Trap a procedure with a name the same as interface in the
         encompassing scope.  */
       if (sym->attr.generic != 0
-         && (sym->attr.subroutine || sym->attr.function))
+         && (sym->attr.subroutine || sym->attr.function)
+         && !sym->attr.mod_proc)
        gfc_error_now ("Name '%s' at %C is already defined"
                       " as a generic interface at %L",
                       name, &sym->declared_at);

! { dg-do compile }
! PR32612 gfortran - incorrectly flags error on interface module
! Test case is that of the reporters
   module files_module
      implicit none
          integer, parameter :: REAL8 = SELECTED_REAL_KIND(12)      
      save
      private
      interface my_sio_file_read_common
        module procedure my_sio_file_read_common ! This was rejected before
      end interface
    contains
      subroutine my_sio_file_read_all_i4(serial, data, data_lengths, error)
        logical, intent(in)  :: serial
        integer, intent(out) :: data(*)
        integer, intent(in)  :: data_lengths(0:*)
        integer, intent(out) :: error
        call my_sio_file_read_common(data_lengths, error, data_i4 = data)
      end subroutine my_sio_file_read_all_i4
      subroutine my_sio_file_read_common(data_lengths, error, &
                                         data_i4, &
                                         data_r8)
        integer,     intent(in)  :: data_lengths(0:*)
        integer,     intent(out) :: error
        integer,     intent(out), optional :: data_i4(*)
        real(REAL8), intent(out), optional :: data_r8(*)
          error=0
          data_i4(1)=0
          data_r8(1)=0
      end subroutine my_sio_file_read_common
    end module files_module

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]