diff options
| author | Volodymyr Sapsai <vsapsai@apple.com> | 2019-09-11 20:39:04 +0000 |
|---|---|---|
| committer | Volodymyr Sapsai <vsapsai@apple.com> | 2019-09-11 20:39:04 +0000 |
| commit | 2f843616849963e8df7a561ce5179ed29a767057 (patch) | |
| tree | c07e811ffbee24c5f627c5f1aa7f8e6c99974b84 /clang/test/Preprocessor | |
| parent | 1b385a180250dac9a3b8aa469a242454322e76bc (diff) | |
| download | bcm5719-llvm-2f843616849963e8df7a561ce5179ed29a767057.tar.gz bcm5719-llvm-2f843616849963e8df7a561ce5179ed29a767057.zip | |
Fix -Wnonportable-include-path suppression for header maps with absolute paths.
In `DirectoryLookup::LookupFile` parameter `HasBeenMapped` doesn't cover
the case when clang finds a file through a header map but doesn't remap
the lookup filename because the target path is an absolute path. As a
result, -Wnonportable-include-path suppression for header maps
introduced in r301592 wasn't triggered.
Change parameter `HasBeenMapped` to `IsInHeaderMap` and use parameter
`MappedName` to track the filename remapping. This way we can handle
both relative and absolute paths in header maps, and account for their
specific properties, like filename remapping being a property preserved
across lookups in multiple directories.
rdar://problem/39516483
Reviewers: dexonsmith, bruno
Reviewed By: dexonsmith
Subscribers: jkorous, cfe-commits, ributzka
Differential Revision: https://reviews.llvm.org/D58094
llvm-svn: 371655
Diffstat (limited to 'clang/test/Preprocessor')
4 files changed, 22 insertions, 3 deletions
diff --git a/clang/test/Preprocessor/Inputs/nonportable-hmaps/foo.hmap.json b/clang/test/Preprocessor/Inputs/nonportable-hmaps/foo.hmap.json index c69f1df7725..4852f363e0a 100644 --- a/clang/test/Preprocessor/Inputs/nonportable-hmaps/foo.hmap.json +++ b/clang/test/Preprocessor/Inputs/nonportable-hmaps/foo.hmap.json @@ -1,6 +1,9 @@ { "mappings" : { - "Foo/Foo.h" : "headers/foo/Foo.h" + "Foo/Foo.h" : "headers/foo/Foo.h", + "Bar.h" : "headers/foo/Bar.h", + "Foo/Bar.h" : "INPUTS_DIR/nonportable-hmaps/headers/foo/Bar.h", + "headers/Foo/Baz.h" : "/not/existing/absolute/path/Baz.h" } } diff --git a/clang/test/Preprocessor/Inputs/nonportable-hmaps/headers/foo/Bar.h b/clang/test/Preprocessor/Inputs/nonportable-hmaps/headers/foo/Bar.h new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/clang/test/Preprocessor/Inputs/nonportable-hmaps/headers/foo/Bar.h diff --git a/clang/test/Preprocessor/Inputs/nonportable-hmaps/headers/foo/Baz.h b/clang/test/Preprocessor/Inputs/nonportable-hmaps/headers/foo/Baz.h new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/clang/test/Preprocessor/Inputs/nonportable-hmaps/headers/foo/Baz.h diff --git a/clang/test/Preprocessor/nonportable-include-with-hmap.c b/clang/test/Preprocessor/nonportable-include-with-hmap.c index bbbd669a0f3..6fd407c4fa5 100644 --- a/clang/test/Preprocessor/nonportable-include-with-hmap.c +++ b/clang/test/Preprocessor/nonportable-include-with-hmap.c @@ -1,5 +1,9 @@ +// REQUIRES: shell + // RUN: rm -f %t.hmap -// RUN: %hmaptool write %S/Inputs/nonportable-hmaps/foo.hmap.json %t.hmap +// RUN: sed -e "s:INPUTS_DIR:%S/Inputs:g" \ +// RUN: %S/Inputs/nonportable-hmaps/foo.hmap.json > %t.hmap.json +// RUN: %hmaptool write %t.hmap.json %t.hmap // RUN: %clang_cc1 -Eonly \ // RUN: -I%t.hmap \ // RUN: -I%S/Inputs/nonportable-hmaps \ @@ -15,4 +19,16 @@ // 5. Return. // // There is nothing nonportable; -Wnonportable-include-path should not fire. -#include "Foo/Foo.h" // expected-no-diagnostics +#include "Foo/Foo.h" // no warning + +// Verify files with absolute paths in the header map are handled too. +// "Bar.h" is included twice to make sure that when we see potentially +// nonportable path, the file has been already discovered through a relative +// path which triggers the file to be opened and `FileEntry::RealPathName` +// to be set. +#include "Bar.h" +#include "Foo/Bar.h" // no warning + +// But the presence of the absolute path in the header map is not enough. If we +// didn't use it to discover a file, shouldn't suppress the warning. +#include "headers/Foo/Baz.h" // expected-warning {{non-portable path}} |

