@@ -945,7 +945,8 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
945
945
// / Generate the name of a symbol for a reference to a class. Accesses to
946
946
// / classes should be indirected via this.
947
947
948
- typedef std::pair<std::string, std::pair<llvm::Constant*, int >> EarlyInitPair;
948
+ typedef std::pair<std::string, std::pair<llvm::GlobalVariable*, int >>
949
+ EarlyInitPair;
949
950
std::vector<EarlyInitPair> EarlyInitList;
950
951
951
952
std::string SymbolForClassRef (StringRef Name, bool isWeak) {
@@ -1096,7 +1097,7 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
1096
1097
}
1097
1098
}
1098
1099
}
1099
- auto *ObjCStrGV =
1100
+ llvm::GlobalVariable *ObjCStrGV =
1100
1101
Fields.finishAndCreateGlobal (
1101
1102
isNamed ? StringRef (StringName) : " .objc_string" ,
1102
1103
Align, false , isNamed ? llvm::GlobalValue::LinkOnceODRLinkage
@@ -1107,7 +1108,7 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
1107
1108
ObjCStrGV->setVisibility (llvm::GlobalValue::HiddenVisibility);
1108
1109
}
1109
1110
if (CGM.getTriple ().isOSBinFormatCOFF ()) {
1110
- std::pair<llvm::Constant *, int > v{ObjCStrGV, 0 };
1111
+ std::pair<llvm::GlobalVariable *, int > v{ObjCStrGV, 0 };
1111
1112
EarlyInitList.emplace_back (Sym, v);
1112
1113
}
1113
1114
llvm::Constant *ObjCStr = llvm::ConstantExpr::getBitCast (ObjCStrGV, IdTy);
@@ -1654,9 +1655,10 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
1654
1655
for (const auto &lateInit : EarlyInitList) {
1655
1656
auto *global = TheModule.getGlobalVariable (lateInit.first );
1656
1657
if (global) {
1658
+ llvm::GlobalVariable *GV = lateInit.second .first ;
1657
1659
b.CreateAlignedStore (
1658
1660
global,
1659
- b.CreateStructGEP (lateInit. second . first , lateInit.second .second ),
1661
+ b.CreateStructGEP (GV-> getValueType (), GV , lateInit.second .second ),
1660
1662
CGM.getPointerAlign ().getAsAlign ());
1661
1663
}
1662
1664
}
@@ -1938,7 +1940,7 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
1938
1940
// struct objc_property_list *properties
1939
1941
classFields.add (GeneratePropertyList (OID, classDecl));
1940
1942
1941
- auto *classStruct =
1943
+ llvm::GlobalVariable *classStruct =
1942
1944
classFields.finishAndCreateGlobal (SymbolForClass (className),
1943
1945
CGM.getPointerAlign (), false , llvm::GlobalValue::ExternalLinkage);
1944
1946
@@ -1949,12 +1951,12 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
1949
1951
if (IsCOFF) {
1950
1952
// we can't import a class struct.
1951
1953
if (OID->getClassInterface ()->hasAttr <DLLExportAttr>()) {
1952
- cast<llvm::GlobalValue>( classStruct) ->setDLLStorageClass (llvm::GlobalValue::DLLExportStorageClass);
1954
+ classStruct->setDLLStorageClass (llvm::GlobalValue::DLLExportStorageClass);
1953
1955
cast<llvm::GlobalValue>(classRefSymbol)->setDLLStorageClass (llvm::GlobalValue::DLLExportStorageClass);
1954
1956
}
1955
1957
1956
1958
if (SuperClass) {
1957
- std::pair<llvm::Constant *, int > v{classStruct, 1 };
1959
+ std::pair<llvm::GlobalVariable *, int > v{classStruct, 1 };
1958
1960
EarlyInitList.emplace_back (std::string (SuperClass->getName ()),
1959
1961
std::move (v));
1960
1962
}
0 commit comments