|
1 | 1 | #include "test-utils.F90" |
| 2 | +#include "julienne-assert-macros.h" |
2 | 3 |
|
3 | 4 | module prif_co_reduce_test_m |
4 | | - use iso_c_binding, only: c_ptr, c_funptr, c_size_t, c_f_pointer, c_f_procpointer, c_funloc, c_loc, c_null_ptr |
| 5 | + use iso_c_binding, only: c_ptr, c_funptr, c_size_t, c_f_pointer, c_f_procpointer, c_funloc, c_loc, c_null_ptr, c_associated |
5 | 6 | use prif, only : prif_co_reduce, prif_num_images, prif_this_image_no_coarray, prif_operation_wrapper_interface |
6 | 7 | use julienne_m, only : & |
7 | | - operator(.all.) & |
| 8 | + call_julienne_assert_ & |
| 9 | + ,operator(.all.) & |
8 | 10 | ,operator(.also.) & |
9 | 11 | ,operator(.approximates.) & |
10 | 12 | ,operator(.equalsExpected.) & |
@@ -44,6 +46,8 @@ module prif_co_reduce_test_m |
44 | 46 | end type |
45 | 47 | #endif |
46 | 48 |
|
| 49 | + integer, target :: dummy |
| 50 | + |
47 | 51 | contains |
48 | 52 |
|
49 | 53 | pure function subject() result(test_subject) |
@@ -93,6 +97,9 @@ subroutine and_wrapper(arg1, arg2_and_out, count, cdata) bind(C) |
93 | 97 | integer(c_size_t) :: i |
94 | 98 |
|
95 | 99 | if (count == 0) return |
| 100 | + ! this expression is buggy as of Julienne 3.6.0 (julienne#166) |
| 101 | + !call_julienne_assert(cdata .equalsExpected. c_null_ptr) |
| 102 | + call_julienne_assert(.not. c_associated(cdata)) |
96 | 103 | call c_f_pointer(arg1, lhs, [count]) |
97 | 104 | call c_f_pointer(arg2_and_out, rhs_and_result, [count]) |
98 | 105 | do i = 1, count |
@@ -120,7 +127,7 @@ function check_derived_type_reduction() result(diag) |
120 | 127 | call prif_num_images(ni) |
121 | 128 |
|
122 | 129 | my_val = values(:, mod(me-1, size(values,2))+1) |
123 | | - call prif_co_reduce(my_val, op, c_null_ptr) |
| 130 | + call prif_co_reduce(my_val, op, c_loc(dummy)) |
124 | 131 |
|
125 | 132 | allocate(tmp(size(values,1),ni)) |
126 | 133 | tmp = reshape([(values(:, mod(i-1,size(values,2))+1), i = 1, ni)], [size(values,1),ni]) |
@@ -159,6 +166,7 @@ subroutine pair_adder(arg1, arg2_and_out, count, cdata) bind(C) |
159 | 166 | integer(c_size_t) :: i |
160 | 167 |
|
161 | 168 | if (count == 0) return |
| 169 | + call_julienne_assert(cdata .equalsExpected. c_loc(dummy)) |
162 | 170 | call c_f_pointer(arg1, lhs, [count]) |
163 | 171 | call c_f_pointer(arg2_and_out, rhs_and_result, [count]) |
164 | 172 | do i = 1, count |
|
0 commit comments