diff options
| author | Volodymyr Sapsai <vsapsai@apple.com> | 2018-05-01 23:59:33 +0000 |
|---|---|---|
| committer | Volodymyr Sapsai <vsapsai@apple.com> | 2018-05-01 23:59:33 +0000 |
| commit | 210f0e880b2ecd0b9252c120839ac6ea115f2ce5 (patch) | |
| tree | d364c34899198e254a8bbb3be32e3441940354ae /clang/test | |
| parent | ddbd2b530c42d46eff1ad1360eb6cc5664f52bb3 (diff) | |
| download | bcm5719-llvm-210f0e880b2ecd0b9252c120839ac6ea115f2ce5.tar.gz bcm5719-llvm-210f0e880b2ecd0b9252c120839ac6ea115f2ce5.zip | |
Track skipped files in dependency scanning.
It's possible for a header to be a symlink to another header. In this
case both will be represented by clang::FileEntry with the same UID and
they'll use the same clang::HeaderFileInfo.
If you include both headers and use some single-inclusion mechanism
like a header guard or #import, one header will get a FileChanged
callback, and another FileSkipped.
So that we get an accurate dependency file, we therefore need to also
implement the FileSkipped callback in dependency scanning.
Patch by Pete Cooper.
Reviewers: bruno, pete
Reviewed By: bruno
Subscribers: cfe-commits, jkorous, vsapsai
Differential Revision: https://reviews.llvm.org/D30881
llvm-svn: 331319
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Frontend/Inputs/SystemHeaderPrefix/with-header-guard.h | 3 | ||||
| -rw-r--r-- | clang/test/Frontend/dependency-gen-symlink.c | 24 |
2 files changed, 27 insertions, 0 deletions
diff --git a/clang/test/Frontend/Inputs/SystemHeaderPrefix/with-header-guard.h b/clang/test/Frontend/Inputs/SystemHeaderPrefix/with-header-guard.h new file mode 100644 index 00000000000..7e4b6697a8a --- /dev/null +++ b/clang/test/Frontend/Inputs/SystemHeaderPrefix/with-header-guard.h @@ -0,0 +1,3 @@ +#ifndef HEADER_GUARD +#define HEADER_GUARD +#endif diff --git a/clang/test/Frontend/dependency-gen-symlink.c b/clang/test/Frontend/dependency-gen-symlink.c new file mode 100644 index 00000000000..2fa339ad2ab --- /dev/null +++ b/clang/test/Frontend/dependency-gen-symlink.c @@ -0,0 +1,24 @@ +// REQUIRES: shell + +// Basic test +// RUN: rm -rf %t.dir +// RUN: mkdir %t.dir +// RUN: mkdir %t.dir/a +// RUN: mkdir %t.dir/b +// RUN: echo "#ifndef HEADER_A" > %t.dir/a/header.h +// RUN: echo "#define HEADER_A" >> %t.dir/a/header.h +// RUN: echo "#endif" >> %t.dir/a/header.h +// RUN: ln -s %t.dir/a/header.h %t.dir/b/header.h + +// RUN: %clang_cc1 -dependency-file %t.dir/file.deps -MT %s.o %s -fsyntax-only -I %t.dir -isystem %S/Inputs/SystemHeaderPrefix +// RUN: FileCheck -input-file=%t.dir/file.deps %s +// CHECK: dependency-gen-symlink.c.o +// CHECK: dependency-gen-symlink.c +// CHECK: a/header.h +// CHECK: b/header.h +// CHECK-NOT: with-header-guard.h +#include "a/header.h" +#include "b/header.h" +// System header shouldn't be included in dependencies. +#include <with-header-guard.h> +#include <with-header-guard.h> |

