1! { dg-do compile }
2! { dg-options "-fcoarray=lib -fdump-tree-original" }
3!
4  implicit none
5  type t
6  end type t
7  class(t), allocatable :: y[:]
8  call bar()
9  call foo(y)
10contains
11  subroutine bar(x)
12    class(t), optional :: x[*]
13  end subroutine bar
14  subroutine foo(x)
15    class(t) :: x[*]
16  end subroutine foo
17end
18! { dg-final { scan-tree-dump-times "foo \\(struct __class_MAIN___T_0_1t & restrict x, void \\* restrict caf_token.., integer\\(kind=\[48\]\\) caf_offset..\\)" 1 "original" } }
19! { dg-final { scan-tree-dump-times "bar \\(struct __class_MAIN___T_0_1t \\* x, void \\* restrict caf_token.., integer\\(kind=\[48\]\\) caf_offset..\\)" 1 "original" } }
20! { dg-final { scan-tree-dump-times "bar \\(0B, 0B, 0\\);" 1 "original" } }
21! { dg-final { scan-tree-dump-times "foo \\(&class.., y._data.token, \\(integer\\(kind=\[48\]\\)\\) class..._data.data - \\(integer\\(kind=\[48\]\\)\\) y._data.data\\);" 1 "original" } }
22