@@ -68,14 +68,6 @@ bool hasDebugOrProfileInfo(ArrayRef<const char *> Args) {
6868 return false ;
6969}
7070
71- void addString (CachedCommandAdaptor::HashAlgorithm &H, StringRef S) {
72- // hash size + contents to avoid collisions
73- // for example, we have to ensure that the result of hashing "AA" "BB" is
74- // different from "A" "ABB"
75- H.update (S.size ());
76- H.update (S);
77- }
78-
7971Error addFile (CachedCommandAdaptor::HashAlgorithm &H, StringRef Path) {
8072 auto BufOrError = MemoryBuffer::getFile (Path);
8173 if (std::error_code EC = BufOrError.getError ()) {
@@ -151,6 +143,15 @@ void CachedCommandAdaptor::addFileContents(
151143 }
152144}
153145
146+ void CachedCommandAdaptor::addString (CachedCommandAdaptor::HashAlgorithm &H,
147+ StringRef S) {
148+ // hash size + contents to avoid collisions
149+ // for example, we have to ensure that the result of hashing "AA" "BB" is
150+ // different from "A" "ABB"
151+ H.update (S.size ());
152+ H.update (S);
153+ }
154+
154155Expected<CachedCommandAdaptor::Identifier>
155156CachedCommandAdaptor::getIdentifier () const {
156157 CachedCommandAdaptor::HashAlgorithm H;
@@ -170,6 +171,41 @@ CachedCommandAdaptor::getIdentifier() const {
170171 return Id;
171172}
172173
174+ llvm::Error
175+ CachedCommandAdaptor::writeUniqueExecuteOutput (StringRef OutputFilename,
176+ StringRef CachedBuffer) {
177+ std::error_code EC;
178+ raw_fd_ostream Out (OutputFilename, EC);
179+ if (EC) {
180+ Error E = createStringError (EC, Twine (" Failed to open " ) + OutputFilename +
181+ " : " + EC.message () + " \n " );
182+ return E;
183+ }
184+
185+ Out.write (CachedBuffer.data (), CachedBuffer.size ());
186+ Out.close ();
187+ if (Out.has_error ()) {
188+ Error E = createStringError (EC, Twine (" Failed to write " ) + OutputFilename +
189+ " : " + EC.message () + " \n " );
190+ return E;
191+ }
192+
193+ return Error::success ();
194+ }
195+
196+ Expected<std::unique_ptr<MemoryBuffer>>
197+ CachedCommandAdaptor::readUniqueExecuteOutput (StringRef OutputFilename) {
198+ ErrorOr<std::unique_ptr<MemoryBuffer>> MBOrErr =
199+ MemoryBuffer::getFile (OutputFilename);
200+ if (!MBOrErr) {
201+ std::error_code EC = MBOrErr.getError ();
202+ return createStringError (EC, Twine (" Failed to open " ) + OutputFilename +
203+ " : " + EC.message () + " \n " );
204+ }
205+
206+ return std::move (*MBOrErr);
207+ }
208+
173209CachedCommand::CachedCommand (driver::Command &Command,
174210 DiagnosticOptions &DiagOpts,
175211 ExecuteFnTy &&ExecuteImpl)
@@ -249,35 +285,16 @@ bool CachedCommand::canCache() const {
249285
250286Error CachedCommand::writeExecuteOutput (StringRef CachedBuffer) {
251287 StringRef OutputFilename = Command.getOutputFilenames ().front ();
252- std::error_code EC;
253- raw_fd_ostream Out (OutputFilename, EC);
254- if (EC) {
255- Error E = createStringError (EC, Twine (" Failed to open " ) + OutputFilename +
256- " : " + EC.message () + " \n " );
257- return E;
258- }
259-
260- Out.write (CachedBuffer.data (), CachedBuffer.size ());
261- Out.close ();
262- if (Out.has_error ()) {
263- Error E = createStringError (EC, Twine (" Failed to write " ) + OutputFilename +
264- " : " + EC.message () + " \n " );
265- return E;
266- }
267-
268- return Error::success ();
288+ return CachedCommandAdaptor::writeUniqueExecuteOutput (OutputFilename,
289+ CachedBuffer);
269290}
270291
271292Expected<StringRef> CachedCommand::readExecuteOutput () {
272- StringRef OutputFilename = Command.getOutputFilenames ().front ();
273- ErrorOr<std::unique_ptr<MemoryBuffer>> MBOrErr =
274- MemoryBuffer::getFile (OutputFilename);
275- if (!MBOrErr) {
276- std::error_code EC = MBOrErr.getError ();
277- return createStringError (EC, Twine (" Failed to open " ) + OutputFilename +
278- " : " + EC.message () + " \n " );
279- }
280- Output = std::move (*MBOrErr);
293+ auto MaybeBuffer = CachedCommandAdaptor::readUniqueExecuteOutput (
294+ Command.getOutputFilenames ().front ());
295+ if (!MaybeBuffer)
296+ return MaybeBuffer.takeError ();
297+ Output = std::move (*MaybeBuffer);
281298 return Output->getBuffer ();
282299}
283300
0 commit comments