diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2018-03-01 00:35:47 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2018-03-01 00:35:47 +0000 |
| commit | b735004615be10ffa60dd3d4b0a060f0bed2f8de (patch) | |
| tree | d6852673e5d3a3fd1725c62a640e6b5d63f5d458 /clang/lib/CodeGen/CGObjCGNU.cpp | |
| parent | 2b94972eb981090e0289ba56edd22b311e9fd6f7 (diff) | |
| download | bcm5719-llvm-b735004615be10ffa60dd3d4b0a060f0bed2f8de.tar.gz bcm5719-llvm-b735004615be10ffa60dd3d4b0a060f0bed2f8de.zip | |
Start setting dllimport/dllexport in setGVProperties.
This is the next step in setting dso_local for COFF.
The patches changes setGVProperties to first set dllimport/dllexport
and changes a few cases that were setting dllimport/dllexport
manually. With this a few more GVs are marked dso_local.
llvm-svn: 326397
Diffstat (limited to 'clang/lib/CodeGen/CGObjCGNU.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CGObjCGNU.cpp | 40 |
1 files changed, 7 insertions, 33 deletions
diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp index c8b8be7f455..57110467f61 100644 --- a/clang/lib/CodeGen/CGObjCGNU.cpp +++ b/clang/lib/CodeGen/CGObjCGNU.cpp @@ -1035,16 +1035,8 @@ llvm::Value *CGObjCGNU::GetClass(CodeGenFunction &CGF, const ObjCInterfaceDecl *OID) { auto *Value = GetClassNamed(CGF, OID->getNameAsString(), OID->isWeakImported()); - if (CGM.getTriple().isOSBinFormatCOFF()) { - if (auto *ClassSymbol = dyn_cast<llvm::GlobalVariable>(Value)) { - auto DLLStorage = llvm::GlobalValue::DefaultStorageClass; - if (OID->hasAttr<DLLExportAttr>()) - DLLStorage = llvm::GlobalValue::DLLExportStorageClass; - else if (OID->hasAttr<DLLImportAttr>()) - DLLStorage = llvm::GlobalValue::DLLImportStorageClass; - ClassSymbol->setDLLStorageClass(DLLStorage); - } - } + if (auto *ClassSymbol = dyn_cast<llvm::GlobalVariable>(Value)) + CGM.setGVProperties(ClassSymbol, OID); return Value; } @@ -1061,13 +1053,7 @@ llvm::Value *CGObjCGNU::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) { if ((VD = dyn_cast<VarDecl>(Result))) break; - auto DLLStorage = llvm::GlobalValue::DefaultStorageClass; - if (!VD || VD->hasAttr<DLLImportAttr>()) - DLLStorage = llvm::GlobalValue::DLLImportStorageClass; - else if (VD->hasAttr<DLLExportAttr>()) - DLLStorage = llvm::GlobalValue::DLLExportStorageClass; - - ClassSymbol->setDLLStorageClass(DLLStorage); + CGM.setGVProperties(ClassSymbol, VD); } } return Value; @@ -2336,14 +2322,8 @@ void CGObjCGNU::GenerateClass(const ObjCImplementationDecl *OID) { NULLPtr, NULLPtr, 0x12L, ClassName.c_str(), nullptr, Zeros[0], GenerateIvarList(empty, empty, empty), ClassMethodList, NULLPtr, NULLPtr, NULLPtr, ZeroPtr, ZeroPtr, true); - if (CGM.getTriple().isOSBinFormatCOFF()) { - auto Storage = llvm::GlobalValue::DefaultStorageClass; - if (OID->getClassInterface()->hasAttr<DLLImportAttr>()) - Storage = llvm::GlobalValue::DLLImportStorageClass; - else if (OID->getClassInterface()->hasAttr<DLLExportAttr>()) - Storage = llvm::GlobalValue::DLLExportStorageClass; - cast<llvm::GlobalValue>(MetaClassStruct)->setDLLStorageClass(Storage); - } + CGM.setGVProperties(cast<llvm::GlobalValue>(MetaClassStruct), + OID->getClassInterface()); // Generate the class structure llvm::Constant *ClassStruct = GenerateClassStructure( @@ -2351,14 +2331,8 @@ void CGObjCGNU::GenerateClass(const ObjCImplementationDecl *OID) { llvm::ConstantInt::get(LongTy, instanceSize), IvarList, MethodList, GenerateProtocolList(Protocols), IvarOffsetArray, Properties, StrongIvarBitmap, WeakIvarBitmap); - if (CGM.getTriple().isOSBinFormatCOFF()) { - auto Storage = llvm::GlobalValue::DefaultStorageClass; - if (OID->getClassInterface()->hasAttr<DLLImportAttr>()) - Storage = llvm::GlobalValue::DLLImportStorageClass; - else if (OID->getClassInterface()->hasAttr<DLLExportAttr>()) - Storage = llvm::GlobalValue::DLLExportStorageClass; - cast<llvm::GlobalValue>(ClassStruct)->setDLLStorageClass(Storage); - } + CGM.setGVProperties(cast<llvm::GlobalValue>(ClassStruct), + OID->getClassInterface()); // Resolve the class aliases, if they exist. if (ClassPtrAlias) { |

