[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