diff options
-rw-r--r-- | lib/Driver/Compilation.cpp | 6 | ||||
-rw-r--r-- | test/Driver/output-file-is-dir.c | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/lib/Driver/Compilation.cpp b/lib/Driver/Compilation.cpp index f550a2746e..9c7100fb80 100644 --- a/lib/Driver/Compilation.cpp +++ b/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/test/Driver/output-file-is-dir.c b/test/Driver/output-file-is-dir.c new file mode 100644 index 0000000000..50f4cf97e5 --- /dev/null +++ b/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; } |