<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>