<div dir="ltr">I reverted this on r205857, since it broke several lld tests.<div>Here's the buildbot log: <a href="http://lab.llvm.org:8011/builders/lld-x86_64-freeBSD/builds/4918/steps/test_lld/logs/stdio">http://lab.llvm.org:8011/builders/lld-x86_64-freeBSD/builds/4918/steps/test_lld/logs/stdio</a></div>
<div><br></div><div>It ended up adding quotes when printing byte arrays (for bytes of the form 0N (N being a nibble from 1 to F).</div><div><br></div><div>  Filipe</div><div class="gmail_extra"><div><br></div>
<br><br><div class="gmail_quote">On Wed, Apr 9, 2014 at 8:56 AM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: majnemer<br>
Date: Wed Apr  9 02:56:27 2014<br>
New Revision: 205839<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=205839&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=205839&view=rev</a><br>
Log:<br>
YAMLIO: Encode ambiguous hex strings explicitly<br>
<br>
YAMLIO would turn a BinaryRef into the string 0000000004000000.<br>
However, the leading zero causes parsers to interpret it as being an<br>
octal number instead of a hexadecimal one.<br>
<br>
Instead, escape such strings as needed.<br>
<br>
Modified:<br>
    llvm/trunk/lib/Support/YAMLTraits.cpp<br>
    llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml<br>
    llvm/trunk/unittests/Support/YAMLIOTest.cpp<br>
<br>
Modified: llvm/trunk/lib/Support/YAMLTraits.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/YAMLTraits.cpp?rev=205839&r1=205838&r2=205839&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/YAMLTraits.cpp?rev=205839&r1=205838&r2=205839&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Support/YAMLTraits.cpp (original)<br>
+++ llvm/trunk/lib/Support/YAMLTraits.cpp Wed Apr  9 02:56:27 2014<br>
@@ -561,8 +561,11 @@ void Output::scalarString(StringRef &S)<br>
     this->outputUpToEndOfLine("''");<br>
     return;<br>
   }<br>
+  bool isOctalString = S.front() == '0' &&<br>
+                       S.find_first_not_of('0') != StringRef::npos &&<br>
+                       !S.startswith_lower("0x");<br>
   if (S.find_first_not_of(ScalarSafeChars) == StringRef::npos &&<br>
-      !isspace(S.front()) && !isspace(S.back())) {<br>
+      !isspace(S.front()) && !isspace(S.back()) && !isOctalString) {<br>
     // If the string consists only of safe characters, print it out without<br>
     // quotes.<br>
     this->outputUpToEndOfLine(S);<br>
<br>
Modified: llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml?rev=205839&r1=205838&r2=205839&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml?rev=205839&r1=205838&r2=205839&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml (original)<br>
+++ llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml Wed Apr  9 02:56:27 2014<br>
@@ -38,7 +38,7 @@ Sections:<br>
 #CFG:     Type:            Data<br>
<br>
 ##    4:   06                      (bad)<br>
-#CFG:     Content:         06<br>
+#CFG:     Content:         '06'<br>
<br>
 #CFG:   - StartAddress:    0x0000000000000005<br>
 #CFG:     Size:            1<br>
<br>
Modified: llvm/trunk/unittests/Support/YAMLIOTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/YAMLIOTest.cpp?rev=205839&r1=205838&r2=205839&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/YAMLIOTest.cpp?rev=205839&r1=205838&r2=205839&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/unittests/Support/YAMLIOTest.cpp (original)<br>
+++ llvm/trunk/unittests/Support/YAMLIOTest.cpp Wed Apr  9 02:56:27 2014<br>
@@ -302,11 +302,13 @@ struct StringTypes {<br>
   llvm::StringRef str3;<br>
   llvm::StringRef str4;<br>
   llvm::StringRef str5;<br>
+  llvm::StringRef str6;<br>
   std::string stdstr1;<br>
   std::string stdstr2;<br>
   std::string stdstr3;<br>
   std::string stdstr4;<br>
   std::string stdstr5;<br>
+  std::string stdstr6;<br>
 };<br>
<br>
 namespace llvm {<br>
@@ -319,11 +321,13 @@ namespace yaml {<br>
       io.mapRequired("str3",      st.str3);<br>
       io.mapRequired("str4",      st.str4);<br>
       io.mapRequired("str5",      st.str5);<br>
+      io.mapRequired("str6",      st.str6);<br>
       io.mapRequired("stdstr1",   st.stdstr1);<br>
       io.mapRequired("stdstr2",   st.stdstr2);<br>
       io.mapRequired("stdstr3",   st.stdstr3);<br>
       io.mapRequired("stdstr4",   st.stdstr4);<br>
       io.mapRequired("stdstr5",   st.stdstr5);<br>
+      io.mapRequired("stdstr6",   st.stdstr6);<br>
     }<br>
   };<br>
 }<br>
@@ -338,11 +342,13 @@ TEST(YAMLIO, TestReadWriteStringTypes) {<br>
     map.str3 = "`ccc";<br>
     map.str4 = "@ddd";<br>
     map.str5 = "";<br>
+    map.str6 = "0000000004000000";<br>
     map.stdstr1 = "'eee";<br>
     map.stdstr2 = "\"fff";<br>
     map.stdstr3 = "`ggg";<br>
     map.stdstr4 = "@hhh";<br>
     map.stdstr5 = "";<br>
+    map.stdstr6 = "0000000004000000";<br>
<br>
     llvm::raw_string_ostream ostr(intermediate);<br>
     Output yout(ostr);<br>
@@ -355,11 +361,13 @@ TEST(YAMLIO, TestReadWriteStringTypes) {<br>
   EXPECT_NE(llvm::StringRef::npos, flowOut.find("'`ccc'"));<br>
   EXPECT_NE(llvm::StringRef::npos, flowOut.find("'@ddd'"));<br>
   EXPECT_NE(llvm::StringRef::npos, flowOut.find("''\n"));<br>
+  EXPECT_NE(llvm::StringRef::npos, flowOut.find("'0000000004000000'\n"));<br>
   EXPECT_NE(std::string::npos, flowOut.find("'''eee"));<br>
   EXPECT_NE(std::string::npos, flowOut.find("'\"fff'"));<br>
   EXPECT_NE(std::string::npos, flowOut.find("'`ggg'"));<br>
   EXPECT_NE(std::string::npos, flowOut.find("'@hhh'"));<br>
   EXPECT_NE(std::string::npos, flowOut.find("''\n"));<br>
+  EXPECT_NE(std::string::npos, flowOut.find("'0000000004000000'\n"));<br>
<br>
   {<br>
     Input yin(intermediate);<br>
@@ -372,11 +380,13 @@ TEST(YAMLIO, TestReadWriteStringTypes) {<br>
     EXPECT_TRUE(map.str3.equals("`ccc"));<br>
     EXPECT_TRUE(map.str4.equals("@ddd"));<br>
     EXPECT_TRUE(map.str5.equals(""));<br>
+    EXPECT_TRUE(map.str6.equals("0000000004000000"));<br>
     EXPECT_TRUE(map.stdstr1 == "'eee");<br>
     EXPECT_TRUE(map.stdstr2 == "\"fff");<br>
     EXPECT_TRUE(map.stdstr3 == "`ggg");<br>
     EXPECT_TRUE(map.stdstr4 == "@hhh");<br>
     EXPECT_TRUE(map.stdstr5 == "");<br>
+    EXPECT_TRUE(map.stdstr6 == "0000000004000000");<br>
   }<br>
 }<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>