зеркало из https://github.com/microsoft/clang-1.git
Fix a pair of invalidation bugs when emitting protocol definitions
in the fragile and non-fragile Mac ObjC runtimes. No useful test case. Fixes rdar://problem/11072576. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153778 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
355bba72ca
Коммит
50651b951c
|
@ -1914,7 +1914,7 @@ struct _objc__method_prototype_list *class_methods
|
|||
See EmitProtocolExtension().
|
||||
*/
|
||||
llvm::Constant *CGObjCMac::GetOrEmitProtocol(const ObjCProtocolDecl *PD) {
|
||||
llvm::GlobalVariable *&Entry = Protocols[PD->getIdentifier()];
|
||||
llvm::GlobalVariable *Entry = Protocols[PD->getIdentifier()];
|
||||
|
||||
// Early exit if a defining object has already been generated.
|
||||
if (Entry && Entry->hasInitializer())
|
||||
|
@ -1997,6 +1997,8 @@ llvm::Constant *CGObjCMac::GetOrEmitProtocol(const ObjCProtocolDecl *PD) {
|
|||
Entry->setSection("__OBJC,__protocol,regular,no_dead_strip");
|
||||
// FIXME: Is this necessary? Why only for protocol?
|
||||
Entry->setAlignment(4);
|
||||
|
||||
Protocols[PD->getIdentifier()] = Entry;
|
||||
}
|
||||
CGM.AddUsedGlobal(Entry);
|
||||
|
||||
|
@ -5552,7 +5554,7 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocolRef(
|
|||
|
||||
llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol(
|
||||
const ObjCProtocolDecl *PD) {
|
||||
llvm::GlobalVariable *&Entry = Protocols[PD->getIdentifier()];
|
||||
llvm::GlobalVariable *Entry = Protocols[PD->getIdentifier()];
|
||||
|
||||
// Early exit if a defining object has already been generated.
|
||||
if (Entry && Entry->hasInitializer())
|
||||
|
@ -5649,6 +5651,8 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol(
|
|||
Entry->setAlignment(
|
||||
CGM.getTargetData().getABITypeAlignment(ObjCTypes.ProtocolnfABITy));
|
||||
Entry->setSection("__DATA,__datacoal_nt,coalesced");
|
||||
|
||||
Protocols[PD->getIdentifier()] = Entry;
|
||||
}
|
||||
Entry->setVisibility(llvm::GlobalValue::HiddenVisibility);
|
||||
CGM.AddUsedGlobal(Entry);
|
||||
|
|
Загрузка…
Ссылка в новой задаче