99! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 %t/omp-declare-mapper-6.f90 -o - | FileCheck %t/omp-declare-mapper-6.f90
1010! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -module-dir %t %t/omp-declare-mapper-7.mod.f90 -o - >/dev/null
1111! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -J %t %t/omp-declare-mapper-7.use.f90 -o - | FileCheck %t/omp-declare-mapper-7.use.f90
12+ ! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -module-dir %t %t/omp-declare-mapper-8.mod.f90 -o - >/dev/null
13+ ! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -J %t %t/omp-declare-mapper-8.use.f90 -o - | FileCheck %t/omp-declare-mapper-8.use.f90
1214
1315!- -- omp-declare-mapper-1.f90
1416subroutine declare_mapper_1
@@ -26,7 +28,7 @@ subroutine declare_mapper_1
2628 end type
2729 type (my_type2) :: t
2830 real :: x, y(nvals)
29- ! CHECK:omp.declare_mapper @[[MY_TYPE_MAPPER:_QQFdeclare_mapper_1my_type\.omp\.default\.mapper ]] : [[MY_TYPE:!fir\.type<_QFdeclare_mapper_1Tmy_type\{num_vals:i32,values:!fir\.box<!fir\.heap<!fir\.array<\?xi32>>>\}>]] {
31+ ! CHECK:omp.declare_mapper @[[MY_TYPE_MAPPER:_QQFdeclare_mapper_1my_type_omp_default_mapper ]] : [[MY_TYPE:!fir\.type<_QFdeclare_mapper_1Tmy_type\{num_vals:i32,values:!fir\.box<!fir\.heap<!fir\.array<\?xi32>>>\}>]] {
3032 ! CHECK: ^bb0(%[[VAL_0:.*]]: !fir.ref<[[MY_TYPE]]>):
3133 ! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] {uniq_name = "_QFdeclare_mapper_1Evar"} : (!fir.ref<[[MY_TYPE]]>) -> (!fir.ref<[[MY_TYPE]]>, !fir.ref<[[MY_TYPE]]>)
3234 ! CHECK: %[[VAL_2:.*]] = hlfir.designate %[[VAL_1]]#0{"values"} {fortran_attrs = #fir.var_attrs<allocatable>} : (!fir.ref<[[MY_TYPE]]>) -> !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
@@ -153,7 +155,7 @@ subroutine declare_mapper_4
153155 integer :: num
154156 end type
155157
156- ! CHECK: omp.declare_mapper @[[MY_TYPE_MAPPER:_QQFdeclare_mapper_4my_type.omp.default.mapper ]] : [[MY_TYPE:!fir\.type<_QFdeclare_mapper_4Tmy_type\{num:i32\}>]]
158+ ! CHECK: omp.declare_mapper @[[MY_TYPE_MAPPER:_QQFdeclare_mapper_4my_type_omp_default_mapper ]] : [[MY_TYPE:!fir\.type<_QFdeclare_mapper_4Tmy_type\{num:i32\}>]]
157159 ! $omp declare mapper (my_type :: var) map (var%num)
158160
159161 type (my_type) :: a
@@ -185,9 +187,9 @@ program declare_mapper_5
185187 end type
186188
187189 ! CHECK: omp.declare_mapper @[[INNER_MAPPER_NAMED:_QQFFuse_innermy_mapper]] : [[MY_TYPE:!fir\.type<_QFTmytype\{x:i32,y:i32\}>]]
188- ! CHECK: omp.declare_mapper @[[INNER_MAPPER_DEFAULT:_QQFFuse_innermytype.omp.default.mapper ]] : [[MY_TYPE]]
190+ ! CHECK: omp.declare_mapper @[[INNER_MAPPER_DEFAULT:_QQFFuse_innermytype_omp_default_mapper ]] : [[MY_TYPE]]
189191 ! CHECK: omp.declare_mapper @[[OUTER_MAPPER_NAMED:_QQFmy_mapper]] : [[MY_TYPE]]
190- ! CHECK: omp.declare_mapper @[[OUTER_MAPPER_DEFAULT:_QQFmytype.omp.default.mapper ]] : [[MY_TYPE]]
192+ ! CHECK: omp.declare_mapper @[[OUTER_MAPPER_DEFAULT:_QQFmytype_omp_default_mapper ]] : [[MY_TYPE]]
191193 ! $omp declare mapper(mytype :: var) map(tofrom: var%x)
192194 ! $omp declare mapper(my_mapper : mytype :: var) map(tofrom: var%y)
193195
@@ -325,3 +327,36 @@ program use_module_mapper
325327 a% x = 42
326328 ! $omp end target
327329end program use_module_mapper
330+
331+ !- -- omp-declare-mapper-8.mod.f90
332+ ! Module with a default DECLARE MAPPER to be compiled separately.
333+ module default_mapper_mod
334+ implicit none
335+ type :: dtype
336+ integer :: x
337+ end type dtype
338+ ! $omp declare mapper(dtype :: v) map(tofrom: v%x)
339+ end module default_mapper_mod
340+
341+ !- -- omp-declare-mapper-8.use.f90
342+ ! Consumer program that USEs the module and relies on the default mapper.
343+ ! CHECK: omp.declare_mapper @{{.*dtype_omp_default_mapper}} : !fir.type<_QMdefault_mapper_modTdtype{x:i32}>
344+ ! CHECK: %{{.*}} = omp.map.info {{.*}} map_clauses(tofrom) {{.*}} mapper(@{{.*dtype_omp_default_mapper}}) {{.*}} {name = "a"}
345+ ! CHECK: %{{.*}} = omp.map.info {{.*}} map_clauses(tofrom) {{.*}} mapper(@{{.*dtype_omp_default_mapper}}) {{.*}} {name = "a"}
346+ ! CHECK: %{{.*}} = omp.map.info {{.*}} map_clauses(implicit, tofrom) {{.*}} mapper(@{{.*dtype_omp_default_mapper}}) {{.*}} {name = "a"}
347+ program use_module_default_mapper
348+ use default_mapper_mod
349+ implicit none
350+ type (dtype) :: a
351+ ! $omp target map(a)
352+ a% x = 7
353+ ! $omp end target
354+
355+ ! $omp target map(mapper(default) : a)
356+ a% x = 8
357+ ! $omp end target
358+
359+ ! $omp target
360+ a% x = 8
361+ ! $omp end target
362+ end program use_module_default_mapper
0 commit comments