[llvm] [OpenMP] Add tests for mapping of chained 'containing' structs (PR #156703)
Julian Brown via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 4 09:17:02 PDT 2025
================
@@ -0,0 +1,58 @@
+// RUN: %libomptarget-compilexx-and-run-generic
+// XFAIL: *
+
+#include <cstdlib>
+#include <cstdio>
+#include <cassert>
+
+struct S {
+ int a;
+ int b;
+ int c;
+};
+
+struct T {
+ S *s0;
+ S *s1;
+ S *s2;
+};
+
+int main() {
+ T *v = (T *) malloc (sizeof(T));
+ v->s0 = (S *) malloc (sizeof(S));
+ v->s1 = (S *) malloc (sizeof(S));
+ v->s2 = (S *) malloc (sizeof(S));
+ v->s0->a = 10;
+ v->s0->b = 10;
+ v->s0->c = 10;
+ v->s1->a = 20;
+ v->s1->b = 20;
+ v->s1->c = 20;
+ v->s2->a = 30;
+ v->s2->b = 30;
+ v->s2->c = 30;
+
+#pragma omp target map(to: v[:1]) map(tofrom: v->s1->b, v->s1->c, v->s2->b)
+ {
+ v->s1->b += 3;
+ v->s1->c += 5;
+ v->s2->b += 7;
+ }
+
+ assert (v->s0->a == 10);
----------------
jtb20 wrote:
I've done this, after puzzling for a while how to deal with different output for (effectively runtime-dependent) unified vs. separate address spaces for mapping... I couldn't find anything that does that in the existing offload/mapping tests, though I may have missed something. Anyway, this new version seems to work.
https://github.com/llvm/llvm-project/pull/156703
More information about the llvm-commits
mailing list