summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2016-09-16 00:38:18 +0000
committerMehdi Amini <mehdi.amini@apple.com>2016-09-16 00:38:18 +0000
commitb53b62eb69cd5768423786c5ced700bc2d1d2e20 (patch)
treecd0b7f050e0efcf5c203a86dc9be0e4ffd253f38
parent1fbaf535d6a4555a751d1285889a7a1f52dfafc5 (diff)
downloadbcm5719-llvm-b53b62eb69cd5768423786c5ced700bc2d1d2e20.tar.gz
bcm5719-llvm-b53b62eb69cd5768423786c5ced700bc2d1d2e20.zip
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
-rw-r--r--llvm/lib/IR/AutoUpgrade.cpp8
-rw-r--r--llvm/test/Bitcode/upgrade-module-flag.ll2
-rw-r--r--llvm/test/Linker/Inputs/objectivec-class-property-flag-mismatch.ll5
-rw-r--r--llvm/test/Linker/objectivec-class-property-flag-mismatch.ll16
4 files changed, 26 insertions, 5 deletions
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index a68247be973..8a5170fb631 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -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;
}
diff --git a/llvm/test/Bitcode/upgrade-module-flag.ll b/llvm/test/Bitcode/upgrade-module-flag.ll
index fe52a3298e4..d6741faa837 100644
--- a/llvm/test/Bitcode/upgrade-module-flag.ll
+++ b/llvm/test/Bitcode/upgrade-module-flag.ll
@@ -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}
diff --git a/llvm/test/Linker/Inputs/objectivec-class-property-flag-mismatch.ll b/llvm/test/Linker/Inputs/objectivec-class-property-flag-mismatch.ll
new file mode 100644
index 00000000000..93a5fbefe88
--- /dev/null
+++ b/llvm/test/Linker/Inputs/objectivec-class-property-flag-mismatch.ll
@@ -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}
diff --git a/llvm/test/Linker/objectivec-class-property-flag-mismatch.ll b/llvm/test/Linker/objectivec-class-property-flag-mismatch.ll
new file mode 100644
index 00000000000..9dd82c5d9ba
--- /dev/null
+++ b/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}
OpenPOWER on IntegriCloud