diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2018-08-30 18:56:11 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2018-08-30 18:56:11 +0000 |
commit | bd8ff9bd7041106c00ac24e90dd788679b19415d (patch) | |
tree | 4e7a470af5c65534d771d30f23b5eeb6139bfcff /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 73b38668ce738f182a441d8e77be20be9ba7898a (diff) | |
download | bcm5719-llvm-bd8ff9bd7041106c00ac24e90dd788679b19415d.tar.gz bcm5719-llvm-bd8ff9bd7041106c00ac24e90dd788679b19415d.zip |
[OPENMP] Fix PR38710: static functions are not emitted as implicitly
'declare target'.
All the functions, referenced in implicit|explicit target regions must
be emitted during code emission for the device.
llvm-svn: 341093
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index c5cac6a3982..51869ef7cbe 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -2579,17 +2579,16 @@ llvm::Constant *CodeGenModule::GetOrCreateLLVMFunction( if (getLangOpts().OpenMPIsDevice && OpenMPRuntime && !OpenMPRuntime->markAsGlobalTarget(GD) && FD->isDefined() && !DontDefer && !IsForDefinition) { - if (const FunctionDecl *FDDef = FD->getDefinition()) - if (getContext().DeclMustBeEmitted(FDDef)) { - GlobalDecl GDDef; - if (const auto *CD = dyn_cast<CXXConstructorDecl>(FDDef)) - GDDef = GlobalDecl(CD, GD.getCtorType()); - else if (const auto *DD = dyn_cast<CXXDestructorDecl>(FDDef)) - GDDef = GlobalDecl(DD, GD.getDtorType()); - else - GDDef = GlobalDecl(FDDef); - addDeferredDeclToEmit(GDDef); - } + if (const FunctionDecl *FDDef = FD->getDefinition()) { + GlobalDecl GDDef; + if (const auto *CD = dyn_cast<CXXConstructorDecl>(FDDef)) + GDDef = GlobalDecl(CD, GD.getCtorType()); + else if (const auto *DD = dyn_cast<CXXDestructorDecl>(FDDef)) + GDDef = GlobalDecl(DD, GD.getDtorType()); + else + GDDef = GlobalDecl(FDDef); + EmitGlobal(GDDef); + } } if (FD->isMultiVersion()) { |