Skip to content

Commit

Permalink
Fix autoupgrade logic for Objective-C class properties module flag
Browse files Browse the repository at this point in the history
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
  • Loading branch information
joker-eph committed Sep 16, 2016
1 parent 1fbaf53 commit b53b62e
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 5 deletions.
8 changes: 4 additions & 4 deletions llvm/lib/IR/AutoUpgrade.cpp
Expand Up @@ -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;
}
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Bitcode/upgrade-module-flag.ll
Expand Up @@ -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}
16 changes: 16 additions & 0 deletions llvm/test/Linker/objectivec-class-property-flag-mismatch.ll
@@ -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}

0 comments on commit b53b62e

Please sign in to comment.