diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/tools/libclang/BuildSystem.cpp | 8 | ||||
-rw-r--r-- | clang/unittests/libclang/LibclangTest.cpp | 21 |
2 files changed, 25 insertions, 4 deletions
diff --git a/clang/tools/libclang/BuildSystem.cpp b/clang/tools/libclang/BuildSystem.cpp index 89c6e91d23c..c9d3c553273 100644 --- a/clang/tools/libclang/BuildSystem.cpp +++ b/clang/tools/libclang/BuildSystem.cpp @@ -19,6 +19,7 @@ #include "llvm/Support/Path.h" #include "llvm/Support/TimeValue.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Support/YAMLParser.h" using namespace clang; using namespace llvm::sys; @@ -147,10 +148,9 @@ private: OS.indent(Indent) << "{\n"; Indent += 2; OS.indent(Indent) << "'type': 'file',\n"; - OS.indent(Indent) << "'name': \""; - OS.write_escaped(VName) << "\",\n"; - OS.indent(Indent) << "'external-contents': \""; - OS.write_escaped(Entry.RPath) << "\"\n"; + OS.indent(Indent) << "'name': \"" << llvm::yaml::escape(VName) << "\",\n"; + OS.indent(Indent) << "'external-contents': \"" + << llvm::yaml::escape(Entry.RPath) << "\"\n"; Indent -= 2; OS.indent(Indent) << '}'; if (Entries.empty()) { diff --git a/clang/unittests/libclang/LibclangTest.cpp b/clang/unittests/libclang/LibclangTest.cpp index 64128f158f2..e6b32b001db 100644 --- a/clang/unittests/libclang/LibclangTest.cpp +++ b/clang/unittests/libclang/LibclangTest.cpp @@ -85,6 +85,27 @@ TEST(libclang, VirtualFileOverlay) { T.map("/path/virtual/foo.h", "/real/foo.h"); } { + const char *contents = + "{\n" + " 'version': 0,\n" + " 'roots': [\n" + " {\n" + " 'type': 'directory',\n" + " 'name': \"/path/virtual\",\n" + " 'contents': [\n" + " {\n" + " 'type': 'file',\n" + " 'name': \"\\u2602.h\",\n" + " 'external-contents': \"/real/\\u2602.h\"\n" + " }\n" + " ]\n" + " }\n" + " ]\n" + "}\n"; + TestVFO T(contents); + T.map("/path/virtual/☂.h", "/real/☂.h"); + } + { TestVFO T(NULL); T.mapError("/path/./virtual/../foo.h", "/real/foo.h", CXError_InvalidArguments); |