[PATCH] D30882: Add a callback for __has_include and use it for dependency scanning

Volodymyr Sapsai via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 14 16:20:23 PDT 2018


vsapsai marked 3 inline comments as done.
vsapsai added inline comments.


================
Comment at: include/clang/Lex/PPCallbacks.h:263
+  /// \brief Callback invoked when a has_include directive is read.
+  virtual void HasInclude(SourceLocation Loc, const FileEntry *File) {
+  }
----------------
rsmith wrote:
> This callback seems pretty unhelpful in the case where lookup of the file failed (you just get a source location). Could we pass in the `FileName` and `IsAngled` flag too (like we do for `InclusionDirective`)? I think that's what (eg) a callback tracking anti-dependencies (for a more sophisticated build system that can handle them) would want.
Added. Also added `FileType` so we can ignore system headers for `-MMD`. And tweaked doxygen comment to be more consistent with other callbacks.


================
Comment at: test/Frontend/dependency-gen-has-include.c:11-15
+// RUN: %clang -MD -MF %t.dir/file.deps %s -fsyntax-only -I %t.dir
+// RUN: FileCheck -input-file=%t.dir/file.deps %s
+// CHECK: dependency-gen-has-include.o
+// CHECK: dependency-gen-has-include.c
+// CHECK: a/header.h
----------------
dexonsmith wrote:
> This covers quoted includes when there is a single `-I`.  I think there are a couple of other cases worth testing:
> - Multiple `-I` arguments: all should be listed.
> - Angle includes: all `-isystem` should be listed too.
> - Also `-F` and `-iframework`.
I've added a test with system headers. Overall, my testing strategy was to test all cases for the following dimensions:
* file exists/file doesn't exist;
* file is user/system header;
* `__has_include`/`__has_include_next` is used.

But I don't test the full matrix as I don't think it provides enough value.


================
Comment at: test/Frontend/dependency-gen-has-include.c:17
+#if __has_include("a/header.h")
+#endif
----------------
bruno wrote:
> Can you also add a testcase for `__has_include_next`?
Added.


https://reviews.llvm.org/D30882





More information about the cfe-commits mailing list