61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Fortran
		
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Fortran
		
	
	
	
! RUN: %S/test_errors.sh %s %t %f18
 | 
						|
module m
 | 
						|
  interface foo
 | 
						|
    real function s1(x)
 | 
						|
      real x
 | 
						|
    end
 | 
						|
    !ERROR: 's2' is not a module procedure
 | 
						|
    module procedure s2
 | 
						|
    !ERROR: Procedure 's3' not found
 | 
						|
    procedure s3
 | 
						|
    !ERROR: Procedure 's1' is already specified in generic 'foo'
 | 
						|
    procedure s1
 | 
						|
  end interface
 | 
						|
  interface
 | 
						|
    real function s4(x,y)
 | 
						|
      real, intent(in) :: x,y
 | 
						|
    end function
 | 
						|
    complex function s2(x,y)
 | 
						|
      complex, intent(in) :: x,y
 | 
						|
    end function
 | 
						|
  end interface
 | 
						|
  generic :: bar => s4
 | 
						|
  generic :: bar => s2
 | 
						|
  !ERROR: Procedure 's4' is already specified in generic 'bar'
 | 
						|
  generic :: bar => s4
 | 
						|
 | 
						|
  generic :: operator(.foo.)=> s4
 | 
						|
  generic :: operator(.foo.)=> s2
 | 
						|
  !ERROR: Procedure 's4' is already specified in generic 'OPERATOR(.foo.)'
 | 
						|
  generic :: operator(.foo.)=> s4
 | 
						|
end module
 | 
						|
 | 
						|
module m2
 | 
						|
  interface
 | 
						|
    integer function f(x, y)
 | 
						|
      logical, intent(in) :: x, y
 | 
						|
    end function
 | 
						|
  end interface
 | 
						|
  generic :: operator(+)=> f
 | 
						|
  !ERROR: Procedure 'f' is already specified in generic 'OPERATOR(+)'
 | 
						|
  generic :: operator(+)=> f
 | 
						|
end
 | 
						|
 | 
						|
module m3
 | 
						|
  interface operator(.ge.)
 | 
						|
    procedure f
 | 
						|
  end interface
 | 
						|
  interface operator(>=)
 | 
						|
    !ERROR: Procedure 'f' is already specified in generic 'OPERATOR(.GE.)'
 | 
						|
    procedure f
 | 
						|
  end interface
 | 
						|
  generic :: operator(>) => f
 | 
						|
  !ERROR: Procedure 'f' is already specified in generic 'OPERATOR(>)'
 | 
						|
  generic :: operator(.gt.) => f
 | 
						|
contains
 | 
						|
  logical function f(x, y) result(result)
 | 
						|
    logical, intent(in) :: x, y
 | 
						|
    result = .true.
 | 
						|
  end
 | 
						|
end
 |