r356712 - Improve the diagnostic for #include_next occurring in a file not found

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 21 13:42:13 PDT 2019


Author: rsmith
Date: Thu Mar 21 13:42:13 2019
New Revision: 356712

URL: http://llvm.org/viewvc/llvm-project?rev=356712&view=rev
Log:
Improve the diagnostic for #include_next occurring in a file not found
in the include path.

Instead of making the incorrect claim that the included file has an
absolute path, describe the actual problem: the including file was found
either by absolute path, or relative to such a file, or relative to the
primary source file.

Added:
    cfe/trunk/test/Preprocessor/Inputs/include-next-1/
    cfe/trunk/test/Preprocessor/Inputs/include-next-1/bar.h
    cfe/trunk/test/Preprocessor/Inputs/include-next-1/foo.h
    cfe/trunk/test/Preprocessor/Inputs/include-next-2/
    cfe/trunk/test/Preprocessor/Inputs/include-next-2/bar.h
    cfe/trunk/test/Preprocessor/include-next.c
Modified:
    cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td
    cfe/trunk/lib/Lex/PPDirectives.cpp

Modified: cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td?rev=356712&r1=356711&r2=356712&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td Thu Mar 21 13:42:13 2019
@@ -268,12 +268,14 @@ def err_pp_hash_error : Error<"%0">;
 }
 
 def pp_include_next_in_primary : Warning<
-  "#include_next in primary source file">,
+  "#include_next in primary source file; "
+  "will search from start of include path">,
   InGroup<DiagGroup<"include-next-outside-header">>;
 def pp_include_macros_out_of_predefines : Error<
   "the #__include_macros directive is only for internal use by -imacros">;
 def pp_include_next_absolute_path : Warning<
-  "#include_next with absolute path">,
+  "#include_next in file found relative to primary source file or found by "
+  "absolute path; will search from start of include path">,
   InGroup<DiagGroup<"include-next-absolute-path">>;
 def ext_c99_whitespace_required_after_macro_name : ExtWarn<
   "ISO C99 requires whitespace after the macro name">, InGroup<C99>;

Modified: cfe/trunk/lib/Lex/PPDirectives.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=356712&r1=356711&r2=356712&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/PPDirectives.cpp (original)
+++ cfe/trunk/lib/Lex/PPDirectives.cpp Thu Mar 21 13:42:13 2019
@@ -2085,6 +2085,10 @@ void Preprocessor::HandleIncludeNextDire
     LookupFromFile = CurPPLexer->getFileEntry();
     Lookup = nullptr;
   } else if (!Lookup) {
+    // The current file was not found by walking the include path. Either it
+    // is the primary file (handled above), or it was found by absolute path,
+    // or it was found relative to such a file.
+    // FIXME: Track enough information so we know which case we're in.
     Diag(IncludeNextTok, diag::pp_include_next_absolute_path);
   } else {
     // Start looking up in the next directory.

Added: cfe/trunk/test/Preprocessor/Inputs/include-next-1/bar.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/Inputs/include-next-1/bar.h?rev=356712&view=auto
==============================================================================
--- cfe/trunk/test/Preprocessor/Inputs/include-next-1/bar.h (added)
+++ cfe/trunk/test/Preprocessor/Inputs/include-next-1/bar.h Thu Mar 21 13:42:13 2019
@@ -0,0 +1 @@
+#define BAR 1

Added: cfe/trunk/test/Preprocessor/Inputs/include-next-1/foo.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/Inputs/include-next-1/foo.h?rev=356712&view=auto
==============================================================================
--- cfe/trunk/test/Preprocessor/Inputs/include-next-1/foo.h (added)
+++ cfe/trunk/test/Preprocessor/Inputs/include-next-1/foo.h Thu Mar 21 13:42:13 2019
@@ -0,0 +1 @@
+#include_next "bar.h"

Added: cfe/trunk/test/Preprocessor/Inputs/include-next-2/bar.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/Inputs/include-next-2/bar.h?rev=356712&view=auto
==============================================================================
--- cfe/trunk/test/Preprocessor/Inputs/include-next-2/bar.h (added)
+++ cfe/trunk/test/Preprocessor/Inputs/include-next-2/bar.h Thu Mar 21 13:42:13 2019
@@ -0,0 +1 @@
+#define BAR 2

Added: cfe/trunk/test/Preprocessor/include-next.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/include-next.c?rev=356712&view=auto
==============================================================================
--- cfe/trunk/test/Preprocessor/include-next.c (added)
+++ cfe/trunk/test/Preprocessor/include-next.c Thu Mar 21 13:42:13 2019
@@ -0,0 +1,29 @@
+// RUN: %clang_cc1 -verify %s -E -o /dev/null -I%S/Inputs/include-next-1 -I%S/Inputs/include-next-2 -DTEST=1
+// RUN: %clang_cc1 -verify %s -E -o /dev/null -I%S/Inputs/include-next-1 -I%S/Inputs/include-next-2 -DTEST=2
+// RUN: %clang_cc1 -verify %s -E -o /dev/null -I%S/Inputs/include-next-1 -I%S/Inputs/include-next-2 -DTEST=3
+
+#if TEST == 1
+// expected-warning at +1 {{#include_next in primary source file}}
+#include_next "bar.h"
+#if BAR != 1
+#error wrong bar
+#endif
+
+#elif TEST == 2
+// expected-no-diagnostics
+#include "foo.h"
+#if BAR != 2
+#error wrong bar
+#endif
+
+#elif TEST == 3
+// expected-warning at foo.h:1 {{#include_next in file found relative to primary source file or found by absolute path}}
+#include "Inputs/include-next-1/foo.h"
+#if BAR != 1
+#error wrong bar
+#endif
+#undef BAR
+
+#else
+#error unknown test
+#endif




More information about the cfe-commits mailing list