annotate gcc/testsuite/gfortran.dg/c_loc_tests_11.f03 @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
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 ! { dg-options "-std=f2008" }
kono
parents:
diff changeset
3 !
kono
parents:
diff changeset
4 ! Test argument checking for C_LOC with subcomponent parameters.
kono
parents:
diff changeset
5 module c_vhandle_mod
kono
parents:
diff changeset
6 use iso_c_binding
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 type double_vector_item
kono
parents:
diff changeset
9 real(kind(1.d0)), allocatable :: v(:)
kono
parents:
diff changeset
10 end type double_vector_item
kono
parents:
diff changeset
11 type(double_vector_item), allocatable, target :: dbv_pool(:)
kono
parents:
diff changeset
12 real(kind(1.d0)), allocatable, target :: vv(:)
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 type foo
kono
parents:
diff changeset
15 integer :: i
kono
parents:
diff changeset
16 end type foo
kono
parents:
diff changeset
17 type foo_item
kono
parents:
diff changeset
18 type(foo), pointer :: v => null()
kono
parents:
diff changeset
19 end type foo_item
kono
parents:
diff changeset
20 type(foo_item), allocatable :: foo_pool(:)
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 type foo_item2
kono
parents:
diff changeset
23 type(foo), pointer :: v(:) => null()
kono
parents:
diff changeset
24 end type foo_item2
kono
parents:
diff changeset
25 type(foo_item2), allocatable :: foo_pool2(:)
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 contains
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 type(c_ptr) function get_double_vector_address(handle)
kono
parents:
diff changeset
31 integer(c_int), intent(in) :: handle
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 if (.true.) then ! The ultimate component is an allocatable target
kono
parents:
diff changeset
34 get_double_vector_address = c_loc(dbv_pool(handle)%v) ! OK: Interop type and allocatable
kono
parents:
diff changeset
35 else
kono
parents:
diff changeset
36 get_double_vector_address = c_loc(vv) ! OK: Interop type and allocatable
kono
parents:
diff changeset
37 endif
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 end function get_double_vector_address
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 type(c_ptr) function get_foo_address(handle)
kono
parents:
diff changeset
43 integer(c_int), intent(in) :: handle
kono
parents:
diff changeset
44 get_foo_address = c_loc(foo_pool(handle)%v)
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 get_foo_address = c_loc(foo_pool2(handle)%v) ! { dg-error "TS 29113/TS 18508: Noninteroperable array at .1. as argument to C_LOC: Expression is a noninteroperable derived type" }
kono
parents:
diff changeset
47 end function get_foo_address
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 end module c_vhandle_mod
kono
parents:
diff changeset
51