1*6c1ac141SIvan Zhechev! RUN: %python %S/test_errors.py %s %flang_fc1 264ab3302SCarolineConcatto! C772 364ab3302SCarolineConcattomodule m1 464ab3302SCarolineConcatto type t1 564ab3302SCarolineConcatto contains 664ab3302SCarolineConcatto procedure, nopass :: s1 764ab3302SCarolineConcatto !ERROR: Binding name 's2' not found in this derived type 864ab3302SCarolineConcatto generic :: g1 => s2 964ab3302SCarolineConcatto end type 1064ab3302SCarolineConcatto type t2 1164ab3302SCarolineConcatto integer :: s1 1264ab3302SCarolineConcatto contains 1364ab3302SCarolineConcatto !ERROR: 's1' is not the name of a specific binding of this type 1464ab3302SCarolineConcatto generic :: g2 => s1 1564ab3302SCarolineConcatto end type 1664ab3302SCarolineConcattocontains 1764ab3302SCarolineConcatto subroutine s1 1864ab3302SCarolineConcatto end 1964ab3302SCarolineConcattoend 2064ab3302SCarolineConcatto 2164ab3302SCarolineConcattomodule m2 2264ab3302SCarolineConcatto type :: t3 2364ab3302SCarolineConcatto contains 2464ab3302SCarolineConcatto private 2564ab3302SCarolineConcatto procedure, nopass :: s3 2664ab3302SCarolineConcatto generic, public :: g3 => s3 2764ab3302SCarolineConcatto generic :: h3 => s3 2864ab3302SCarolineConcatto end type 2964ab3302SCarolineConcattocontains 3064ab3302SCarolineConcatto subroutine s3(i) 3164ab3302SCarolineConcatto end 3264ab3302SCarolineConcattoend 3364ab3302SCarolineConcatto 3464ab3302SCarolineConcatto! C771 3564ab3302SCarolineConcattomodule m3 3664ab3302SCarolineConcatto use m2 3764ab3302SCarolineConcatto type, extends(t3) :: t4 3864ab3302SCarolineConcatto contains 3964ab3302SCarolineConcatto procedure, nopass :: s4 4064ab3302SCarolineConcatto procedure, nopass :: s5 4164ab3302SCarolineConcatto !ERROR: 'g3' does not have the same accessibility as its previous declaration 4264ab3302SCarolineConcatto generic, private :: g3 => s4 4364ab3302SCarolineConcatto !ERROR: 'h3' does not have the same accessibility as its previous declaration 4464ab3302SCarolineConcatto generic, public :: h3 => s4 4564ab3302SCarolineConcatto generic :: i3 => s4 4664ab3302SCarolineConcatto !ERROR: 'i3' does not have the same accessibility as its previous declaration 4764ab3302SCarolineConcatto generic, private :: i3 => s5 4864ab3302SCarolineConcatto end type 4964ab3302SCarolineConcatto type :: t5 5064ab3302SCarolineConcatto contains 5164ab3302SCarolineConcatto private 5264ab3302SCarolineConcatto procedure, nopass :: s3 5364ab3302SCarolineConcatto procedure, nopass :: s4 5464ab3302SCarolineConcatto procedure, nopass :: s5 5564ab3302SCarolineConcatto generic :: g5 => s3, s4 5664ab3302SCarolineConcatto !ERROR: 'g5' does not have the same accessibility as its previous declaration 5764ab3302SCarolineConcatto generic, public :: g5 => s5 5864ab3302SCarolineConcatto end type 5964ab3302SCarolineConcattocontains 6064ab3302SCarolineConcatto subroutine s4(r) 6164ab3302SCarolineConcatto end 6264ab3302SCarolineConcatto subroutine s5(z) 6364ab3302SCarolineConcatto complex :: z 6464ab3302SCarolineConcatto end 6564ab3302SCarolineConcattoend 6664ab3302SCarolineConcatto 6764ab3302SCarolineConcatto! Test forward reference in type-bound generic to binding is allowed 6864ab3302SCarolineConcattomodule m4 6964ab3302SCarolineConcatto type :: t1 7064ab3302SCarolineConcatto contains 7164ab3302SCarolineConcatto generic :: g => s1 7264ab3302SCarolineConcatto generic :: g => s2 7364ab3302SCarolineConcatto procedure, nopass :: s1 7464ab3302SCarolineConcatto procedure, nopass :: s2 7564ab3302SCarolineConcatto end type 7664ab3302SCarolineConcatto type :: t2 7764ab3302SCarolineConcatto contains 7864ab3302SCarolineConcatto generic :: g => p1 7964ab3302SCarolineConcatto generic :: g => p2 8064ab3302SCarolineConcatto procedure, nopass :: p1 => s1 8164ab3302SCarolineConcatto procedure, nopass :: p2 => s2 8264ab3302SCarolineConcatto end type 8364ab3302SCarolineConcattocontains 8464ab3302SCarolineConcatto subroutine s1() 8564ab3302SCarolineConcatto end 8664ab3302SCarolineConcatto subroutine s2(x) 8764ab3302SCarolineConcatto end 8864ab3302SCarolineConcattoend 8964ab3302SCarolineConcatto 9064ab3302SCarolineConcatto! C773 - duplicate binding names 9164ab3302SCarolineConcattomodule m5 9264ab3302SCarolineConcatto type :: t1 9364ab3302SCarolineConcatto contains 9464ab3302SCarolineConcatto generic :: g => s1 9564ab3302SCarolineConcatto generic :: g => s2 9664ab3302SCarolineConcatto procedure, nopass :: s1 9764ab3302SCarolineConcatto procedure, nopass :: s2 9864ab3302SCarolineConcatto !ERROR: Binding name 's1' was already specified for generic 'g' 9964ab3302SCarolineConcatto generic :: g => s1 10064ab3302SCarolineConcatto end type 10164ab3302SCarolineConcattocontains 10264ab3302SCarolineConcatto subroutine s1() 10364ab3302SCarolineConcatto end 10464ab3302SCarolineConcatto subroutine s2(x) 10564ab3302SCarolineConcatto end 10664ab3302SCarolineConcattoend 10764ab3302SCarolineConcatto 10864ab3302SCarolineConcattomodule m6 10964ab3302SCarolineConcatto type t 11064ab3302SCarolineConcatto contains 11164ab3302SCarolineConcatto procedure :: f1 11264ab3302SCarolineConcatto procedure :: f2 11364ab3302SCarolineConcatto generic :: operator(.eq.) => f1 11464ab3302SCarolineConcatto !ERROR: Binding name 'f1' was already specified for generic 'operator(.eq.)' 11564ab3302SCarolineConcatto generic :: operator(==) => f2, f1 11664ab3302SCarolineConcatto end type 11764ab3302SCarolineConcattocontains 11864ab3302SCarolineConcatto logical function f1(x, y) result(result) 11964ab3302SCarolineConcatto class(t), intent(in) :: x 12064ab3302SCarolineConcatto real, intent(in) :: y 12164ab3302SCarolineConcatto result = .true. 12264ab3302SCarolineConcatto end 12364ab3302SCarolineConcatto logical function f2(x, y) result(result) 12464ab3302SCarolineConcatto class(t), intent(in) :: x 12564ab3302SCarolineConcatto integer, intent(in) :: y 12664ab3302SCarolineConcatto result = .true. 12764ab3302SCarolineConcatto end 12864ab3302SCarolineConcattoend 129