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