This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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]

Re: [Patch, fortran] PR29975 - [meta-bugs] ICEs with CP2K


Hi Paul,

Paul Thomas wrote:
> The second bug was slightly more complicated.  generic interfaces can
> be ambiguous if they do not contain ambiguous specific procedures. 
> This part of the patch is fixed in symbol.c by not raising the error
> if the symbol is generic.  Then the third part concerned the
> conditions in which ambiguous interfaces can cause an error - in
> essence, they must be referenced.  This allows correct use of two
> modules for other things than the ambiguous interfaces that they
> contain.  Finally, other compilers, a warning is omitted for an
> ambiguous interface, where only one is use associated, even if they
> are not referenced.  All this is done in interface.c.  Two new tests
> have been added and two were corrected; one by adding a reference to
> the ambiguous interfaces and another by changing an error to a warning.
I regression tested (x86_64-unknown-linux-gnu) and, looking at the patch
itself, I think it is ok.


I only miss a warning for the following invalid code:
  use mod1, only generic
  use mod2
The "only generic" makes it invalid, but gfortran gives with the patch
no warning.
[without the patch gfortran already wrongly rejects "use mod1; use mod2"
- as do g95 and sunf95.]

I think it is not that important since using the symbol gives an error,
but it still would be nice if there were a warning.


ifort gives:

fortcom: Warning: if.f90, line 19: The type/rank/keyword signature for
this specific procedure matches another specific procedure that shares
the same generic-name.   [BAR]
  use mod2
------^

(cf. Richard Main in
http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/44aa13e0102ec83d/)

------------------------
module mod1
   interface generic
      subroutine foo(a)
         real :: a
      end subroutine
   end interface generic
end module  mod1

module mod2
   interface generic
      subroutine bar(a)
         real :: a
      end subroutine
   end interface generic
end module  mod2

program main
  use mod1, only: generic  ! import generic => make it invalid
  use mod2
end program main
------------------------

Tobias


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