Author: abataev Date: Wed Nov 28 11:00:07 2018 New Revision: 347793 URL: http://llvm.org/viewvc/llvm-project?rev=347793&view=rev Log: [OPENMP]Fix emission of the target regions in virtual functions.
Fixed emission of the target regions found in the virtual functions. Previously we may end up with the situation when those regions could be skipped. Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp cfe/trunk/test/OpenMP/declare_target_codegen.cpp Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=347793&r1=347792&r2=347793&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original) +++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Wed Nov 28 11:00:07 2018 @@ -14968,8 +14968,11 @@ void Sema::MarkVTableUsed(SourceLocation // region. if (LangOpts.OpenMP && LangOpts.OpenMPIsDevice && !isInOpenMPDeclareTargetContext() && - !isInOpenMPTargetExecutionDirective()) + !isInOpenMPTargetExecutionDirective()) { + if (!DefinitionRequired) + MarkVirtualMembersReferenced(Loc, Class); return; + } // Try to insert this class into the map. LoadExternalVTableUses(); Modified: cfe/trunk/test/OpenMP/declare_target_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/declare_target_codegen.cpp?rev=347793&r1=347792&r2=347793&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/declare_target_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/declare_target_codegen.cpp Wed Nov 28 11:00:07 2018 @@ -180,6 +180,30 @@ void B<T>::virtual_foo() { {} } +struct A { + virtual void emitted() {} +}; + +template <typename T> +struct C : public A { + virtual void emitted(); +}; + +template <typename T> +void C<T>::emitted() { +#pragma omp target + {} +} + +int main() { + A *X = new C<int>(); + X->emitted(); + return 0; +} + +// CHECK-DAG: define {{.*}}void @__omp_offloading_{{.*}}virtual_foo{{.*}}_l[[@LINE-25]]() +// CHECK-DAG: define {{.*}}void @__omp_offloading_{{.*}}emitted{{.*}}_l[[@LINE-11]]() + // CHECK-DAG: declare extern_weak signext i32 @__create() // CHECK-NOT: define {{.*}}{{baz1|baz4|maini1|Base|virtual_}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits