1! RUN: %S/test_errors.sh %s %t %flang_fc1 2! REQUIRES: shell 3! C772 4module m1 5 type t1 6 contains 7 procedure, nopass :: s1 8 !ERROR: Binding name 's2' not found in this derived type 9 generic :: g1 => s2 10 end type 11 type t2 12 integer :: s1 13 contains 14 !ERROR: 's1' is not the name of a specific binding of this type 15 generic :: g2 => s1 16 end type 17contains 18 subroutine s1 19 end 20end 21 22module m2 23 type :: t3 24 contains 25 private 26 procedure, nopass :: s3 27 generic, public :: g3 => s3 28 generic :: h3 => s3 29 end type 30contains 31 subroutine s3(i) 32 end 33end 34 35! C771 36module m3 37 use m2 38 type, extends(t3) :: t4 39 contains 40 procedure, nopass :: s4 41 procedure, nopass :: s5 42 !ERROR: 'g3' does not have the same accessibility as its previous declaration 43 generic, private :: g3 => s4 44 !ERROR: 'h3' does not have the same accessibility as its previous declaration 45 generic, public :: h3 => s4 46 generic :: i3 => s4 47 !ERROR: 'i3' does not have the same accessibility as its previous declaration 48 generic, private :: i3 => s5 49 end type 50 type :: t5 51 contains 52 private 53 procedure, nopass :: s3 54 procedure, nopass :: s4 55 procedure, nopass :: s5 56 generic :: g5 => s3, s4 57 !ERROR: 'g5' does not have the same accessibility as its previous declaration 58 generic, public :: g5 => s5 59 end type 60contains 61 subroutine s4(r) 62 end 63 subroutine s5(z) 64 complex :: z 65 end 66end 67 68! Test forward reference in type-bound generic to binding is allowed 69module m4 70 type :: t1 71 contains 72 generic :: g => s1 73 generic :: g => s2 74 procedure, nopass :: s1 75 procedure, nopass :: s2 76 end type 77 type :: t2 78 contains 79 generic :: g => p1 80 generic :: g => p2 81 procedure, nopass :: p1 => s1 82 procedure, nopass :: p2 => s2 83 end type 84contains 85 subroutine s1() 86 end 87 subroutine s2(x) 88 end 89end 90 91! C773 - duplicate binding names 92module m5 93 type :: t1 94 contains 95 generic :: g => s1 96 generic :: g => s2 97 procedure, nopass :: s1 98 procedure, nopass :: s2 99 !ERROR: Binding name 's1' was already specified for generic 'g' 100 generic :: g => s1 101 end type 102contains 103 subroutine s1() 104 end 105 subroutine s2(x) 106 end 107end 108 109module m6 110 type t 111 contains 112 procedure :: f1 113 procedure :: f2 114 generic :: operator(.eq.) => f1 115 !ERROR: Binding name 'f1' was already specified for generic 'operator(.eq.)' 116 generic :: operator(==) => f2, f1 117 end type 118contains 119 logical function f1(x, y) result(result) 120 class(t), intent(in) :: x 121 real, intent(in) :: y 122 result = .true. 123 end 124 logical function f2(x, y) result(result) 125 class(t), intent(in) :: x 126 integer, intent(in) :: y 127 result = .true. 128 end 129end 130