summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorVolodymyr Sapsai <vsapsai@apple.com>2018-05-01 23:59:33 +0000
committerVolodymyr Sapsai <vsapsai@apple.com>2018-05-01 23:59:33 +0000
commit210f0e880b2ecd0b9252c120839ac6ea115f2ce5 (patch)
treed364c34899198e254a8bbb3be32e3441940354ae /clang/test
parentddbd2b530c42d46eff1ad1360eb6cc5664f52bb3 (diff)
downloadbcm5719-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.h3
-rw-r--r--clang/test/Frontend/dependency-gen-symlink.c24
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>
OpenPOWER on IntegriCloud