| ! { dg-do run } |
| ! { dg-additional-sources assumed_type_13.c } |
| |
| use iso_c_binding, only: c_size_t, c_int |
| implicit none (type, external) |
| |
| interface |
| subroutine test_c (x, n, num) bind (C) |
| import :: c_size_t, c_int |
| integer(c_size_t), value :: n |
| integer(c_int), value :: num |
| type(*) :: x(:) |
| end subroutine test_c |
| end interface |
| |
| complex(8) :: b(3) |
| |
| call test_c ([1_2, 2_2, 3_2], sizeof(1_2), num=1) |
| call test_c (b, sizeof(b(1)), num=2) |
| call outer_bc ([1_2, 2_2, 3_2], sizeof(1_2), num=1) |
| call outer_bc (b, sizeof(b(1)), num=2) |
| call outer_f ([1_2, 2_2, 3_2], sizeof(1_2), num=1) |
| call outer_f (b, sizeof(b(1)), num=2) |
| |
| contains |
| |
| subroutine outer_bc (x, n, num) bind(C) |
| integer(c_size_t), value :: n |
| integer(c_int), value :: num |
| type(*) :: x(:) |
| ! print *,sizeof(x)/size(x), n |
| if (sizeof(x)/size(x) /= n) error stop 1 |
| call inner_bc (x, n, num) |
| call inner_f (x, n, num) |
| call test_c (x, n, num) |
| end |
| |
| subroutine outer_f (x, n, num) |
| integer(c_size_t), value :: n |
| integer(c_int), value :: num |
| type(*) :: x(:) |
| ! print *,sizeof(x)/size(x), n |
| if (sizeof(x)/size(x) /= n) error stop 1 |
| call inner_f (x, n, num) |
| call inner_bc (x, n, num) |
| call test_c (x, n, num) |
| end |
| |
| subroutine inner_bc(x, n, num) bind(C) |
| integer(c_size_t), value :: n |
| integer(c_int), value :: num |
| type(*) :: x(:) |
| ! print *,sizeof(x)/size(x), n |
| if (sizeof(x)/size(x) /= n) error stop 2 |
| call test_c (x, n, num) |
| end |
| |
| subroutine inner_f(x, n, num) |
| integer(c_size_t), value :: n |
| integer(c_int), value :: num |
| type(*) :: x(:) |
| ! print *,sizeof(x)/size(x), n |
| if (sizeof(x)/size(x) /= n) error stop 3 |
| call test_c (x, n, num) |
| end |
| end |