diff --git a/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.h b/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.h --- a/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.h +++ b/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.h @@ -30,6 +30,7 @@ StringRef File); void generate(); + void generateEmpty(); private: void run(const ast_matchers::MatchFinder::MatchResult &Result) override; diff --git a/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp b/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp --- a/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp +++ b/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp @@ -79,17 +79,16 @@ return JsonObj; } -void WriteJSON(std::string JsonPath, - llvm::StringMap const &ClassInheritance, - llvm::StringMap> const &ClassesInClade, - llvm::StringMap const &ClassEntries) { +void WriteJSON(std::string JsonPath, llvm::json::Object &&ClassInheritance, + llvm::json::Object &&ClassesInClade, + llvm::json::Object &&ClassEntries) { llvm::json::Object JsonObj; using llvm::json::toJSON; - JsonObj["classInheritance"] = ::toJSON(ClassInheritance); - JsonObj["classesInClade"] = ::toJSON(ClassesInClade); - JsonObj["classEntries"] = ::toJSON(ClassEntries); + JsonObj["classInheritance"] = std::move(ClassInheritance); + JsonObj["classesInClade"] = std::move(ClassesInClade); + JsonObj["classEntries"] = std::move(ClassEntries); std::error_code EC; llvm::raw_fd_ostream JsonOut(JsonPath, EC, llvm::sys::fs::F_Text); @@ -101,9 +100,12 @@ } void ASTSrcLocProcessor::generate() { - WriteJSON(JsonPath, ClassInheritance, ClassesInClade, ClassEntries); + WriteJSON(JsonPath, ::toJSON(ClassInheritance), ::toJSON(ClassesInClade), + ::toJSON(ClassEntries)); } +void ASTSrcLocProcessor::generateEmpty() { WriteJSON(JsonPath, {}, {}, {}); } + std::vector CaptureMethods(std::string TypeString, const clang::CXXRecordDecl *ASTClass, const MatchFinder::MatchResult &Result) { diff --git a/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp b/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp --- a/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp +++ b/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp @@ -48,7 +48,13 @@ public: ASTSrcLocGenerationAction() : Processor(JsonOutputPath) {} - ~ASTSrcLocGenerationAction() { Processor.generate(); } + void ExecuteAction() override { + clang::ASTFrontendAction::ExecuteAction(); + if (getCompilerInstance().getDiagnostics().getNumErrors() > 0) + Processor.generateEmpty(); + else + Processor.generate(); + } std::unique_ptr CreateASTConsumer(clang::CompilerInstance &Compiler,