annotate gcc/testsuite/gfortran.dg/interface_10.f90 @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do compile }
kono
parents:
diff changeset
2 ! PR fortran/30683
kono
parents:
diff changeset
3 ! Code contributed by Salvatore Filippone.
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 module class_fld
kono
parents:
diff changeset
6 integer, parameter :: int_ = 1
kono
parents:
diff changeset
7 integer, parameter :: bnd_ = 2
kono
parents:
diff changeset
8 type fld
kono
parents:
diff changeset
9 integer :: size(2)
kono
parents:
diff changeset
10 end type fld
kono
parents:
diff changeset
11 !
kono
parents:
diff changeset
12 ! This interface is extending the SIZE intrinsic procedure,
kono
parents:
diff changeset
13 ! which led to a segmentation fault when trying to resolve
kono
parents:
diff changeset
14 ! the intrinsic symbol name.
kono
parents:
diff changeset
15 !
kono
parents:
diff changeset
16 interface size
kono
parents:
diff changeset
17 module procedure get_fld_size
kono
parents:
diff changeset
18 end interface
kono
parents:
diff changeset
19 contains
kono
parents:
diff changeset
20 function get_fld_size(f)
kono
parents:
diff changeset
21 integer :: get_fld_size(2)
kono
parents:
diff changeset
22 type(fld), intent(in) :: f
kono
parents:
diff changeset
23 get_fld_size(int_) = f%size(int_)
kono
parents:
diff changeset
24 get_fld_size(bnd_) = f%size(bnd_)
kono
parents:
diff changeset
25 end function get_fld_size
kono
parents:
diff changeset
26 end module class_fld
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 module class_s_fld
kono
parents:
diff changeset
29 use class_fld
kono
parents:
diff changeset
30 type s_fld
kono
parents:
diff changeset
31 type(fld) :: base
kono
parents:
diff changeset
32 real(kind(1.d0)), pointer :: x(:) => null()
kono
parents:
diff changeset
33 end type s_fld
kono
parents:
diff changeset
34 interface x_
kono
parents:
diff changeset
35 module procedure get_s_fld_x
kono
parents:
diff changeset
36 end interface
kono
parents:
diff changeset
37 contains
kono
parents:
diff changeset
38 function get_s_fld_x(fld)
kono
parents:
diff changeset
39 real(kind(1.d0)), pointer :: get_s_fld_x(:)
kono
parents:
diff changeset
40 type(s_fld), intent(in) :: fld
kono
parents:
diff changeset
41 get_s_fld_x => fld%x
kono
parents:
diff changeset
42 end function get_s_fld_x
kono
parents:
diff changeset
43 end module class_s_fld
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 module class_s_foo
kono
parents:
diff changeset
46 contains
kono
parents:
diff changeset
47 subroutine solve_s_foo(phi,var)
kono
parents:
diff changeset
48 use class_s_fld
kono
parents:
diff changeset
49 type(s_fld), intent(inout) :: phi
kono
parents:
diff changeset
50 real(kind(1.d0)), intent(out), optional :: var
kono
parents:
diff changeset
51 integer :: nsz
kono
parents:
diff changeset
52 real(kind(1.d0)), pointer :: x(:)
kono
parents:
diff changeset
53 x => x_(phi)
kono
parents:
diff changeset
54 nsz=size(x)
kono
parents:
diff changeset
55 end subroutine solve_s_foo
kono
parents:
diff changeset
56 end module class_s_foo