Closed z2oh closed 3 weeks ago
CC: @bnbarham
@swift-ci please test
Seems like this might need another cherry-pick too?
llvm-project/clang/lib/Index/IndexUnitWriter.cpp:245:74: error: no member named 'delete_pending' in 'llvm::errc'
if (EC != llvm::errc::no_such_file_or_directory && EC != llvm::errc::delete_pending) {
Thanks for the quick review! Yeah, I just noticed that CI failure. Cherry-pick for the other change is here: https://github.com/apple/llvm-project/pull/8850
@swift-ci please test
Explanation: Fixes a common compiler crash on Windows when generating the index while building. Scope: This crash happens frequently when building large projects on Windows when indexing while building. The
delete_pending
error code is only generated on Windows when thestatus
function is called against a path that has been marked for deletion. Issue: This issue tracked the addition of the new error code, which was done in support of the fix here: https://github.com/llvm/llvm-project/issues/89137 Risk: Very low risk, this change introduces handling for a new error code that can only be generated under specific conditions on Windows. Testing: Tested through LLVM CI and locally. Reviewer: @compnerdMultiple clang processes race to write out the same index file via renaming a newly generated index file ontop of the stale one. On Windows, there is a small window where the destination path is marked for deletion, and querying the file at this time would return a misleading
permission_denied
error (which is the Win32 error mapping from the underlying NTSTATUS codeSTATUS_DELETE_PENDING
). An upstream change has modified thefs::status
function on Windows to detect this case and return a more accuratedelete_pending
error code, which can be handled here as if the file is already deleted (i.e.no_such_file_or_directory
)(cherry picked from commit dd2cc940551f22c732803ccedda467bbf7228de6)