Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit 0aefc16

Browse files
committed
CodeGen: honour dllstorage on ObjC types
Add support for ObjC types to respect the DLLImport/DLLExport storage annotations. This only effects COFF output. This would allow usage with clang/C2, but not with clang/LLVM due to hard coded section names. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@275737 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 02c3231 commit 0aefc16

File tree

3 files changed

+322
-37
lines changed

3 files changed

+322
-37
lines changed

Diff for: lib/CodeGen/CGObjCGNU.cpp

+57-3
Original file line numberDiff line numberDiff line change
@@ -1073,11 +1073,44 @@ llvm::Value *CGObjCGNU::GetClassNamed(CodeGenFunction &CGF,
10731073
// techniques can modify the name -> class mapping.
10741074
llvm::Value *CGObjCGNU::GetClass(CodeGenFunction &CGF,
10751075
const ObjCInterfaceDecl *OID) {
1076-
return GetClassNamed(CGF, OID->getNameAsString(), OID->isWeakImported());
1076+
auto *Value =
1077+
GetClassNamed(CGF, OID->getNameAsString(), OID->isWeakImported());
1078+
if (CGM.getTriple().isOSBinFormatCOFF()) {
1079+
if (auto *ClassSymbol = dyn_cast<llvm::GlobalVariable>(Value)) {
1080+
auto DLLStorage = llvm::GlobalValue::DefaultStorageClass;
1081+
if (OID->hasAttr<DLLExportAttr>())
1082+
DLLStorage = llvm::GlobalValue::DLLExportStorageClass;
1083+
else if (OID->hasAttr<DLLImportAttr>())
1084+
DLLStorage = llvm::GlobalValue::DLLImportStorageClass;
1085+
ClassSymbol->setDLLStorageClass(DLLStorage);
1086+
}
1087+
}
1088+
return Value;
10771089
}
10781090

10791091
llvm::Value *CGObjCGNU::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) {
1080-
return GetClassNamed(CGF, "NSAutoreleasePool", false);
1092+
auto *Value = GetClassNamed(CGF, "NSAutoreleasePool", false);
1093+
if (CGM.getTriple().isOSBinFormatCOFF()) {
1094+
if (auto *ClassSymbol = dyn_cast<llvm::GlobalVariable>(Value)) {
1095+
IdentifierInfo &II = CGF.CGM.getContext().Idents.get("NSAutoreleasePool");
1096+
TranslationUnitDecl *TUDecl = CGM.getContext().getTranslationUnitDecl();
1097+
DeclContext *DC = TranslationUnitDecl::castToDeclContext(TUDecl);
1098+
1099+
const VarDecl *VD = nullptr;
1100+
for (const auto &Result : DC->lookup(&II))
1101+
if ((VD = dyn_cast<VarDecl>(Result)))
1102+
break;
1103+
1104+
auto DLLStorage = llvm::GlobalValue::DefaultStorageClass;
1105+
if (!VD || VD->hasAttr<DLLImportAttr>())
1106+
DLLStorage = llvm::GlobalValue::DLLImportStorageClass;
1107+
else if (VD->hasAttr<DLLExportAttr>())
1108+
DLLStorage = llvm::GlobalValue::DLLExportStorageClass;
1109+
1110+
ClassSymbol->setDLLStorageClass(DLLStorage);
1111+
}
1112+
}
1113+
return Value;
10811114
}
10821115

10831116
llvm::Value *CGObjCGNU::GetSelector(CodeGenFunction &CGF, Selector Sel,
@@ -2354,13 +2387,29 @@ void CGObjCGNU::GenerateClass(const ObjCImplementationDecl *OID) {
23542387
NULLPtr, NULLPtr, 0x12L, ClassName.c_str(), nullptr, Zeros[0],
23552388
GenerateIvarList(empty, empty, empty), ClassMethodList, NULLPtr, NULLPtr,
23562389
NULLPtr, ZeroPtr, ZeroPtr, true);
2390+
if (CGM.getTriple().isOSBinFormatCOFF()) {
2391+
auto Storage = llvm::GlobalValue::DefaultStorageClass;
2392+
if (OID->getClassInterface()->hasAttr<DLLImportAttr>())
2393+
Storage = llvm::GlobalValue::DLLImportStorageClass;
2394+
else if (OID->getClassInterface()->hasAttr<DLLExportAttr>())
2395+
Storage = llvm::GlobalValue::DLLExportStorageClass;
2396+
cast<llvm::GlobalValue>(MetaClassStruct)->setDLLStorageClass(Storage);
2397+
}
23572398

23582399
// Generate the class structure
23592400
llvm::Constant *ClassStruct = GenerateClassStructure(
23602401
MetaClassStruct, SuperClass, 0x11L, ClassName.c_str(), nullptr,
23612402
llvm::ConstantInt::get(LongTy, instanceSize), IvarList, MethodList,
23622403
GenerateProtocolList(Protocols), IvarOffsetArray, Properties,
23632404
StrongIvarBitmap, WeakIvarBitmap);
2405+
if (CGM.getTriple().isOSBinFormatCOFF()) {
2406+
auto Storage = llvm::GlobalValue::DefaultStorageClass;
2407+
if (OID->getClassInterface()->hasAttr<DLLImportAttr>())
2408+
Storage = llvm::GlobalValue::DLLImportStorageClass;
2409+
else if (OID->getClassInterface()->hasAttr<DLLExportAttr>())
2410+
Storage = llvm::GlobalValue::DLLExportStorageClass;
2411+
cast<llvm::GlobalValue>(ClassStruct)->setDLLStorageClass(Storage);
2412+
}
23642413

23652414
// Resolve the class aliases, if they exist.
23662415
if (ClassPtrAlias) {
@@ -2854,7 +2903,12 @@ llvm::Value *CGObjCGNU::EmitIvarOffset(CodeGenFunction &CGF,
28542903
const ObjCIvarDecl *Ivar) {
28552904
if (CGM.getLangOpts().ObjCRuntime.isNonFragile()) {
28562905
Interface = FindIvarInterface(CGM.getContext(), Interface, Ivar);
2857-
if (RuntimeVersion < 10)
2906+
2907+
// The MSVC linker cannot have a single global defined as LinkOnceAnyLinkage
2908+
// and ExternalLinkage, so create a reference to the ivar global and rely on
2909+
// the definition being created as part of GenerateClass.
2910+
if (RuntimeVersion < 10 ||
2911+
CGF.CGM.getTarget().getTriple().isKnownWindowsMSVCEnvironment())
28582912
return CGF.Builder.CreateZExtOrBitCast(
28592913
CGF.Builder.CreateDefaultAlignedLoad(CGF.Builder.CreateAlignedLoad(
28602914
ObjCIvarOffsetVariable(Interface, Ivar),

Diff for: lib/CodeGen/CGObjCMac.cpp

+114-34
Original file line numberDiff line numberDiff line change
@@ -5951,8 +5951,9 @@ llvm::GlobalVariable *CGObjCNonFragileABIMac::BuildClassMetaData(
59515951
GV->setSection("__DATA, __objc_data");
59525952
GV->setAlignment(
59535953
CGM.getDataLayout().getABITypeAlignment(ObjCTypes.ClassnfABITy));
5954-
if (HiddenVisibility)
5955-
GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
5954+
if (!CGM.getTriple().isOSBinFormatCOFF())
5955+
if (HiddenVisibility)
5956+
GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
59565957
return GV;
59575958
}
59585959

@@ -5977,18 +5978,42 @@ void CGObjCNonFragileABIMac::GetClassSizeInfo(const ObjCImplementationDecl *OID,
59775978
InstanceStart = RL.getFieldOffset(0) / CGM.getContext().getCharWidth();
59785979
}
59795980

5981+
static llvm::GlobalValue::DLLStorageClassTypes getStorage(CodeGenModule &CGM,
5982+
StringRef Name) {
5983+
IdentifierInfo &II = CGM.getContext().Idents.get(Name);
5984+
TranslationUnitDecl *TUDecl = CGM.getContext().getTranslationUnitDecl();
5985+
DeclContext *DC = TranslationUnitDecl::castToDeclContext(TUDecl);
5986+
5987+
const VarDecl *VD = nullptr;
5988+
for (const auto &Result : DC->lookup(&II))
5989+
if ((VD = dyn_cast<VarDecl>(Result)))
5990+
break;
5991+
5992+
if (!VD)
5993+
return llvm::GlobalValue::DLLImportStorageClass;
5994+
if (VD->hasAttr<DLLExportAttr>())
5995+
return llvm::GlobalValue::DLLExportStorageClass;
5996+
if (VD->hasAttr<DLLImportAttr>())
5997+
return llvm::GlobalValue::DLLImportStorageClass;
5998+
return llvm::GlobalValue::DefaultStorageClass;
5999+
}
6000+
59806001
void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
59816002
if (!ObjCEmptyCacheVar) {
5982-
ObjCEmptyCacheVar = new llvm::GlobalVariable(
5983-
CGM.getModule(), ObjCTypes.CacheTy, false,
5984-
llvm::GlobalValue::ExternalLinkage, nullptr, "_objc_empty_cache");
6003+
ObjCEmptyCacheVar =
6004+
new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.CacheTy, false,
6005+
llvm::GlobalValue::ExternalLinkage, nullptr,
6006+
"_objc_empty_cache");
6007+
if (CGM.getTriple().isOSBinFormatCOFF())
6008+
ObjCEmptyCacheVar->setDLLStorageClass(getStorage(CGM, "_objc_empty_cache"));
59856009

59866010
// Only OS X with deployment version <10.9 use the empty vtable symbol
59876011
const llvm::Triple &Triple = CGM.getTarget().getTriple();
59886012
if (Triple.isMacOSX() && Triple.isMacOSXVersionLT(10, 9))
5989-
ObjCEmptyVtableVar = new llvm::GlobalVariable(
5990-
CGM.getModule(), ObjCTypes.ImpnfABITy, false,
5991-
llvm::GlobalValue::ExternalLinkage, nullptr, "_objc_empty_vtable");
6013+
ObjCEmptyVtableVar =
6014+
new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ImpnfABITy, false,
6015+
llvm::GlobalValue::ExternalLinkage, nullptr,
6016+
"_objc_empty_vtable");
59926017
}
59936018

59946019
// FIXME: Is this correct (that meta class size is never computed)?
@@ -6004,7 +6029,9 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
60046029
assert(CI && "CGObjCNonFragileABIMac::GenerateClass - class is 0");
60056030

60066031
// Build the flags for the metaclass.
6007-
bool classIsHidden = CI->getVisibility() == HiddenVisibility;
6032+
bool classIsHidden = (CGM.getTriple().isOSBinFormatCOFF())
6033+
? !CI->hasAttr<DLLExportAttr>()
6034+
: CI->getVisibility() == HiddenVisibility;
60086035
if (classIsHidden)
60096036
flags |= NonFragileABI_Class_Hidden;
60106037

@@ -6013,7 +6040,7 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
60136040
if (ID->hasNonZeroConstructors() || ID->hasDestructors()) {
60146041
flags |= NonFragileABI_Class_HasCXXStructors;
60156042
if (!ID->hasNonZeroConstructors())
6016-
flags |= NonFragileABI_Class_HasCXXDestructorOnly;
6043+
flags |= NonFragileABI_Class_HasCXXDestructorOnly;
60176044
}
60186045

60196046
if (!CI->getSuperClass()) {
@@ -6022,9 +6049,15 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
60226049

60236050
SuperClassGV = GetClassGlobal((getClassSymbolPrefix() + ClassName).str(),
60246051
CI->isWeakImported());
6052+
if (CGM.getTriple().isOSBinFormatCOFF())
6053+
if (CI->hasAttr<DLLImportAttr>())
6054+
SuperClassGV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
60256055

60266056
IsAGV = GetClassGlobal((getMetaclassSymbolPrefix() + ClassName).str(),
60276057
CI->isWeakImported());
6058+
if (CGM.getTriple().isOSBinFormatCOFF())
6059+
if (CI->hasAttr<DLLImportAttr>())
6060+
IsAGV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
60286061
} else {
60296062
// Has a root. Current class is not a root.
60306063
const ObjCInterfaceDecl *Root = ID->getClassInterface();
@@ -6037,11 +6070,17 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
60376070

60386071
IsAGV = GetClassGlobal((getMetaclassSymbolPrefix() + RootClassName).str(),
60396072
Root->isWeakImported());
6073+
if (CGM.getTriple().isOSBinFormatCOFF())
6074+
if (Root->hasAttr<DLLImportAttr>())
6075+
IsAGV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
60406076

60416077
// work on super class metadata symbol.
60426078
SuperClassGV =
60436079
GetClassGlobal((getMetaclassSymbolPrefix() + SuperClassName).str(),
60446080
Super->isWeakImported());
6081+
if (CGM.getTriple().isOSBinFormatCOFF())
6082+
if (Super->hasAttr<DLLImportAttr>())
6083+
SuperClassGV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
60456084
}
60466085

60476086
llvm::GlobalVariable *CLASS_RO_GV =
@@ -6051,6 +6090,9 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
60516090
BuildClassMetaData((getMetaclassSymbolPrefix() + ClassName).str(), IsAGV,
60526091
SuperClassGV, CLASS_RO_GV, classIsHidden,
60536092
CI->isWeakImported());
6093+
if (CGM.getTriple().isOSBinFormatCOFF())
6094+
if (CI->hasAttr<DLLExportAttr>())
6095+
MetaTClass->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
60546096
DefinedMetaClasses.push_back(MetaTClass);
60556097

60566098
// Metadata for the class
@@ -6085,6 +6127,9 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
60856127
SuperClassGV =
60866128
GetClassGlobal((getClassSymbolPrefix() + SuperClassName).str(),
60876129
Super->isWeakImported());
6130+
if (CGM.getTriple().isOSBinFormatCOFF())
6131+
if (Super->hasAttr<DLLImportAttr>())
6132+
SuperClassGV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
60886133
}
60896134

60906135
GetClassSizeInfo(ID, InstanceStart, InstanceSize);
@@ -6095,6 +6140,9 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
60956140
BuildClassMetaData((getClassSymbolPrefix() + ClassName).str(), MetaTClass,
60966141
SuperClassGV, CLASS_RO_GV, classIsHidden,
60976142
CI->isWeakImported());
6143+
if (CGM.getTriple().isOSBinFormatCOFF())
6144+
if (CI->hasAttr<DLLExportAttr>())
6145+
ClassMD->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
60986146
DefinedClasses.push_back(ClassMD);
60996147
ImplementedClasses.push_back(CI);
61006148

@@ -6312,18 +6360,28 @@ CGObjCNonFragileABIMac::EmitMethodList(Twine Name, StringRef Section,
63126360
llvm::GlobalVariable *
63136361
CGObjCNonFragileABIMac::ObjCIvarOffsetVariable(const ObjCInterfaceDecl *ID,
63146362
const ObjCIvarDecl *Ivar) {
6315-
63166363
const ObjCInterfaceDecl *Container = Ivar->getContainingInterface();
63176364
llvm::SmallString<64> Name("OBJC_IVAR_$_");
63186365
Name += Container->getObjCRuntimeNameAsString();
63196366
Name += ".";
63206367
Name += Ivar->getName();
6321-
llvm::GlobalVariable *IvarOffsetGV =
6322-
CGM.getModule().getGlobalVariable(Name);
6323-
if (!IvarOffsetGV)
6324-
IvarOffsetGV = new llvm::GlobalVariable(
6325-
CGM.getModule(), ObjCTypes.IvarOffsetVarTy, false,
6326-
llvm::GlobalValue::ExternalLinkage, nullptr, Name.str());
6368+
llvm::GlobalVariable *IvarOffsetGV = CGM.getModule().getGlobalVariable(Name);
6369+
if (!IvarOffsetGV) {
6370+
IvarOffsetGV =
6371+
new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.IvarOffsetVarTy,
6372+
false, llvm::GlobalValue::ExternalLinkage,
6373+
nullptr, Name.str());
6374+
if (CGM.getTriple().isOSBinFormatCOFF()) {
6375+
bool IsPrivateOrPackage =
6376+
Ivar->getAccessControl() == ObjCIvarDecl::Private ||
6377+
Ivar->getAccessControl() == ObjCIvarDecl::Package;
6378+
6379+
if (ID->hasAttr<DLLExportAttr>() && !IsPrivateOrPackage)
6380+
IvarOffsetGV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
6381+
else if (ID->hasAttr<DLLImportAttr>())
6382+
IvarOffsetGV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
6383+
}
6384+
}
63276385
return IvarOffsetGV;
63286386
}
63296387

@@ -6337,14 +6395,17 @@ CGObjCNonFragileABIMac::EmitIvarOffsetVar(const ObjCInterfaceDecl *ID,
63376395
IvarOffsetGV->setAlignment(
63386396
CGM.getDataLayout().getABITypeAlignment(ObjCTypes.IvarOffsetVarTy));
63396397

6340-
// FIXME: This matches gcc, but shouldn't the visibility be set on the use as
6341-
// well (i.e., in ObjCIvarOffsetVariable).
6342-
if (Ivar->getAccessControl() == ObjCIvarDecl::Private ||
6343-
Ivar->getAccessControl() == ObjCIvarDecl::Package ||
6344-
ID->getVisibility() == HiddenVisibility)
6345-
IvarOffsetGV->setVisibility(llvm::GlobalValue::HiddenVisibility);
6346-
else
6347-
IvarOffsetGV->setVisibility(llvm::GlobalValue::DefaultVisibility);
6398+
if (!CGM.getTriple().isOSBinFormatCOFF()) {
6399+
// FIXME: This matches gcc, but shouldn't the visibility be set on the use
6400+
// as well (i.e., in ObjCIvarOffsetVariable).
6401+
if (Ivar->getAccessControl() == ObjCIvarDecl::Private ||
6402+
Ivar->getAccessControl() == ObjCIvarDecl::Package ||
6403+
ID->getVisibility() == HiddenVisibility)
6404+
IvarOffsetGV->setVisibility(llvm::GlobalValue::HiddenVisibility);
6405+
else
6406+
IvarOffsetGV->setVisibility(llvm::GlobalValue::DefaultVisibility);
6407+
}
6408+
63486409
IvarOffsetGV->setSection("__DATA, __objc_ivar");
63496410
return IvarOffsetGV;
63506411
}
@@ -7179,11 +7240,14 @@ CGObjCNonFragileABIMac::GetEHType(QualType T) {
71797240
// There's a particular fixed type info for 'id'.
71807241
if (T->isObjCIdType() || T->isObjCQualifiedIdType()) {
71817242
auto *IDEHType = CGM.getModule().getGlobalVariable("OBJC_EHTYPE_id");
7182-
if (!IDEHType)
7243+
if (!IDEHType) {
71837244
IDEHType =
71847245
new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy, false,
71857246
llvm::GlobalValue::ExternalLinkage, nullptr,
71867247
"OBJC_EHTYPE_id");
7248+
if (CGM.getTriple().isOSBinFormatCOFF())
7249+
IDEHType->setDLLStorageClass(getStorage(CGM, "OBJC_EHTYPE_id"));
7250+
}
71877251
return IDEHType;
71887252
}
71897253

@@ -7238,23 +7302,34 @@ CGObjCNonFragileABIMac::GetInterfaceEHType(const ObjCInterfaceDecl *ID,
72387302

72397303
// If this type (or a super class) has the __objc_exception__
72407304
// attribute, emit an external reference.
7241-
if (hasObjCExceptionAttribute(CGM.getContext(), ID))
7242-
return Entry =
7243-
new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy, false,
7244-
llvm::GlobalValue::ExternalLinkage, nullptr,
7245-
"OBJC_EHTYPE_$_" + ClassName);
7305+
if (hasObjCExceptionAttribute(CGM.getContext(), ID)) {
7306+
std::string EHTypeName = ("OBJC_EHTYPE_$_" + ClassName).str();
7307+
Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy,
7308+
false, llvm::GlobalValue::ExternalLinkage,
7309+
nullptr, EHTypeName);
7310+
if (CGM.getTriple().isOSBinFormatCOFF()) {
7311+
if (ID->hasAttr<DLLExportAttr>())
7312+
Entry->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
7313+
else if (ID->hasAttr<DLLImportAttr>())
7314+
Entry->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
7315+
}
7316+
return Entry;
7317+
}
72467318
}
72477319

72487320
// Otherwise we need to either make a new entry or fill in the initializer.
72497321
assert((!Entry || !Entry->hasInitializer()) && "Duplicate EHType definition");
72507322

72517323
std::string VTableName = "objc_ehtype_vtable";
72527324
auto *VTableGV = CGM.getModule().getGlobalVariable(VTableName);
7253-
if (!VTableGV)
7325+
if (!VTableGV) {
72547326
VTableGV =
72557327
new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.Int8PtrTy, false,
72567328
llvm::GlobalValue::ExternalLinkage, nullptr,
72577329
VTableName);
7330+
if (CGM.getTriple().isOSBinFormatCOFF())
7331+
VTableGV->setDLLStorageClass(getStorage(CGM, VTableName));
7332+
}
72587333

72597334
llvm::Value *VTableIdx = llvm::ConstantInt::get(CGM.Int32Ty, 2);
72607335
llvm::Constant *Values[] = {
@@ -7274,11 +7349,16 @@ CGObjCNonFragileABIMac::GetInterfaceEHType(const ObjCInterfaceDecl *ID,
72747349
Entry =
72757350
new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy, false, L,
72767351
Init, ("OBJC_EHTYPE_$_" + ClassName).str());
7352+
if (CGM.getTriple().isOSBinFormatCOFF())
7353+
if (hasObjCExceptionAttribute(CGM.getContext(), ID))
7354+
if (ID->hasAttr<DLLExportAttr>())
7355+
Entry->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
72777356
}
72787357
assert(Entry->getLinkage() == L);
72797358

7280-
if (ID->getVisibility() == HiddenVisibility)
7281-
Entry->setVisibility(llvm::GlobalValue::HiddenVisibility);
7359+
if (!CGM.getTriple().isOSBinFormatCOFF())
7360+
if (ID->getVisibility() == HiddenVisibility)
7361+
Entry->setVisibility(llvm::GlobalValue::HiddenVisibility);
72827362

72837363
const auto &DL = CGM.getDataLayout();
72847364
Entry->setAlignment(DL.getABITypeAlignment(ObjCTypes.EHTypeTy));

0 commit comments

Comments
 (0)