@@ -1877,17 +1877,17 @@ extern "C" void LLVMRustContextConfigureDiagnosticHandler(
1877
1877
void *DiagnosticHandlerContext,
1878
1878
bool RemarkAllPasses,
1879
1879
std::vector<std::string> RemarkPasses,
1880
+ std::unique_ptr<ToolOutputFile> RemarksFile,
1880
1881
std::unique_ptr<llvm::remarks::RemarkStreamer> RemarkStreamer,
1881
- std::unique_ptr<LLVMRemarkStreamer> LlvmRemarkStreamer,
1882
- std::unique_ptr<ToolOutputFile> RemarksFile
1882
+ std::unique_ptr<LLVMRemarkStreamer> LlvmRemarkStreamer
1883
1883
)
1884
1884
: DiagnosticHandlerCallback(DiagnosticHandlerCallback),
1885
1885
DiagnosticHandlerContext (DiagnosticHandlerContext),
1886
1886
RemarkAllPasses(RemarkAllPasses),
1887
1887
RemarkPasses(std::move(RemarkPasses)),
1888
+ RemarksFile(std::move(RemarksFile)),
1888
1889
RemarkStreamer(std::move(RemarkStreamer)),
1889
- LlvmRemarkStreamer(std::move(LlvmRemarkStreamer)),
1890
- RemarksFile(std::move(RemarksFile)) {}
1890
+ LlvmRemarkStreamer(std::move(LlvmRemarkStreamer)) {}
1891
1891
1892
1892
virtual bool handleDiagnostics (const DiagnosticInfo &DI) override {
1893
1893
if (this ->LlvmRemarkStreamer ) {
@@ -1939,11 +1939,11 @@ extern "C" void LLVMRustContextConfigureDiagnosticHandler(
1939
1939
bool RemarkAllPasses = false ;
1940
1940
std::vector<std::string> RemarkPasses;
1941
1941
1942
- // Since LlvmRemarkStreamer contains a pointer to RemarkStreamer, the ordering of the two
1942
+ // Since LlvmRemarkStreamer contains a pointer to RemarkStreamer, the ordering of the three
1943
1943
// members below is important.
1944
+ std::unique_ptr<ToolOutputFile> RemarksFile;
1944
1945
std::unique_ptr<llvm::remarks::RemarkStreamer> RemarkStreamer;
1945
1946
std::unique_ptr<LLVMRemarkStreamer> LlvmRemarkStreamer;
1946
- std::unique_ptr<ToolOutputFile> RemarksFile;
1947
1947
};
1948
1948
1949
1949
std::vector<std::string> Passes;
@@ -1953,9 +1953,9 @@ extern "C" void LLVMRustContextConfigureDiagnosticHandler(
1953
1953
}
1954
1954
1955
1955
// We need to hold onto both the streamers and the opened file
1956
+ std::unique_ptr<ToolOutputFile> RemarkFile;
1956
1957
std::unique_ptr<llvm::remarks::RemarkStreamer> RemarkStreamer;
1957
1958
std::unique_ptr<LLVMRemarkStreamer> LlvmRemarkStreamer;
1958
- std::unique_ptr<ToolOutputFile> RemarkFile;
1959
1959
1960
1960
if (RemarkFilePath != nullptr ) {
1961
1961
std::error_code EC;
@@ -1964,6 +1964,12 @@ extern "C" void LLVMRustContextConfigureDiagnosticHandler(
1964
1964
EC,
1965
1965
llvm::sys::fs::OF_TextWithCRLF
1966
1966
);
1967
+ if (EC) {
1968
+ std::string Error = std::string (" Cannot create remark file: " ) +
1969
+ toString (errorCodeToError (EC));
1970
+ report_fatal_error (Twine (Error));
1971
+ }
1972
+
1967
1973
// Do not delete the file after we gather remarks
1968
1974
RemarkFile->keep ();
1969
1975
@@ -1974,8 +1980,8 @@ extern "C" void LLVMRustContextConfigureDiagnosticHandler(
1974
1980
);
1975
1981
if (Error E = RemarkSerializer.takeError ())
1976
1982
{
1977
- // Is this OK?
1978
- report_fatal_error (" Cannot create remark serializer " );
1983
+ std::string Error = std::string ( " Cannot create remark serializer: " ) + toString ( std::move (E));
1984
+ report_fatal_error (Twine (Error) );
1979
1985
}
1980
1986
RemarkStreamer = std::make_unique<llvm::remarks::RemarkStreamer>(std::move (*RemarkSerializer));
1981
1987
LlvmRemarkStreamer = std::make_unique<LLVMRemarkStreamer>(*RemarkStreamer);
@@ -1986,9 +1992,9 @@ extern "C" void LLVMRustContextConfigureDiagnosticHandler(
1986
1992
DiagnosticHandlerContext,
1987
1993
RemarkAllPasses,
1988
1994
Passes,
1995
+ std::move (RemarkFile),
1989
1996
std::move(RemarkStreamer),
1990
- std::move(LlvmRemarkStreamer),
1991
- std::move(RemarkFile)
1997
+ std::move(LlvmRemarkStreamer)
1992
1998
));
1993
1999
}
1994
2000
0 commit comments