1 // RUN: %libomptarget-compilexx-run-and-check-aarch64-unknown-linux-gnu
2 // RUN: %libomptarget-compilexx-run-and-check-powerpc64-ibm-linux-gnu
3 // RUN: %libomptarget-compilexx-run-and-check-powerpc64le-ibm-linux-gnu
4 // RUN: %libomptarget-compilexx-run-and-check-x86_64-pc-linux-gnu
5 // RUN: %libomptarget-compilexx-run-and-check-nvptx64-nvidia-cuda
6
7 #include <cstdio>
8 #include <cstdlib>
9 #include <vector>
10 #include <cinttypes>
11
12 // Data structure definitions copied from OpenMP RTL.
13 struct MapComponentInfoTy {
14 void *Base;
15 void *Begin;
16 int64_t Size;
17 int64_t Type;
18 MapComponentInfoTy() = default;
MapComponentInfoTyMapComponentInfoTy19 MapComponentInfoTy(void *Base, void *Begin, int64_t Size, int64_t Type)
20 : Base(Base), Begin(Begin), Size(Size), Type(Type) {}
21 };
22
23 struct MapperComponentsTy {
24 std::vector<MapComponentInfoTy> Components;
25 };
26
27 // OpenMP RTL interfaces
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 int64_t __tgt_mapper_num_components(void *rt_mapper_handle);
32 void __tgt_push_mapper_component(void *rt_mapper_handle, void *base,
33 void *begin, int64_t size, int64_t type);
34 #ifdef __cplusplus
35 }
36 #endif
37
main(int argc,char * argv[])38 int main(int argc, char *argv[]) {
39 MapperComponentsTy MC;
40 void *base, *begin;
41 int64_t size, type;
42 // Push 2 elements into MC.
43 __tgt_push_mapper_component((void *)&MC, base, begin, size, type);
44 __tgt_push_mapper_component((void *)&MC, base, begin, size, type);
45 int64_t num = __tgt_mapper_num_components((void *)&MC);
46 // CHECK: num=2
47 printf("num=%" PRId64 "\n", num);
48 return 0;
49 }
50