https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105015
Bug ID: 105015
Summary: [OpenMP] wrong results with target link with multiple
translation units
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Keywords: missed-optimization, openmp
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: burnus at gcc dot gnu.org
CC: jakub at gcc dot gnu.org
Target Milestone: ---
Contrary to PR100059 (nvptx-tools bug), this issue occurs already on the host.
Based on
https://github.com/clang-ykt/omptests/tree/master/t-same-name-definitions but
not exposed there.
Regarding the testcase (-foffload without offloading configured):
* Calling 'one_get_inc3_link_a ()' will return 123 and then increment the
value.
* Calling 'two_get_inc5_link_a ()' returns 126 and within the target region,
the value is 131 after the increment.
* However, the global variable (direct access with host fallback or via
one_get_inc3_link_a()) will still return 126.
Using Clang 11 (also no offloading), the global value is changed to 131 as
expected.
-------- File 1 ------------
int decl_a_link = 123;
#pragma omp declare target link(decl_a_link)
int
one_get_inc3_link_a ()
{
int res;
#pragma omp target map(from: res)
{
res = decl_a_link;
decl_a_link += 3;
}
return res;
}
-------- File 2 ------------
extern int decl_a_link;
#pragma omp declare target link(decl_a_link)
int
two_get_inc5_link_a ()
{
int res;
#pragma omp target map(from: res)
{
res = decl_a_link;
decl_a_link += 5;
}
return res;
}