|
| 1 | +// RUN: %clang_cc1 -verify -fopenmp -Wno-openmp-mapping -x c++ -triple x86_64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp-cuda-mode -emit-llvm-bc %s -o %t-ppc-host.bc -fopenmp-version=52 |
| 2 | +// RUN: %clang_cc1 -verify -fopenmp -Wno-openmp-mapping -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp-cuda-mode -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - -debug-info-kind=limited -fopenmp-version=52 | FileCheck %s |
| 3 | +// expected-no-diagnostics |
| 4 | + |
| 5 | + |
| 6 | +// CHECK-DAG: $_ZN4Base5BaseAEi = comdat any |
| 7 | +// CHECK-DAG: $_ZN7Derived5BaseAEi = comdat any |
| 8 | +// CHECK-DAG: $_ZN7Derived8DerivedBEv = comdat any |
| 9 | +// CHECK-DAG: $_ZN4BaseD1Ev = comdat any |
| 10 | +// CHECK-DAG: $_ZN4BaseD0Ev = comdat any |
| 11 | +// CHECK-DAG: $_ZN7DerivedD1Ev = comdat any |
| 12 | +// CHECK-DAG: $_ZN7DerivedD0Ev = comdat any |
| 13 | +// CHECK-DAG: $_ZN4BaseD2Ev = comdat any |
| 14 | +// CHECK-DAG: $_ZN7DerivedD2Ev = comdat any |
| 15 | +// CHECK-DAG: $_ZTV4Base = comdat any |
| 16 | +// CHECK-DAG: $_ZTV7Derived = comdat any |
| 17 | +class Base { |
| 18 | +public: |
| 19 | + |
| 20 | + virtual ~Base() = default; |
| 21 | + |
| 22 | + virtual void BaseA(int a) { } |
| 23 | +}; |
| 24 | + |
| 25 | +class Derived : public Base { |
| 26 | +public: |
| 27 | + |
| 28 | + ~Derived() override = default; |
| 29 | + |
| 30 | + void BaseA(int a) override { x = a; } |
| 31 | + |
| 32 | + virtual void DerivedB() { } |
| 33 | +private: |
| 34 | + int x; |
| 35 | +}; |
| 36 | + |
| 37 | +struct VirtualContainer { |
| 38 | + Base baseObj; |
| 39 | + Derived derivedObj; |
| 40 | + Base *basePtr; |
| 41 | +}; |
| 42 | + |
| 43 | +int main() { |
| 44 | + VirtualContainer container; |
| 45 | + container.basePtr = &container.derivedObj; |
| 46 | + int a = 50; |
| 47 | +#pragma omp target map(container.baseObj, container.derivedObj, \ |
| 48 | + container.basePtr[ : 1]) |
| 49 | + { |
| 50 | + container.baseObj.BaseA(a); |
| 51 | + container.derivedObj.BaseA(a); |
| 52 | + container.derivedObj.DerivedB(); |
| 53 | + container.basePtr->BaseA(a); |
| 54 | + } |
| 55 | + return 0; |
| 56 | +} |
0 commit comments