diff --git a/clang/lib/Driver/Compilation.cpp b/clang/lib/Driver/Compilation.cpp index f550a2746e42..9c7100fb80c4 100644 --- a/clang/lib/Driver/Compilation.cpp +++ b/clang/lib/Driver/Compilation.cpp @@ -210,9 +210,9 @@ bool Compilation::CleanupFileList(const ArgStringList &Files, std::string Error; // Don't try to remove files which we don't have write access to (but may be - // able to remove). Underlying tools may have intentionally not overwritten - // them. - if (!P.canWrite()) + // able to remove), or non-regular files. Underlying tools may have + // intentionally not overwritten them. + if (!P.canWrite() || !P.isRegularFile()) continue; if (P.eraseFromDisk(false, &Error)) { diff --git a/clang/test/Driver/output-file-is-dir.c b/clang/test/Driver/output-file-is-dir.c new file mode 100644 index 000000000000..50f4cf97e55f --- /dev/null +++ b/clang/test/Driver/output-file-is-dir.c @@ -0,0 +1,6 @@ +// RUN: rm -rf %t.dir +// RUN: mkdir -p %t.dir/a.out +// RUN: cd %t.dir && not %clang %s +// RUN: test -d %t.dir/a.out + +int main() { return 0; }