Merge remote-tracking branch 'origin/master' into master-next

This commit is contained in:
swift_jenkins
2020-04-27 21:18:36 -07:00

View File

@@ -27,6 +27,7 @@
// the output of api-digester will include such changes. // the output of api-digester will include such changes.
#include "swift/Frontend/PrintingDiagnosticConsumer.h" #include "swift/Frontend/PrintingDiagnosticConsumer.h"
#include "swift/Frontend/SerializedDiagnosticConsumer.h"
#include "swift/AST/DiagnosticsModuleDiffer.h" #include "swift/AST/DiagnosticsModuleDiffer.h"
#include "swift/IDE/APIDigesterData.h" #include "swift/IDE/APIDigesterData.h"
#include <functional> #include <functional>
@@ -257,6 +258,12 @@ static llvm::cl::opt<bool>
UseEmptyBaseline("empty-baseline", UseEmptyBaseline("empty-baseline",
llvm::cl::desc("Use empty baseline for diagnostics"), llvm::cl::desc("Use empty baseline for diagnostics"),
llvm::cl::cat(Category)); llvm::cl::cat(Category));
static llvm::cl::opt<std::string>
SerializedDiagPath("serialize-diagnostics-path",
llvm::cl::desc("Serialize diagnostics to a path"),
llvm::cl::cat(Category));
} // namespace options } // namespace options
namespace { namespace {
@@ -2284,6 +2291,20 @@ static void findTypeMemberDiffs(NodePtr leftSDKRoot, NodePtr rightSDKRoot,
} }
} }
static std::unique_ptr<DiagnosticConsumer>
createDiagConsumer(llvm::raw_ostream &OS, bool &FailOnError) {
if (!options::SerializedDiagPath.empty()) {
FailOnError = true;
return serialized_diagnostics::createConsumer(options::SerializedDiagPath);
} else if (options::CompilerStyleDiags) {
FailOnError = true;
return std::make_unique<PrintingDiagnosticConsumer>();
} else {
FailOnError = false;
return std::make_unique<ModuleDifferDiagsConsumer>(true, OS);
}
}
static int diagnoseModuleChange(SDKContext &Ctx, SDKNodeRoot *LeftModule, static int diagnoseModuleChange(SDKContext &Ctx, SDKNodeRoot *LeftModule,
SDKNodeRoot *RightModule, StringRef OutputPath, SDKNodeRoot *RightModule, StringRef OutputPath,
llvm::StringSet<> ProtocolReqWhitelist) { llvm::StringSet<> ProtocolReqWhitelist) {
@@ -2300,9 +2321,9 @@ static int diagnoseModuleChange(SDKContext &Ctx, SDKNodeRoot *LeftModule,
FileOS.reset(new llvm::raw_fd_ostream(OutputPath, EC, llvm::sys::fs::F_None)); FileOS.reset(new llvm::raw_fd_ostream(OutputPath, EC, llvm::sys::fs::F_None));
OS = FileOS.get(); OS = FileOS.get();
} }
std::unique_ptr<DiagnosticConsumer> pConsumer = options::CompilerStyleDiags ? bool FailOnError;
std::make_unique<PrintingDiagnosticConsumer>(): std::unique_ptr<DiagnosticConsumer> pConsumer =
std::make_unique<ModuleDifferDiagsConsumer>(true, *OS); createDiagConsumer(*OS, FailOnError);
Ctx.addDiagConsumer(*pConsumer); Ctx.addDiagConsumer(*pConsumer);
Ctx.setCommonVersion(std::min(LeftModule->getJsonFormatVersion(), Ctx.setCommonVersion(std::min(LeftModule->getJsonFormatVersion(),
@@ -2316,7 +2337,7 @@ static int diagnoseModuleChange(SDKContext &Ctx, SDKNodeRoot *LeftModule,
// Find member hoist changes to help refine diagnostics. // Find member hoist changes to help refine diagnostics.
findTypeMemberDiffs(LeftModule, RightModule, Ctx.getTypeMemberDiffs()); findTypeMemberDiffs(LeftModule, RightModule, Ctx.getTypeMemberDiffs());
DiagnosisEmitter::diagnosis(LeftModule, RightModule, Ctx); DiagnosisEmitter::diagnosis(LeftModule, RightModule, Ctx);
return options::CompilerStyleDiags && Ctx.getDiags().hadAnyError() ? 1 : 0; return FailOnError && Ctx.getDiags().hadAnyError() ? 1 : 0;
} }
static int diagnoseModuleChange(StringRef LeftPath, StringRef RightPath, static int diagnoseModuleChange(StringRef LeftPath, StringRef RightPath,