[PATCH] D37909: [AutoUpgrade] Fix a compatibility issue with module flag

Steven Wu via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 15 14:14:01 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL313398: [AutoUpgrade] Fix a compatibility issue with module flag (authored by steven_wu).

Repository:
  rL LLVM

https://reviews.llvm.org/D37909

Files:
  llvm/trunk/lib/IR/AutoUpgrade.cpp
  llvm/trunk/test/Bitcode/upgrade-module-flag.ll


Index: llvm/trunk/test/Bitcode/upgrade-module-flag.ll
===================================================================
--- llvm/trunk/test/Bitcode/upgrade-module-flag.ll
+++ llvm/trunk/test/Bitcode/upgrade-module-flag.ll
@@ -1,13 +1,15 @@
 ; RUN: llvm-as < %s | llvm-dis | FileCheck %s
 ; RUN: verify-uselistorder < %s
 
-!llvm.module.flags = !{!0, !1, !2}
+!llvm.module.flags = !{!0, !1, !2, !3}
 
 !0 = !{i32 1, !"PIC Level", i32 1}
 !1 = !{i32 1, !"PIE Level", i32 1}
 !2 = !{i32 1, !"Objective-C Image Info Version", i32 0}
+!3 = !{i32 1, !"Objective-C Image Info Section", !"__DATA, __objc_imageinfo, regular, no_dead_strip"}
 
 ; CHECK: !0 = !{i32 7, !"PIC Level", i32 1}
 ; CHECK: !1 = !{i32 7, !"PIE Level", i32 1}
 ; CHECK: !2 = !{i32 1, !"Objective-C Image Info Version", i32 0}
-; CHECK: !3 = !{i32 4, !"Objective-C Class Properties", i32 0}
+; CHECK: !3 = !{i32 1, !"Objective-C Image Info Section", !"__DATA,__objc_imageinfo,regular,no_dead_strip"}
+; CHECK: !4 = !{i32 4, !"Objective-C Class Properties", i32 0}
Index: llvm/trunk/lib/IR/AutoUpgrade.cpp
===================================================================
--- llvm/trunk/lib/IR/AutoUpgrade.cpp
+++ llvm/trunk/lib/IR/AutoUpgrade.cpp
@@ -2363,6 +2363,24 @@
         }
       }
     }
+    // Upgrade Objective-C Image Info Section. Removed the whitespce in the
+    // section name so that llvm-lto will not complain about mismatching
+    // module flags that is functionally the same.
+    if (ID->getString() == "Objective-C Image Info Section") {
+      if (auto *Value = dyn_cast_or_null<MDString>(Op->getOperand(2))) {
+        SmallVector<StringRef, 4> ValueComp;
+        Value->getString().split(ValueComp, " ");
+        if (ValueComp.size() != 1) {
+          std::string NewValue;
+          for (auto &S : ValueComp)
+            NewValue += S.str();
+          Metadata *Ops[3] = {Op->getOperand(0), Op->getOperand(1),
+                              MDString::get(M.getContext(), NewValue)};
+          ModFlags->setOperand(I, MDNode::get(M.getContext(), Ops));
+          Changed = true;
+        }
+      }
+    }
   }
 
   // "Objective-C Class Properties" is recently added for Objective-C. We


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37909.115490.patch
Type: text/x-patch
Size: 2192 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170915/861c4082/attachment.bin>


More information about the llvm-commits mailing list