! { dg-do link } ! { dg-additional-options "-fdump-tree-gimple" } ! { dg-additional-sources "declare-variant-mod-1-use.f90" } ! Note: We have to use 'link' as otherwise '-o' is specified, ! which does not work with multiple files. ! Check that module-file handling works for declare_variant ! and its match/adjust_args/append_args clauses ! ! PR fortran/115271 ! Define to make linker happy integer function m1_f (x, y, z) use iso_c_binding type(c_ptr) :: x, y, z value :: x end integer function m1_g (x, y, z) use iso_c_binding type(c_ptr) :: x, y, z value :: x end module m1 implicit none (type, external) interface integer function m1_f (x, y, z) use iso_c_binding type(c_ptr) :: x, y, z value :: x end integer function m1_g (x, y, z) !$omp declare variant(m1_f) match(construct={dispatch}) adjust_args(need_device_ptr: x, 3) adjust_args(nothing: y) use iso_c_binding type(c_ptr) :: x, y, z value :: x end end interface end module m1 module m2 implicit none (type, external) contains integer function m2_f (x, y, z) use iso_c_binding type(c_ptr) :: x, y, z value :: x m2_f = 1 end integer function m2_g (x, y, z) !$omp declare variant(m2_f) match(construct={dispatch}) adjust_args(need_device_ptr: x, 3) adjust_args(nothing: y) use iso_c_binding type(c_ptr) :: x, y, z value :: x m2_g = 2 end end module m2 module m3_pre implicit none (type, external) contains integer function m3_f (x, y, z) use iso_c_binding type(c_ptr) :: x, y, z value :: x m3_f = 1 end integer function m3_g (x, y, z) use iso_c_binding type(c_ptr) :: x, y, z value :: x m3_g = 2 end end module m3_pre module m3 use m3_pre, only: my_m3_f => m3_f, my_m3_g => m3_g implicit none (type, external) !$omp declare variant(my_m3_g : my_m3_f) match(construct={dispatch}) adjust_args(need_device_ptr: 1, 3) adjust_args(nothing: 2) end module m3