From 50fcf7285eeb001d751eadac5d001a0e216fd701 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Fri, 9 Aug 2019 19:49:14 +0000 Subject: [PATCH] Don't diagnose errors when a file matches an include component 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 | 3 ++- clang/test/Preprocessor/Inputs/include-file-and-dir/file-and-dir | 0 .../Inputs/include-file-and-dir/incdir/file-and-dir/foo.h | 1 + clang/test/Preprocessor/include-header-file-and-dir.c | 4 ++++ 4 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 clang/test/Preprocessor/Inputs/include-file-and-dir/file-and-dir create mode 100644 clang/test/Preprocessor/Inputs/include-file-and-dir/incdir/file-and-dir/foo.h create mode 100644 clang/test/Preprocessor/include-header-file-and-dir.c diff --git a/clang/lib/Lex/HeaderSearch.cpp b/clang/lib/Lex/HeaderSearch.cpp index 8b6a19e..e9542b8 100644 --- a/clang/lib/Lex/HeaderSearch.cpp +++ b/clang/lib/Lex/HeaderSearch.cpp @@ -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 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 index 0000000..9d3235e --- /dev/null +++ b/clang/test/Preprocessor/Inputs/include-file-and-dir/incdir/file-and-dir/foo.h @@ -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 index 0000000..8da95ce --- /dev/null +++ b/clang/test/Preprocessor/include-header-file-and-dir.c @@ -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 -- 2.7.4