@@ -89,9 +89,10 @@ Expected<FileCache> llvm::localCache(const Twine &CacheNameRef,
8989 AddBuffer (std::move(AddBuffer)), TempFile(std::move(TempFile)),
9090 ModuleName(ModuleName), Task(Task) {}
9191
92- ~CacheStream () {
93- // TODO: Manually commit rather than using non-trivial destructor,
94- // allowing to replace report_fatal_errors with a return Error.
92+ Error commit () override {
93+ Error E = CachedFileStream::commit ();
94+ if (E)
95+ return E;
9596
9697 // Make sure the stream is closed before committing it.
9798 OS.reset ();
@@ -101,10 +102,12 @@ Expected<FileCache> llvm::localCache(const Twine &CacheNameRef,
101102 MemoryBuffer::getOpenFile (
102103 sys::fs::convertFDToNativeFile (TempFile.FD ), ObjectPathName,
103104 /* FileSize=*/ -1 , /* RequiresNullTerminator=*/ false );
104- if (!MBOrErr)
105- report_fatal_error (Twine (" Failed to open new cache file " ) +
106- TempFile.TmpName + " : " +
107- MBOrErr.getError ().message () + " \n " );
105+ if (!MBOrErr) {
106+ std::error_code EC = MBOrErr.getError ();
107+ return createStringError (EC, Twine (" Failed to open new cache file " ) +
108+ TempFile.TmpName + " : " +
109+ EC.message () + " \n " );
110+ }
108111
109112 // On POSIX systems, this will atomically replace the destination if
110113 // it already exists. We try to emulate this on Windows, but this may
@@ -115,11 +118,14 @@ Expected<FileCache> llvm::localCache(const Twine &CacheNameRef,
115118 // AddBuffer a copy of the bytes we wrote in that case. We do this
116119 // instead of just using the existing file, because the pruner might
117120 // delete the file before we get a chance to use it.
118- Error E = TempFile.keep (ObjectPathName);
121+ E = TempFile.keep (ObjectPathName);
119122 E = handleErrors (std::move (E), [&](const ECError &E) -> Error {
120123 std::error_code EC = E.convertToErrorCode ();
121124 if (EC != errc::permission_denied)
122- return errorCodeToError (EC);
125+ return createStringError (
126+ EC, Twine (" Failed to rename temporary file " ) +
127+ TempFile.TmpName + " to " + ObjectPathName + " : " +
128+ EC.message () + " \n " );
123129
124130 auto MBCopy = MemoryBuffer::getMemBufferCopy ((*MBOrErr)->getBuffer (),
125131 ObjectPathName);
@@ -132,11 +138,10 @@ Expected<FileCache> llvm::localCache(const Twine &CacheNameRef,
132138 });
133139
134140 if (E)
135- report_fatal_error (Twine (" Failed to rename temporary file " ) +
136- TempFile.TmpName + " to " + ObjectPathName + " : " +
137- toString (std::move (E)) + " \n " );
141+ return E;
138142
139143 AddBuffer (Task, ModuleName, std::move (*MBOrErr));
144+ return Error::success ();
140145 }
141146 };
142147
0 commit comments