llvm.org GIT mirror llvm / 138a40d
Merging r313398: ------------------------------------------------------------------------ r313398 | steven_wu | 2017-09-15 14:12:14 -0700 (Fri, 15 Sep 2017) | 19 lines [AutoUpgrade] Fix a compatibility issue with module flag Summary: After r304661, module flag to record objective-c image info section is encoded without whitespaces after comma. The new name is equivalent to the old one, except that when LTO a module built by old compiler and a module built by a new compiler, it will fail with conflicting values. Fix the issue by removing whitespaces in bitcode upgrade path. rdar://problem/34416934 Reviewers: compnerd Reviewed By: compnerd Subscribers: mehdi_amini, hans, llvm-commits Differential Revision: https://reviews.llvm.org/D37909 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_50@318850 91177308-0d34-0410-b5e6-96231b3b80d8 Tom Stellard 1 year, 9 months ago
2 changed file(s) with 22 addition(s) and 2 deletion(s). Raw diff Collapse all Expand all
22702270 }
22712271 }
22722272 }
2273 // Upgrade Objective-C Image Info Section. Removed the whitespce in the
2274 // section name so that llvm-lto will not complain about mismatching
2275 // module flags that is functionally the same.
2276 if (ID->getString() == "Objective-C Image Info Section") {
2277 if (auto *Value = dyn_cast_or_null(Op->getOperand(2))) {
2278 SmallVector ValueComp;
2279 Value->getString().split(ValueComp, " ");
2280 if (ValueComp.size() != 1) {
2281 std::string NewValue;
2282 for (auto &S : ValueComp)
2283 NewValue += S.str();
2284 Metadata *Ops[3] = {Op->getOperand(0), Op->getOperand(1),
2285 MDString::get(M.getContext(), NewValue)};
2286 ModFlags->setOperand(I, MDNode::get(M.getContext(), Ops));
2287 Changed = true;
2288 }
2289 }
2290 }
22732291 }
22742292
22752293 // "Objective-C Class Properties" is recently added for Objective-C. We
0 ; RUN: llvm-as < %s | llvm-dis | FileCheck %s
11 ; RUN: verify-uselistorder < %s
22
3 !llvm.module.flags = !{!0, !1, !2}
3 !llvm.module.flags = !{!0, !1, !2, !3}
44
55 !0 = !{i32 1, !"PIC Level", i32 1}
66 !1 = !{i32 1, !"PIE Level", i32 1}
77 !2 = !{i32 1, !"Objective-C Image Info Version", i32 0}
8 !3 = !{i32 1, !"Objective-C Image Info Section", !"__DATA, __objc_imageinfo, regular, no_dead_strip"}
89
910 ; CHECK: !0 = !{i32 7, !"PIC Level", i32 1}
1011 ; CHECK: !1 = !{i32 7, !"PIE Level", i32 1}
1112 ; CHECK: !2 = !{i32 1, !"Objective-C Image Info Version", i32 0}
12 ; CHECK: !3 = !{i32 4, !"Objective-C Class Properties", i32 0}
13 ; CHECK: !3 = !{i32 1, !"Objective-C Image Info Section", !"__DATA,__objc_imageinfo,regular,no_dead_strip"}
14 ; CHECK: !4 = !{i32 4, !"Objective-C Class Properties", i32 0}