Don't diagnose errors when a file matches an include component
authorReid Kleckner <rnk@google.com>
Fri, 9 Aug 2019 19:49:14 +0000 (19:49 +0000)
committerReid Kleckner <rnk@google.com>
Fri, 9 Aug 2019 19:49:14 +0000 (19:49 +0000)
This regressed in r368322, and was reported as PR42948 and on the
mailing list. The fix is to ignore the specific error code for this
case. The problem doesn't seem to reproduce on Windows, where a
different error code is used instead.

llvm-svn: 368475

clang/lib/Lex/HeaderSearch.cpp
clang/test/Preprocessor/Inputs/include-file-and-dir/file-and-dir [new file with mode: 0644]
clang/test/Preprocessor/Inputs/include-file-and-dir/incdir/file-and-dir/foo.h [new file with mode: 0644]
clang/test/Preprocessor/include-header-file-and-dir.c [new file with mode: 0644]

index 8b6a19e..e9542b8 100644 (file)
@@ -316,7 +316,8 @@ const FileEntry *HeaderSearch::getFileAndSuggestModule(
     // message.
     std::error_code EC = File.getError();
     if (EC != std::errc::no_such_file_or_directory &&
-        EC != std::errc::invalid_argument && EC != std::errc::is_a_directory) {
+        EC != std::errc::invalid_argument && EC != std::errc::is_a_directory &&
+        EC != std::errc::not_a_directory) {
       Diags.Report(IncludeLoc, diag::err_cannot_open_file)
           << FileName << EC.message();
     }
diff --git a/clang/test/Preprocessor/Inputs/include-file-and-dir/file-and-dir b/clang/test/Preprocessor/Inputs/include-file-and-dir/file-and-dir
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/clang/test/Preprocessor/Inputs/include-file-and-dir/incdir/file-and-dir/foo.h b/clang/test/Preprocessor/Inputs/include-file-and-dir/incdir/file-and-dir/foo.h
new file mode 100644 (file)
index 0000000..9d3235e
--- /dev/null
@@ -0,0 +1 @@
+included_foo_dot_h
diff --git a/clang/test/Preprocessor/include-header-file-and-dir.c b/clang/test/Preprocessor/include-header-file-and-dir.c
new file mode 100644 (file)
index 0000000..8da95ce
--- /dev/null
@@ -0,0 +1,4 @@
+// RUN: %clang_cc1 -E -P %s -I%S/Inputs/include-file-and-dir -I%S/Inputs/include-file-and-dir/incdir -o - | FileCheck %s
+#include "file-and-dir/foo.h"
+
+// CHECK: included_foo_dot_h