[llvm] r205839 - YAMLIO: Encode ambiguous hex strings explicitly
Filipe Cabecinhas
filcab at gmail.com
Wed Apr 9 07:45:31 PDT 2014
I reverted this on r205857, since it broke several lld tests.
Here's the buildbot log:
http://lab.llvm.org:8011/builders/lld-x86_64-freeBSD/builds/4918/steps/test_lld/logs/stdio
It ended up adding quotes when printing byte arrays (for bytes of the form
0N (N being a nibble from 1 to F).
Filipe
On Wed, Apr 9, 2014 at 8:56 AM, David Majnemer <david.majnemer at gmail.com>wrote:
> Author: majnemer
> Date: Wed Apr 9 02:56:27 2014
> New Revision: 205839
>
> URL: http://llvm.org/viewvc/llvm-project?rev=205839&view=rev
> Log:
> YAMLIO: Encode ambiguous hex strings explicitly
>
> YAMLIO would turn a BinaryRef into the string 0000000004000000.
> However, the leading zero causes parsers to interpret it as being an
> octal number instead of a hexadecimal one.
>
> Instead, escape such strings as needed.
>
> Modified:
> llvm/trunk/lib/Support/YAMLTraits.cpp
> llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml
> llvm/trunk/unittests/Support/YAMLIOTest.cpp
>
> Modified: llvm/trunk/lib/Support/YAMLTraits.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/YAMLTraits.cpp?rev=205839&r1=205838&r2=205839&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/YAMLTraits.cpp (original)
> +++ llvm/trunk/lib/Support/YAMLTraits.cpp Wed Apr 9 02:56:27 2014
> @@ -561,8 +561,11 @@ void Output::scalarString(StringRef &S)
> this->outputUpToEndOfLine("''");
> return;
> }
> + bool isOctalString = S.front() == '0' &&
> + S.find_first_not_of('0') != StringRef::npos &&
> + !S.startswith_lower("0x");
> if (S.find_first_not_of(ScalarSafeChars) == StringRef::npos &&
> - !isspace(S.front()) && !isspace(S.back())) {
> + !isspace(S.front()) && !isspace(S.back()) && !isOctalString) {
> // If the string consists only of safe characters, print it out
> without
> // quotes.
> this->outputUpToEndOfLine(S);
>
> Modified: llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml?rev=205839&r1=205838&r2=205839&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml (original)
> +++ llvm/trunk/test/Object/X86/objdump-cfg-invalid-opcode.yaml Wed Apr 9
> 02:56:27 2014
> @@ -38,7 +38,7 @@ Sections:
> #CFG: Type: Data
>
> ## 4: 06 (bad)
> -#CFG: Content: 06
> +#CFG: Content: '06'
>
> #CFG: - StartAddress: 0x0000000000000005
> #CFG: Size: 1
>
> Modified: llvm/trunk/unittests/Support/YAMLIOTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/YAMLIOTest.cpp?rev=205839&r1=205838&r2=205839&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/Support/YAMLIOTest.cpp (original)
> +++ llvm/trunk/unittests/Support/YAMLIOTest.cpp Wed Apr 9 02:56:27 2014
> @@ -302,11 +302,13 @@ struct StringTypes {
> llvm::StringRef str3;
> llvm::StringRef str4;
> llvm::StringRef str5;
> + llvm::StringRef str6;
> std::string stdstr1;
> std::string stdstr2;
> std::string stdstr3;
> std::string stdstr4;
> std::string stdstr5;
> + std::string stdstr6;
> };
>
> namespace llvm {
> @@ -319,11 +321,13 @@ namespace yaml {
> io.mapRequired("str3", st.str3);
> io.mapRequired("str4", st.str4);
> io.mapRequired("str5", st.str5);
> + io.mapRequired("str6", st.str6);
> io.mapRequired("stdstr1", st.stdstr1);
> io.mapRequired("stdstr2", st.stdstr2);
> io.mapRequired("stdstr3", st.stdstr3);
> io.mapRequired("stdstr4", st.stdstr4);
> io.mapRequired("stdstr5", st.stdstr5);
> + io.mapRequired("stdstr6", st.stdstr6);
> }
> };
> }
> @@ -338,11 +342,13 @@ TEST(YAMLIO, TestReadWriteStringTypes) {
> map.str3 = "`ccc";
> map.str4 = "@ddd";
> map.str5 = "";
> + map.str6 = "0000000004000000";
> map.stdstr1 = "'eee";
> map.stdstr2 = "\"fff";
> map.stdstr3 = "`ggg";
> map.stdstr4 = "@hhh";
> map.stdstr5 = "";
> + map.stdstr6 = "0000000004000000";
>
> llvm::raw_string_ostream ostr(intermediate);
> Output yout(ostr);
> @@ -355,11 +361,13 @@ TEST(YAMLIO, TestReadWriteStringTypes) {
> EXPECT_NE(llvm::StringRef::npos, flowOut.find("'`ccc'"));
> EXPECT_NE(llvm::StringRef::npos, flowOut.find("'@ddd'"));
> EXPECT_NE(llvm::StringRef::npos, flowOut.find("''\n"));
> + EXPECT_NE(llvm::StringRef::npos, flowOut.find("'0000000004000000'\n"));
> EXPECT_NE(std::string::npos, flowOut.find("'''eee"));
> EXPECT_NE(std::string::npos, flowOut.find("'\"fff'"));
> EXPECT_NE(std::string::npos, flowOut.find("'`ggg'"));
> EXPECT_NE(std::string::npos, flowOut.find("'@hhh'"));
> EXPECT_NE(std::string::npos, flowOut.find("''\n"));
> + EXPECT_NE(std::string::npos, flowOut.find("'0000000004000000'\n"));
>
> {
> Input yin(intermediate);
> @@ -372,11 +380,13 @@ TEST(YAMLIO, TestReadWriteStringTypes) {
> EXPECT_TRUE(map.str3.equals("`ccc"));
> EXPECT_TRUE(map.str4.equals("@ddd"));
> EXPECT_TRUE(map.str5.equals(""));
> + EXPECT_TRUE(map.str6.equals("0000000004000000"));
> EXPECT_TRUE(map.stdstr1 == "'eee");
> EXPECT_TRUE(map.stdstr2 == "\"fff");
> EXPECT_TRUE(map.stdstr3 == "`ggg");
> EXPECT_TRUE(map.stdstr4 == "@hhh");
> EXPECT_TRUE(map.stdstr5 == "");
> + EXPECT_TRUE(map.stdstr6 == "0000000004000000");
> }
> }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140409/9b9f3c05/attachment.html>
More information about the llvm-commits
mailing list