1! { dg-do compile }
2! { dg-options "-finit-derived -finit-integer=42 -finit-real=inf -finit-logical=true -finit-character=32 -fdump-tree-original" }
3!
4! Make sure -finit-derived initializes components of local derived type
5! variables according to other -finit-* flags.
6!
7
8subroutine dummy(i1,r1,c1,l1,i2,r2,c2,l2)
9  implicit none
10  integer, intent(in) :: i1
11  real, intent(in) :: r1
12  character, intent(in) :: c1
13  logical, intent(in) :: l1
14  integer, intent(out) :: i2
15  real, intent(out) :: r2
16  character, intent(out) :: c2
17  logical, intent(out) :: l2
18end subroutine
19
20type t2
21  integer i2
22  real r2
23  character c2
24  logical l2
25end type
26
27type t1
28  logical l1
29  real r1
30  character c1
31  integer i1
32  type (t2) y
33end type
34
35type (t1) :: x
36
37call dummy (x%i1, x%r1, x%c1, x%l1, x%y%i2, x%y%r2, x%y%c2, x%y%l2)
38
39end
40
41! We expect to see each component initialized exactly once in MAIN.
42! NB. the "once" qualifier also tests that the dummy variables aren't
43! given an extraneous initializer.
44! { dg-final { scan-tree-dump-times "i1= *42" 1 "original" } }
45! { dg-final { scan-tree-dump-times "r1= *\[iI]nf" 1 "original" } }
46! { dg-final { scan-tree-dump-times "c1= *\" \"" 1 "original" } }
47! { dg-final { scan-tree-dump-times "l1= *1" 1 "original" } }
48! { dg-final { scan-tree-dump-times "i2= *42" 1 "original" } }
49! { dg-final { scan-tree-dump-times "r2= *\[iI]nf" 1 "original" } }
50! { dg-final { scan-tree-dump-times "c2= *\" \"" 1 "original" } }
51! { dg-final { scan-tree-dump-times "l2= *1" 1 "original" } }
52