xref: /llvm-project/flang/test/Semantics/resolve80.f90 (revision 6c1ac141d3c98af9738bc77fcb55602cbff7751f)
1*6c1ac141SIvan Zhechev! RUN: %python %S/test_errors.py %s %flang_fc1
2e17e7173SPete Steinfeldmodule m
3e17e7173SPete Steinfeld!C778 The same binding-attr shall not appear more than once in a given
4e17e7173SPete Steinfeld!binding-attr-list.
5e17e7173SPete Steinfeld!
6e17e7173SPete Steinfeld!R749 type-bound-procedure-stmt
7e17e7173SPete Steinfeld!  PROCEDURE [ [ ,binding-attr-list] :: ]type-bound-proc-decl-list
8e17e7173SPete Steinfeld!  or PROCEDURE (interface-name),binding-attr-list::binding-name-list
9e17e7173SPete Steinfeld!
10e17e7173SPete Steinfeld!
11e17e7173SPete Steinfeld!  binding-attr values are:
12e17e7173SPete Steinfeld!    PUBLIC, PRIVATE, DEFERRED, NON_OVERRIDABLE, NOPASS, PASS [ (arg-name) ]
13e17e7173SPete Steinfeld!
14e17e7173SPete Steinfeld  type, abstract :: boundProcType
15e17e7173SPete Steinfeld   contains
16e17e7173SPete Steinfeld    !WARNING: Attribute 'PUBLIC' cannot be used more than once
17e17e7173SPete Steinfeld    procedure(subPublic), public, deferred, public :: publicBinding
18e17e7173SPete Steinfeld    !WARNING: Attribute 'PRIVATE' cannot be used more than once
19e17e7173SPete Steinfeld    procedure(subPrivate), private, deferred, private :: privateBinding
20e17e7173SPete Steinfeld    !WARNING: Attribute 'DEFERRED' cannot be used more than once
21e17e7173SPete Steinfeld    procedure(subDeferred), deferred, public, deferred :: deferredBinding
22e17e7173SPete Steinfeld    !WARNING: Attribute 'NON_OVERRIDABLE' cannot be used more than once
23e17e7173SPete Steinfeld    procedure, non_overridable, public, non_overridable :: subNon_overridable;
24e17e7173SPete Steinfeld    !WARNING: Attribute 'NOPASS' cannot be used more than once
25e17e7173SPete Steinfeld    procedure(subNopass), nopass, deferred, nopass :: nopassBinding
26e17e7173SPete Steinfeld    !WARNING: Attribute 'PASS' cannot be used more than once
27e17e7173SPete Steinfeld    procedure(subPass), pass, deferred, pass :: passBinding
28e17e7173SPete Steinfeld    !ERROR: Attributes 'PASS' and 'NOPASS' conflict with each other
29b752a8caSsameeran joshi    procedure(subPassNopass), pass, deferred, nopass :: passNopassBinding  ! C781
30e17e7173SPete Steinfeld  end type boundProcType
31e17e7173SPete Steinfeld
32e17e7173SPete Steinfeldcontains
33e17e7173SPete Steinfeld    subroutine subPublic(x)
34e17e7173SPete Steinfeld      class(boundProcType), intent(in) :: x
35e17e7173SPete Steinfeld    end subroutine subPublic
36e17e7173SPete Steinfeld
37e17e7173SPete Steinfeld    subroutine subPrivate(x)
38e17e7173SPete Steinfeld      class(boundProcType), intent(in) :: x
39e17e7173SPete Steinfeld    end subroutine subPrivate
40e17e7173SPete Steinfeld
41e17e7173SPete Steinfeld    subroutine subDeferred(x)
42e17e7173SPete Steinfeld      class(boundProcType), intent(in) :: x
43e17e7173SPete Steinfeld    end subroutine subDeferred
44e17e7173SPete Steinfeld
45e17e7173SPete Steinfeld    subroutine subNon_overridable(x)
46e17e7173SPete Steinfeld      class(boundProcType), intent(in) :: x
47e17e7173SPete Steinfeld    end subroutine subNon_overridable
48e17e7173SPete Steinfeld
49e17e7173SPete Steinfeld    subroutine subNopass(x)
50e17e7173SPete Steinfeld      class(boundProcType), intent(in) :: x
51e17e7173SPete Steinfeld    end subroutine subNopass
52e17e7173SPete Steinfeld
53e17e7173SPete Steinfeld    subroutine subPass(x)
54e17e7173SPete Steinfeld      class(boundProcType), intent(in) :: x
55e17e7173SPete Steinfeld    end subroutine subPass
56e17e7173SPete Steinfeld
57e17e7173SPete Steinfeld    subroutine subPassNopass(x)
58e17e7173SPete Steinfeld      class(boundProcType), intent(in) :: x
59e17e7173SPete Steinfeld    end subroutine subPassNopass
60e17e7173SPete Steinfeld
61e17e7173SPete Steinfeldend module m
62