/* Copyright 2026 Free Software Foundation, Inc.
Copyright (C) 2026 Advanced Micro Devices, Inc. All rights reserved.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
/* Basic OpenMP "target" offload program shared by the breakpoint,
data-sharing (locals) and single-stepping checks in
omp-target-basic.exp. It offloads a single '#pragma omp target'
region with a mapped input array (to:), a mapped output array
(tofrom:) and a firstprivate scalar, plus a few distinguishable
statements at the top of the region for single-stepping. */
#include
#define N 8
int
main (void)
{
int in_arr[N];
int out_arr[N];
for (int i = 0; i < N; i++)
{
in_arr[i] = 100 + i;
out_arr[i] = 0;
}
int firstpriv_val = 42;
#pragma omp target \
map(to:in_arr[0:N]) map(tofrom:out_arr[0:N]) \
firstprivate(firstpriv_val)
{
int priv_val = 7; /* first-target-line */
int step_two = priv_val + 1;
int step_three = step_two + 1;
out_arr[0] = (in_arr[0] + priv_val + firstpriv_val
+ step_two + step_three);
}
printf ("out[0]=%d\n", out_arr[0]);
return 0;
}