Files
clang-p2996/openmp/libomptarget/test/mapping/low_alignment.c
Johannes Doerfert 434992c96e [OpenMP][FIX] Do not overalign mapped structures
While we potentially need to align partially mapped structs more than
the first member, we do not need to align past the struct itself. This
prevents us from moving the base pointer past the struct beginning too.

See https://reviews.llvm.org/D142508 for a discussion.

Reviewed By: pavelkopyl, grokos, jhuber6

Differential Revision: https://reviews.llvm.org/D142586
2023-02-03 07:57:16 -06:00

50 lines
747 B
C

// RUN: %libomptarget-compilexx-run-and-check-generic
#include <omp.h>
#include <stdio.h>
int main() {
struct S {
int i;
int j;
} s;
s.i = 20;
s.j = 30;
#pragma omp target data map(tofrom : s)
{
#pragma omp target map(from : s.i, s.j)
{
s.i = 21;
s.j = 31;
}
}
if (s.i == 21 && s.j == 31)
printf("PASS 1\n");
// CHECK: PASS 1
struct T {
int a;
int b;
int c;
int d;
int i;
int j;
} t;
t.a = 10;
t.i = 20;
t.j = 30;
#pragma omp target data map(from : t.i, t.j)
{
#pragma omp target map(from : t.a)
{
t.a = 11;
t.i = 21;
t.j = 31;
}
}
if (t.a == 11 && t.i == 21 && t.j == 31)
printf("PASS 2\n");
// CHECK: PASS 2
return 0;
}