forked from OSchip/llvm-project
ObjectiveC IRGen. Replace _objc_empty_vtable pointer in Objective-C
class metadata for certain deployment targets. // rdar://14802916 llvm-svn: 193359
This commit is contained in:
parent
e568225fc3
commit
42d495539a
|
@ -5757,6 +5757,9 @@ llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassMetaData(
|
||||||
};
|
};
|
||||||
if (!Values[1])
|
if (!Values[1])
|
||||||
Values[1] = llvm::Constant::getNullValue(ObjCTypes.ClassnfABIPtrTy);
|
Values[1] = llvm::Constant::getNullValue(ObjCTypes.ClassnfABIPtrTy);
|
||||||
|
if (!Values[3])
|
||||||
|
Values[3] = llvm::Constant::getNullValue(
|
||||||
|
llvm::PointerType::getUnqual(ObjCTypes.ImpnfABITy));
|
||||||
llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ClassnfABITy,
|
llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ClassnfABITy,
|
||||||
Values);
|
Values);
|
||||||
llvm::GlobalVariable *GV = GetClassGlobal(ClassName);
|
llvm::GlobalVariable *GV = GetClassGlobal(ClassName);
|
||||||
|
@ -5800,14 +5803,21 @@ void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) {
|
||||||
llvm::GlobalValue::ExternalLinkage,
|
llvm::GlobalValue::ExternalLinkage,
|
||||||
0,
|
0,
|
||||||
"_objc_empty_cache");
|
"_objc_empty_cache");
|
||||||
|
|
||||||
ObjCEmptyVtableVar = new llvm::GlobalVariable(
|
// Make this entry NULL for any iOS device target, any iOS simulator target,
|
||||||
CGM.getModule(),
|
// OS X with deployment target 10.9 or later.
|
||||||
ObjCTypes.ImpnfABITy,
|
const llvm::Triple &Triple = CGM.getTarget().getTriple();
|
||||||
false,
|
if (Triple.isiOS() || (Triple.isMacOSX() && !Triple.isMacOSXVersionLT(10, 9)))
|
||||||
llvm::GlobalValue::ExternalLinkage,
|
// This entry will be null.
|
||||||
0,
|
ObjCEmptyVtableVar = 0;
|
||||||
"_objc_empty_vtable");
|
else
|
||||||
|
ObjCEmptyVtableVar = new llvm::GlobalVariable(
|
||||||
|
CGM.getModule(),
|
||||||
|
ObjCTypes.ImpnfABITy,
|
||||||
|
false,
|
||||||
|
llvm::GlobalValue::ExternalLinkage,
|
||||||
|
0,
|
||||||
|
"_objc_empty_vtable");
|
||||||
}
|
}
|
||||||
assert(ID->getClassInterface() &&
|
assert(ID->getClassInterface() &&
|
||||||
"CGObjCNonFragileABIMac::GenerateClass - class is 0");
|
"CGObjCNonFragileABIMac::GenerateClass - class is 0");
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -emit-llvm -o - %s | FileCheck -check-prefix CHECK-OSX %s
|
||||||
|
// RUN: %clang_cc1 -triple thumbv7-apple-ios3.0.0 -emit-llvm -o - %s | FileCheck -check-prefix CHECK-IOS %s
|
||||||
|
// rdar://14802916
|
||||||
|
|
||||||
|
@interface I
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation I @end
|
||||||
|
// CHECK-OSX: %struct._class_t* null, %struct._objc_cache* @_objc_empty_cache, i8* (i8*, i8*)** null
|
||||||
|
// CHECK-IOS: %struct._class_t* null, %struct._objc_cache* @_objc_empty_cache, i8* (i8*, i8*)** null
|
Loading…
Reference in New Issue