OSDN Git Service

Do not use abbrev while writing NamedMDNode name.
authorDevang Patel <dpatel@apple.com>
Thu, 30 Jul 2009 23:06:35 +0000 (23:06 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 30 Jul 2009 23:06:35 +0000 (23:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77637 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bitcode/Writer/BitcodeWriter.cpp
test/Feature/NamedMDNode2.ll [new file with mode: 0644]

index ff47cf4..e5fb50f 100644 (file)
@@ -495,7 +495,6 @@ static void WriteModuleMetadata(const ValueEnumerator &VE,
   const ValueEnumerator::ValueList &Vals = VE.getValues();
   bool StartedMetadataBlock = false;
   unsigned MDSAbbrev = 0;
-  unsigned String8Abbrev = 0;
   SmallVector<uint64_t, 64> Record;
   for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
     
@@ -530,18 +529,14 @@ static void WriteModuleMetadata(const ValueEnumerator &VE,
       if (!StartedMetadataBlock)  {
         Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
         StartedMetadataBlock = true;
-        BitCodeAbbrev *Abbv = new BitCodeAbbrev();
-        Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_STRING));
-        Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
-        Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
-        String8Abbrev = Stream.EmitAbbrev(Abbv);
       }
 
       // Write name.
-      const char *StrBegin = NMD->getName().data();
-      for (unsigned i = 0, e = NMD->getName().size(); i != e; ++i)
+      std::string Str = NMD->getNameStr();
+      const char *StrBegin = Str.c_str();
+      for (unsigned i = 0, e = Str.length(); i != e; ++i)
         Record.push_back(StrBegin[i]);
-      Stream.EmitRecord(bitc::METADATA_NAME, Record, String8Abbrev);
+      Stream.EmitRecord(bitc::METADATA_NAME, Record, 0/*TODO*/);
       Record.clear();
 
       // Write named metadata elements.
diff --git a/test/Feature/NamedMDNode2.ll b/test/Feature/NamedMDNode2.ll
new file mode 100644 (file)
index 0000000..b560772
--- /dev/null
@@ -0,0 +1,7 @@
+; RUN: llvm-as < %s -f -o /dev/null
+; PR4654
+
+
+@foo = constant i1 false
+!0 = metadata !{i1 false}
+!a = !{!0}