This patch changes the special-case handling of visibility when compiling for an OpenMP target offloading device. This was orignally added as a precaution against the bug encountered in PR41826 when symbols in the device were being preempted by shared library symbols. This should instead be done by making the visibility protected by default. With protected visibility we are asserting that the symbols on the device will never be preempted or preempt another symbol pending a shared library load. Reviewed By: JonChesterfield Differential Revision: https://reviews.llvm.org/D117806
14 lines
717 B
C++
14 lines
717 B
C++
// RUN: %clang_cc1 -debug-info-kind=limited -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fvisibility protected -o - | FileCheck %s
|
|
// RUN: %clang_cc1 -debug-info-kind=limited -verify -fopenmp -x c++ -triple nvptx-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fvisibility protected -o - | FileCheck %s
|
|
// expected-no-diagnostics
|
|
|
|
#pragma omp declare target
|
|
|
|
void foo() {}
|
|
|
|
#pragma omp end declare target
|
|
|
|
// CHECK: Function Attrs: {{.*}}convergent{{.*}}
|
|
// CHECK: define protected void @_Z3foov() [[ATTRIBUTE_NUMBER:#[0-9]+]]
|
|
// CHECK: attributes [[ATTRIBUTE_NUMBER]] = { {{.*}}convergent{{.*}} }
|