diff --git a/llvm/lib/Support/YAMLParser.cpp b/llvm/lib/Support/YAMLParser.cpp index b85b1eb83ef89..6ac2c6aeeb46a 100644 --- a/llvm/lib/Support/YAMLParser.cpp +++ b/llvm/lib/Support/YAMLParser.cpp @@ -2041,8 +2041,11 @@ StringRef ScalarNode::getValue(SmallVectorImpl &Storage) const { } return UnquotedValue; } - // Plain or block. - return Value.rtrim(' '); + // Plain. + // Trim whitespace ('b-char' and 's-white'). + // NOTE: Alternatively we could change the scanner to not include whitespace + // here in the first place. + return Value.rtrim("\x0A\x0D\x20\x09"); } StringRef ScalarNode::unescapeDoubleQuoted( StringRef UnquotedValue diff --git a/llvm/test/YAMLParser/json.test b/llvm/test/YAMLParser/json.test new file mode 100644 index 0000000000000..7d1b24caed987 --- /dev/null +++ b/llvm/test/YAMLParser/json.test @@ -0,0 +1,13 @@ +# RUN: yaml-bench -canonical %s | FileCheck %s + +# CHECK: !!map { +# CHECK: ? !!str "foo" +# CHECK: : !!str "123", +# CHECK: ? !!str "bar" +# CHECK: : !!str "456", +# CHECK: } + +{ + "foo": 123, + "bar": 456 +} diff --git a/llvm/unittests/Support/YAMLIOTest.cpp b/llvm/unittests/Support/YAMLIOTest.cpp index 2ed79cae31edc..f282d23dc500b 100644 --- a/llvm/unittests/Support/YAMLIOTest.cpp +++ b/llvm/unittests/Support/YAMLIOTest.cpp @@ -96,6 +96,15 @@ TEST(YAMLIO, TestMapRead) { EXPECT_EQ(doc.foo, 3); EXPECT_EQ(doc.bar, 5); } + + { + Input yin("{\"foo\": 3\n, \"bar\": 5}"); + yin >> doc; + + EXPECT_FALSE(yin.error()); + EXPECT_EQ(doc.foo, 3); + EXPECT_EQ(doc.bar, 5); + } } TEST(YAMLIO, TestMalformedMapRead) {