When linking NamedMDNodes, remap their operands.
authorDan Gohman <gohman@apple.com>
Tue, 24 Aug 2010 19:31:04 +0000 (19:31 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 24 Aug 2010 19:31:04 +0000 (19:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111948 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Linker/LinkModules.cpp

index fd9692de24092c5ce08631a89ee9053ee0bb8cd9..016c82cc992bb744910df68b1b6de3908f5533e4 100644 (file)
@@ -451,14 +451,16 @@ static bool GetLinkageResult(GlobalValue *Dest, const GlobalValue *Src,
 }
 
 // Insert all of the named mdnoes in Src into the Dest module.
-static void LinkNamedMDNodes(Module *Dest, Module *Src) {
+static void LinkNamedMDNodes(Module *Dest, Module *Src,
+                             ValueToValueMapTy &ValueMap) {
   for (Module::const_named_metadata_iterator I = Src->named_metadata_begin(),
          E = Src->named_metadata_end(); I != E; ++I) {
     const NamedMDNode *SrcNMD = I;
     NamedMDNode *DestNMD = Dest->getOrInsertNamedMetadata(SrcNMD->getName());
     // Add Src elements into Dest node.
     for (unsigned i = 0, e = SrcNMD->getNumOperands(); i != e; ++i) 
-      DestNMD->addOperand(SrcNMD->getOperand(i));
+      DestNMD->addOperand(cast<MDNode>(MapValue(SrcNMD->getOperand(i),
+                                                ValueMap)));
   }
 }
 
@@ -1243,7 +1245,7 @@ Linker::LinkModules(Module *Dest, Module *Src, std::string *ErrorMsg) {
   }
 
   // Insert all of the named mdnoes in Src into the Dest module.
-  LinkNamedMDNodes(Dest, Src);
+  LinkNamedMDNodes(Dest, Src, ValueMap);
 
   // Insert all of the globals in src into the Dest module... without linking
   // initializers (which could refer to functions not yet mapped over).