forked from OSchip/llvm-project
Fix autoupgrade logic for Objective-C class properties module flag
Previous we were issuing an error when linking a module containing the new Objective-C metadata structure for class properties with an "old" one. Now instead we downgrade the module flag so that the Objective-C runtime does not expect the new metadata structure. This is consistent with what ld64 is doing on binary files. Differential Revision: https://reviews.llvm.org/D24620 llvm-svn: 281685
This commit is contained in:
parent
1fbaf535d6
commit
b53b62eb69
|
@ -1587,11 +1587,11 @@ bool llvm::UpgradeModuleFlags(Module &M) {
|
|||
}
|
||||
// "Objective-C Class Properties" is recently added for Objective-C. We
|
||||
// upgrade ObjC bitcodes to contain a "Objective-C Class Properties" module
|
||||
// flag of value 0, so we can correclty report error when trying to link
|
||||
// an ObjC bitcode without this module flag with an ObjC bitcode with this
|
||||
// module flag.
|
||||
// flag of value 0, so we can correclty downgrade this flag when trying to
|
||||
// link an ObjC bitcode without this module flag with an ObjC bitcode with
|
||||
// this module flag.
|
||||
if (HasObjCFlag && !HasClassProperties) {
|
||||
M.addModuleFlag(llvm::Module::Error, "Objective-C Class Properties",
|
||||
M.addModuleFlag(llvm::Module::Override, "Objective-C Class Properties",
|
||||
(uint32_t)0);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -6,4 +6,4 @@
|
|||
!0 = !{i32 1, !"Objective-C Image Info Version", i32 0}
|
||||
|
||||
; CHECK: !0 = !{i32 1, !"Objective-C Image Info Version", i32 0}
|
||||
; CHECK: !1 = !{i32 1, !"Objective-C Class Properties", i32 0}
|
||||
; CHECK: !1 = !{i32 4, !"Objective-C Class Properties", i32 0}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
|
||||
!llvm.module.flags = !{!0, !1}
|
||||
|
||||
!0 = !{i32 1, !"Objective-C Image Info Version", i32 0}
|
||||
!1 = !{i32 1, !"Objective-C Class Properties", i32 64}
|
|
@ -0,0 +1,16 @@
|
|||
; RUN: llvm-as < %s -o %t1.bc
|
||||
; RUN: llvm-as < %p/Inputs/objectivec-class-property-flag-mismatch.ll -o %t2.bc
|
||||
|
||||
|
||||
; RUN: llvm-link %t1.bc %t2.bc -S | FileCheck %s
|
||||
; RUN: llvm-link %t2.bc %t1.bc -S | FileCheck %s
|
||||
|
||||
|
||||
; CHECK: !0 = !{i32 1, !"Objective-C Image Info Version", i32 0}
|
||||
; CHECK: !1 = !{i32 4, !"Objective-C Class Properties", i32 0}
|
||||
|
||||
|
||||
|
||||
!llvm.module.flags = !{!0}
|
||||
|
||||
!0 = !{i32 1, !"Objective-C Image Info Version", i32 0}
|
Loading…
Reference in New Issue